diff --git a/build/build_container.sh b/build/build_container.sh new file mode 100755 index 0000000000000000000000000000000000000000..fc65a05c128655e452f3f2ed8ec625723ac12173 --- /dev/null +++ b/build/build_container.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if test -f "summa_actors.sif"; then + echo "Conatiner exists" +else + sudo apptainer build summa_actors.sif summa_actors.def +fi diff --git a/build/build_summa_actors_container.sh b/build/build_summa_actors_container.sh new file mode 100755 index 0000000000000000000000000000000000000000..06626809129981407a74a4ef33124f1f64bb4566 --- /dev/null +++ b/build/build_summa_actors_container.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +cd /Summa-Actors/build +make -f /Summa-Actors/build/makefile-container all \ No newline at end of file diff --git a/build/includes/file_access_actor/file_access_actor.hpp b/build/includes/file_access_actor/file_access_actor.hpp new file mode 100644 index 0000000000000000000000000000000000000000..66e2a5362d9a4c17ca9b8989201e98fc0013b510 --- /dev/null +++ b/build/includes/file_access_actor/file_access_actor.hpp @@ -0,0 +1,41 @@ +#pragma once + +#include "caf/all.hpp" +#include "output_manager.hpp" +#include "forcing_file_info.hpp" +#include "timing_info.hpp" + +namespace caf { +struct file_access_state { + // Variables set on Spwan + caf::actor parent; + int startGRU; + int numGRU; + + + void *handle_forcing_file_info; // Handle for the forcing file information + void *handle_ncid; // output file ids + OutputManager *output_manager; + int num_vectors_in_output_manager; + int num_steps; + int outputStrucSize; + int stepsInCurrentFile; + int numFiles; + int filesLoaded; + int err; + + std::vector<Forcing_File_Info> forcing_file_list; // list of steps in file + std::vector<bool> outputFileInitHRU; + + // Timing Variables + TimingInfo file_access_timing; +}; + +behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU, int numGRU, + int outputStrucSize, std::string configPath, actor parent); +void initalizeFileAccessActor(stateful_actor<file_access_state>* self); +int writeOutput(stateful_actor<file_access_state>* self, int indxGRU, int indxHRU, int numStepsToWrite, int returnMessage, caf::actor actorRef); +int readForcing(stateful_actor<file_access_state>* self, int currentFile); +int write(stateful_actor<file_access_state>* self, int listIndex); + +} // end namespace \ No newline at end of file diff --git a/build/source/actors/file_access_actor/fileAccess_subroutine_wrappers.h b/build/includes/file_access_actor/file_access_actor_subroutine_wrappers.hpp similarity index 83% rename from build/source/actors/file_access_actor/fileAccess_subroutine_wrappers.h rename to build/includes/file_access_actor/file_access_actor_subroutine_wrappers.hpp index 795afc439ccd5fa47ff58cd5108a673e07af041e..9df279923786024d24759f1386a59091458f432a 100644 --- a/build/source/actors/file_access_actor/fileAccess_subroutine_wrappers.h +++ b/build/includes/file_access_actor/file_access_actor_subroutine_wrappers.hpp @@ -1,9 +1,7 @@ -#ifndef fileAccess_SUBROUTINE_WRAPPERS_H_ -#define fileAccess_SUBROUTINE_WRAPPERS_H_ +#pragma once extern "C" { - void read_pinit_C(int* err); void read_vegitationTables(int* err); @@ -30,10 +28,7 @@ extern "C" { void FileAccessActor_DeallocateStructures(void* handle_forcFileInfo, void* handle_ncid); - void Create_Output_File(void* handle_ncid, int* numGRU, int* startGRU, int* err); + void def_output(void* handle_ncid, int* startGRU, int* numGRU, int* numHRU, int* err); void Write_HRU_Param(void* handle_ncid, int* indxGRU, int* indxHRU, int* err); } - - -#endif \ No newline at end of file diff --git a/build/includes/file_access_actor/forcing_file_info.hpp b/build/includes/file_access_actor/forcing_file_info.hpp new file mode 100644 index 0000000000000000000000000000000000000000..14945aabb5352fa0dad6ec0b9da49f00d0e2910a --- /dev/null +++ b/build/includes/file_access_actor/forcing_file_info.hpp @@ -0,0 +1,20 @@ +#pragma once + +class Forcing_File_Info { + private: + int file_ID; + int num_steps; + bool is_loaded; + + public: + Forcing_File_Info(int file_ID); + + int getNumSteps(); + + bool isFileLoaded(); + + void updateIsLoaded(); + + void updateNumSteps(int num_steps); + +}; \ No newline at end of file diff --git a/build/includes/file_access_actor/output_manager.hpp b/build/includes/file_access_actor/output_manager.hpp new file mode 100644 index 0000000000000000000000000000000000000000..20f18c740ffbb55cd76c04fcd42746c2d9a798f9 --- /dev/null +++ b/build/includes/file_access_actor/output_manager.hpp @@ -0,0 +1,56 @@ +#pragma once + +#include "caf/all.hpp" +#include <vector> +#include <algorithm> + + +class ActorRefList { + private: + int numStepsToWrite; // We can save this value here so that we know how many steps to write + int currentSize; + unsigned int maxSize; + int minIndex = -1; // minimum index of the actor being stored on this list + int maxIndex = 0; // maximum index of the actor being stored on this list + std::vector<std::tuple<caf::actor, int>> list; + + public: + ActorRefList(int maxSize); + ~ActorRefList(); + int getMaxIndex(); + int getMinIndex(); + int getCurrentSize(); + int getMaxSize(); + int getNumStepsToWrite(); + bool isFull(); + void addActor(caf::actor actor, int index, int returnMessage, int numStepsToWrite); + std::tuple<caf::actor,int> popActor(); + bool isEmpty(); + void decrementMaxSize(); + void removeFailed(caf::actor actorRef); +}; + +class OutputManager { + private: + int numVectors; + int avgSizeOfActorList; + bool runningFailures; + std::vector<ActorRefList*> list; + std::vector<int> failedHRU; + std::vector<int> failureReRun; // index used so we can add failedHRUs if they fail a second time + public: + OutputManager(int numVectors, int totalNumActors); + ~OutputManager(); + int addActor(caf::actor actor, int index, int returnMessage, int numStepsToWrite); + std::tuple<caf::actor,int> popActor(int index); + int removeFailed(caf::actor actorRef, int index); + int decrementMaxSize(int indexHRU); + void restartFailures(); + int getNumStepsToWrite(int listIndex); + bool isFull(int listIndex); + bool isEmpty(int listIndex); + int getSize(int listIndex); + int getMinIndex(int listIndex); + int getMaxIndex(int listIndex); + void addFailed(int indxHRU); +}; \ No newline at end of file diff --git a/build/source/actors/global/fortran_dataTypes.h b/build/includes/global/fortran_data_types.hpp similarity index 98% rename from build/source/actors/global/fortran_dataTypes.h rename to build/includes/global/fortran_data_types.hpp index 2fceb62bee0f68976907106d6cefa285829c73fa..7552b971c55fe790187cb7445494de767a40529b 100644 --- a/build/source/actors/global/fortran_dataTypes.h +++ b/build/includes/global/fortran_data_types.hpp @@ -1,5 +1,4 @@ -#ifndef FORTRAN_DATATYPES_H_ -#define FORTRAN_DATATYPES_H_ +#pragma once extern "C" { // flagVec @@ -97,6 +96,4 @@ extern "C" { void* new_handle_file_info(); void delete_handle_file_info(void* handle); -} - -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/build/includes/global/global.hpp b/build/includes/global/global.hpp new file mode 100644 index 0000000000000000000000000000000000000000..69b695bae52f83121c48f10cc2974ebc649992f1 --- /dev/null +++ b/build/includes/global/global.hpp @@ -0,0 +1,58 @@ +#pragma once + +#include <chrono> +#include <optional> +#include <iostream> +#include <vector> +#include <bits/stdc++.h> +#include <unistd.h> +#include "json.hpp" + + +using json = nlohmann::json; + +extern bool debug; +template<typename T> +int getSettingsTest(std::vector<std::string> keys, T return_value) { + for (std::vector<int>::size_type i = 0; i < keys.size(); i++) { + std::cout<< keys[i] << std::endl; + } + + return 0; +} + +/** + * Return the time between to time points + */ +double calculateTime(std::chrono::time_point<std::chrono::system_clock> start, + std::chrono::time_point<std::chrono::system_clock> end); + +template <typename T> +std::optional<T> getSettings(std::string settings_file_path, std::string key_1, std::string key_2, + T return_value) { + json settings; + std::string summa_actors_settings = "/Summa_Actors_Settings.json"; + std::ifstream settings_file(settings_file_path + summa_actors_settings); + settings_file >> settings; + settings_file.close(); + + // find first key + try { + if (settings.find(key_1) != settings.end()) { + json key_1_settings = settings[key_1]; + + // find value behind second key + if (key_1_settings.find(key_2) != key_1_settings.end()) { + return key_1_settings[key_2]; + } else + return {}; + + } else { + return {}; // return none in the optional (error value) + } + } catch (json::exception& e) { + std::cout << e.what() << "\n"; + return {}; + } + +} \ No newline at end of file diff --git a/build/source/actors/global/json.hpp b/build/includes/global/json.hpp similarity index 100% rename from build/source/actors/global/json.hpp rename to build/includes/global/json.hpp diff --git a/build/source/actors/global/messageAtoms.h b/build/includes/global/message_atoms.hpp similarity index 84% rename from build/source/actors/global/messageAtoms.h rename to build/includes/global/message_atoms.hpp index d8a3c4f2d4c8f58adddcd9c9a02290cc258ff360..11b425b48f07f462246d5e795dd44bd411066765 100644 --- a/build/source/actors/global/messageAtoms.h +++ b/build/includes/global/message_atoms.hpp @@ -1,5 +1,6 @@ -#ifndef MESSAGEATOMS_H_ -#define MESSAGEATOMS_H_ +#pragma once + +#include "../summa_actor/batch_manager.hpp" CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id) // Summa Actor @@ -38,7 +39,11 @@ CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id) CAF_ADD_ATOM(summa, start_hru) CAF_ADD_ATOM(summa, file_information) CAF_ADD_ATOM(summa, dt_init_factor) + // Client Actor + CAF_ADD_ATOM(summa, connect_to_server) + CAF_ADD_ATOM(summa, batch) + // Server Actor + CAF_ADD_ATOM(summa, done_batch) + CAF_ADD_ATOM(summa, time_to_exit) -CAF_END_TYPE_ID_BLOCK(summa) - -#endif \ No newline at end of file +CAF_END_TYPE_ID_BLOCK(summa) \ No newline at end of file diff --git a/build/includes/global/timing_info.hpp b/build/includes/global/timing_info.hpp new file mode 100644 index 0000000000000000000000000000000000000000..e246a6ca2593eacf94254e8306ebc62354b379da --- /dev/null +++ b/build/includes/global/timing_info.hpp @@ -0,0 +1,31 @@ +#pragma once +#include <chrono> +#include <optional> +#include <vector> + +using chrono_time = std::chrono::time_point<std::chrono::system_clock>; +/** + * Class to manage timing information. This allows the user to add an arbitrary amount of timing variables. + * The timing variables are accessed through their named string and will keep a running duration of the amount + * of time spent through multiple calls to updateStartPoint and updateEndPoint + */ +class TimingInfo { + private: + std::vector<std::optional<chrono_time>> start; + std::vector<std::optional<chrono_time>> end; + std::vector<double> duration; + std::vector<std::string> name_of_time_point; // the name you want for the time point (ie. reading, writing, duration) + int num_time_points; + + std::optional<double> calculateDuration(int index); + std::optional<int> getIndex(std::string time_point_name); + + public: + TimingInfo(); + ~TimingInfo(); + void addTimePoint(std::string time_point_name); + void updateStartPoint(std::string time_point_name); + void updateEndPoint(std::string time_point_name); + std::optional<double> getDuration(std::string time_point_name); // returns duration in seconds + +}; \ No newline at end of file diff --git a/build/source/actors/hru_actor/HRU.h b/build/includes/hru_actor/hru_actor.hpp similarity index 74% rename from build/source/actors/hru_actor/HRU.h rename to build/includes/hru_actor/hru_actor.hpp index 8dd21f21da1af814887b80aac0a57e3da4fa0529..2f4c8d9b6bd3f01cb23826997be4750ffc2d82cb 100644 --- a/build/source/actors/hru_actor/HRU.h +++ b/build/includes/hru_actor/hru_actor.hpp @@ -1,24 +1,15 @@ -#ifndef HRU_H_ -#define HRU_H_ +#pragma once + #include "caf/all.hpp" -#include "hru_subroutine_wrappers.h" -#include "../global/fortran_dataTypes.h" -#include "../global/messageAtoms.h" -#include "../global/json.hpp" -#include "../global/global.h" +#include "fortran_data_types.hpp" +#include "timing_info.hpp" -#include <fstream> -#include <string> -#include <typeinfo> -#include <stdio.h> -#include <sys/time.h> -#include <sys/resource.h> #include <chrono> -#include <iostream> +#include <string> -using namespace caf; +namespace caf { struct hru_state { // Actor References caf::actor file_access_actor; @@ -91,31 +82,13 @@ struct hru_state { int yearLength; int err = 0; // error conotrol - std::chrono::time_point<std::chrono::system_clock> start; - std::chrono::time_point<std::chrono::system_clock> end; - double duration = 0.0; - std::chrono::time_point<std::chrono::system_clock> initStart; - std::chrono::time_point<std::chrono::system_clock> initEnd; - double initDuration = 0.0; - std::chrono::time_point<std::chrono::system_clock> forcingStart; - std::chrono::time_point<std::chrono::system_clock> forcingEnd; - double forcingDuration = 0.0; - std::chrono::time_point<std::chrono::system_clock> runPhysicsStart; - std::chrono::time_point<std::chrono::system_clock> runPhysicsEnd; - double runPhysicsDuration = 0.0; - std::chrono::time_point<std::chrono::system_clock> writeOutputStart; - std::chrono::time_point<std::chrono::system_clock> writeOutputEnd; - double writeOutputDuration = 0.0; + TimingInfo hru_timing; }; -/** - * @brief Get the settings from the settings JSON file - * - * @param self Actor State - * @param configPath Path to the directory that contains the settings file - */ -void parseSettings(stateful_actor<hru_state>* self, std::string configPath); +behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, + std::string configPath, + caf::actor file_access_actor, int outputStrucSize, caf::actor parent); /** Function to initalize the HRU for running @@ -136,4 +109,6 @@ void finalizeTimeVars(stateful_actor<hru_state>* self); void deallocateHRUStructures(stateful_actor<hru_state>* self); void printOutput(stateful_actor<hru_state>* self); -#endif \ No newline at end of file + + +} \ No newline at end of file diff --git a/build/source/actors/hru_actor/hru_subroutine_wrappers.h b/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp similarity index 97% rename from build/source/actors/hru_actor/hru_subroutine_wrappers.h rename to build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp index 638580d57a68f5e2d3dad9d891b2fb6b55c4bb46..577b3f2ebc15385db58f588f47a2b5e89de10fcd 100644 --- a/build/source/actors/hru_actor/hru_subroutine_wrappers.h +++ b/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp @@ -1,10 +1,8 @@ -#ifndef HRU_SUBROUTINE_WRAPPERS_H_ -#define HRU_SUBROUTINE_WRAPPERS_H_ - +#pragma once extern "C" { // Initialize HRU data_structures - void Initialize( + void summaActors_initialize( int* indxGRU, int* num_steps, // Statistics Structures void* forcStat, void* progStat, void* diagStat, void* fluxStat, void* indxStat, void* bvarStat, @@ -97,8 +95,4 @@ extern "C" { int* indxGRU, int* indxHRU, void* handle_attrStruct, void* handle_typeStruct, void* handle_mparStruct, void* handle_bparStruct, int* err); -} - - - -# endif +} \ No newline at end of file diff --git a/build/includes/job_actor/GRUinfo.hpp b/build/includes/job_actor/GRUinfo.hpp new file mode 100644 index 0000000000000000000000000000000000000000..b46b84e5d006ad5a9f453178f7cc1f26b90573ff --- /dev/null +++ b/build/includes/job_actor/GRUinfo.hpp @@ -0,0 +1,70 @@ +#pragma once + +#include "caf/all.hpp" +#include <iostream> +#include <fstream> + +class GRUinfo { + private: + int refGRU; // This will be the same as the refGRU + int indxGRU; + caf::actor GRU; + + // Variable to update + int dt_init; + + // Completed Information + int currentAttempt; + int maxAttempts; + bool completed; + bool failed; + + // Timing information for the GRU + double runTime; + double initDuration; + double forcingDuration; + double runPhysicsDuration; + double writeOutputDuration; + + public: + + // Constructor + GRUinfo(int refGRU, int indxGRU, caf::actor gru, int dt_init, int maxAttempts); + + // Deconstructor + ~GRUinfo(); + + + int getRefGRU(); + + int getIndxGRU(); + + int getDt_init(); + + caf::actor getActor(); + + void updateGRU(caf::actor gru); + + void updateFailed(); + + void updateCompletedToTrue(); + + void updateDt_init(); + + void updateCurrentAttempt(); + + bool isMaxAttemptsReached(); + + bool isFailed(); + + bool isCompleted(); + + void doneRun(double runTime, double initDuration, double forcingDuration, + double runPhysicsDuration, double writeOutputDuration); + + void writeSuccess(std::string fileName); + + void writeFail(std::string fileName); + + void printOutput(); +}; \ No newline at end of file diff --git a/build/source/actors/job_actor/Job.h b/build/includes/job_actor/job_actor.hpp similarity index 74% rename from build/source/actors/job_actor/Job.h rename to build/includes/job_actor/job_actor.hpp index dd44e5d8d93da7ae479f3e32249bc28c80d14da5..f4f8ef5fe1c1985e5ffe28637e4f00749e5334d3 100644 --- a/build/source/actors/job_actor/Job.h +++ b/build/includes/job_actor/job_actor.hpp @@ -1,24 +1,10 @@ -#ifndef SUMMACLIENT_H_ -#define SUMMACLIENT_H_ - +#pragma once #include "caf/all.hpp" #include "caf/io/all.hpp" -#include "../file_access_actor/FileAccessActor.h" -#include "../hru_actor/HRUActor.h" -#include "../global/messageAtoms.h" -#include "../global/json.hpp" -#include "../global/global.h" -#include "GRUinfo.h" -#include "job_subroutine_wrappers.h" - -#include "string.h" -#include <unistd.h> -#include <vector> -#include <chrono> -#include <iostream> -#include <fstream> -#include <sys/stat.h> +#include "GRUinfo.hpp" +#include "timing_info.hpp" +namespace caf { struct job_state { // Actor References caf::actor file_access_actor; // actor reference for the file_access_actor @@ -42,9 +28,8 @@ struct job_state { int outputStrucSize; // Timing Variables - std::chrono::time_point<std::chrono::system_clock> start; - std::chrono::time_point<std::chrono::system_clock> end; - double duration; + TimingInfo job_timing; + // Output File Names for Timings bool outputCSV; @@ -56,7 +41,8 @@ struct job_state { }; - +behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, + std::string configPath, int outputStrucSize, actor parent); int parseSettings(stateful_actor<job_state>* self, std::string configPath); @@ -68,4 +54,4 @@ void runGRUs(stateful_actor<job_state>* self); void restartFailures(stateful_actor<job_state>* self); -#endif \ No newline at end of file +} // end namespace \ No newline at end of file diff --git a/build/source/actors/job_actor/job_subroutine_wrappers.h b/build/includes/job_actor/job_actor_subroutine_wrappers.hpp similarity index 71% rename from build/source/actors/job_actor/job_subroutine_wrappers.h rename to build/includes/job_actor/job_actor_subroutine_wrappers.hpp index 8326cb0020c22b63d4f7f6ac0f729d58f49e7572..df66a121eccd367fdb5b4981aa1a1d14b3f0e042 100644 --- a/build/source/actors/job_actor/job_subroutine_wrappers.h +++ b/build/includes/job_actor/job_actor_subroutine_wrappers.hpp @@ -1,5 +1,4 @@ -#ifndef JOB_SUBROUTINE_WRAPPERS_H_ -#define JOB_SUBROUTINE_WRAPPERS_H_ +#pragma once extern "C" { void initGlobals(char const*str1, int* totalGRUs, int* totalHRUs, @@ -7,6 +6,4 @@ extern "C" { void cleanUpJobActor(int* err); -} - -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/build/includes/summa_actor/batch_manager.hpp b/build/includes/summa_actor/batch_manager.hpp new file mode 100644 index 0000000000000000000000000000000000000000..062cd06b0681653aa722b003cc0c82f30298c20c --- /dev/null +++ b/build/includes/summa_actor/batch_manager.hpp @@ -0,0 +1,57 @@ +#pragma once +#include "caf/all.hpp" +#include <vector> +#include <string> + + +enum batch_status { + unassigned, + assigned, + solved, + failed +}; + +class Batch { + private: + int batch_id; + int start_hru; + int num_hru; + double run_time; + double read_time; + double write_time; + std::string assigned_host; + caf::actor assigned_actor; + batch_status status; + + + public: + Batch(int batch_id, int start_hru, int num_hru); + + void printBatchInfo(); + + batch_status getBatchStatus(); + + int getBatchID(); + + int getStartHRU(); + + int getNumHRU(); + + void solvedBatch(double run_time, double read_time, double write_time); + + void assignedBatch(std::string hostname, caf::actor actor_ref); + + void updateRunTime(double run_time); + + void writeBatchToFile(std::string file_name); +}; + + +class Batch_Manager { + private: + std::vector<Batch> batch_list; + std::vector<Batch> solved_batches; + std::vector<Batch> failed_batches; + public: + +}; \ No newline at end of file diff --git a/build/includes/summa_actor/client.hpp b/build/includes/summa_actor/client.hpp new file mode 100644 index 0000000000000000000000000000000000000000..29e0a7024862337fb6e0e4632a58a3012b7245f2 --- /dev/null +++ b/build/includes/summa_actor/client.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "caf/all.hpp" +#include "batch_manager.hpp" + + +class Client { + private: + int id; + int batches_solved; + bool connected; + caf::actor client_actor; + std::string hostname; + Batch* current_batch; + + + public: + Client(int id, caf::actor client_actor, std::string hostname); + + caf::actor getActor(); + + int getID(); + + std::string getHostname(); + +}; \ No newline at end of file diff --git a/build/includes/summa_actor/summa_actor.hpp b/build/includes/summa_actor/summa_actor.hpp new file mode 100644 index 0000000000000000000000000000000000000000..c87c6a52e41ad70717c6efb0676c19f8472e6f57 --- /dev/null +++ b/build/includes/summa_actor/summa_actor.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include "caf/all.hpp" +#include "caf/io/all.hpp" +#include "timing_info.hpp" + +#include <chrono> +#include <string> +#include <vector> + +namespace caf { + + +struct job_timing_info { + std::vector<double> job_duration; + std::vector<double> job_read_duration; + std::vector<double> job_write_duration; +}; + +struct summa_actor_state { + // Timing Information For Summa-Actor + TimingInfo summa_actor_timing; + struct job_timing_info timing_info_for_jobs; + + // Program Parameters + int startGRU; // starting GRU for the simulation + int numGRU; // number of GRUs to compute + std::string configPath;// path to the fileManager.txt file + // 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; + +}; + +behavior summa_actor(stateful_actor<summa_actor_state>* self, int startGRU, int numGRU, std::string configPath, actor parent); + +void spawnJob(stateful_actor<summa_actor_state>* self); + + + + +} // namespace caf \ No newline at end of file diff --git a/build/includes/summa_actor/summa_client.hpp b/build/includes/summa_actor/summa_client.hpp new file mode 100644 index 0000000000000000000000000000000000000000..6b8132db829c7b598f410b34a466b90afaa54387 --- /dev/null +++ b/build/includes/summa_actor/summa_client.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include "caf/all.hpp" +#include "caf/io/all.hpp" + +#include <string> +#include <optional> + +namespace caf { + +struct summa_client_state { + strong_actor_ptr current_server; + std::string hostname; + std::optional<std::string> config_path; + actor summa_actor_ref; + int batch_id; + int client_id; // id held by server +}; +behavior summa_client(stateful_actor<summa_client_state>* self, std::optional<std::string> config_path); +behavior unconnected(stateful_actor<summa_client_state>*); +void connecting(stateful_actor<summa_client_state>*, const std::string& host, uint16_t port); +behavior running(stateful_actor<summa_client_state>*, const actor& summa_server); + +} \ No newline at end of file diff --git a/build/includes/summa_actor/summa_server.hpp b/build/includes/summa_actor/summa_server.hpp new file mode 100644 index 0000000000000000000000000000000000000000..2a082b36038d4a972c88bafaefbb3c60f2592cc1 --- /dev/null +++ b/build/includes/summa_actor/summa_server.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "caf/all.hpp" +#include "caf/io/all.hpp" +#include "batch_manager.hpp" +#include "client.hpp" +#include <string> +#include <optional> + + +namespace caf { + +struct summa_server_state { + int total_hru_count; + int num_clients; + int num_hru_per_batch; + int batches_remaining = 0; + int batches_solved = 0; + std::string config_path; + std::vector<Batch> batch_list; + std::vector<Batch> solved_batches; + std::vector<Batch> failed_batches; + std::vector<Client> client_list; + std::string csv_output_name; +}; + +behavior summa_server(stateful_actor<summa_server_state>* self, std::string config_path); +int assembleBatches(stateful_actor<summa_server_state>* self); +std::optional<int> getUnsolvedBatchID(stateful_actor<summa_server_state>* self); +} \ No newline at end of file diff --git a/build/launch_summa_actors_build_process.sh b/build/launch_summa_actors_build_process.sh new file mode 100755 index 0000000000000000000000000000000000000000..6a537f51d4c3ed1a1e926b3bcdc338abf66f07ff --- /dev/null +++ b/build/launch_summa_actors_build_process.sh @@ -0,0 +1,8 @@ +#!/bin/bash +############# +## File in the path that SUMMA-Actors top level directory is located in +############### + +SUMMA_ACTORS=/home/kklenk/Summa-Projects/Summa-Actors # top level directory + +apptainer exec --bind $SUMMA_ACTORS:/Summa-Actors summa_actors.sif /Summa-Actors/build/build_summa_actors_container.sh \ No newline at end of file diff --git a/build/makefile b/build/makefile index 9368cc4df61b49792bade25d648f9a09a39feb13..d42c2ece7046c500fbf43bfb8507aa912240e0bb 100644 --- a/build/makefile +++ b/build/makefile @@ -1,31 +1,30 @@ #### parent directory of the 'build' directory #### -# F_MASTER = +ROOT_DIR = /Summa-Actors -#### fortran compiler #### -# FC = - -#### C++ compiler #### -# CC = +#### Compilers #### +FC = gfortran # Fortran +CC = g++ # C++ #### Includes AND Libraries #### -# INCLUDES = -# LIBRARIES = +INCLUDES = -I/usr/include -I/usr/local/include +LIBRARIES = -L/usr/lib -L/usr/local/lib -lnetcdff -lopenblas -# ACTORS_INCLUDES = -# ACTORS_LIBRARIES = +ACTORS_INCLUDES = -I/usr/include -I/usr/local/include +ACTORS_LIBRARIES = -L/usr/lib -L/usr/local/lib -L/Summa-Actors/bin -lcaf_core -lcaf_io -lsumma -lopenblas -lnetcdff # Production runs -FLAGS_NOAH = -O3 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -FLAGS_COMM = -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -FLAGS_SUMMA = -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -FLAGS_ACTORS = -O3 +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 -# # Debug runs -# FLAGS_NOAH = -pg -g -O0 -ffree-form -ffree-line-length-none -fmax-errors=0 -fbacktrace -Wno-unused -Wno-unused-dummy-argument -fPIC -# FLAGS_COMM = -pg -g -O0 -Wall -ffree-line-length-none -fmax-errors=0 -fbacktrace -fcheck=bounds -fPIC -# FLAGS_SUMMA = -pg -g -O0 -Wall -ffree-line-length-none -fmax-errors=0 -fbacktrace -fcheck=bounds -fPIC -# FLAGS_ACTORS = -pg -g -O0 -Wall #======================================================================== @@ -33,18 +32,17 @@ FLAGS_ACTORS = -O3 #======================================================================== # Core directory that contains source code -F_KORE_DIR = $(F_MASTER)/build/source +F_KORE_DIR = $(ROOT_DIR)/build/source # Location of the compiled modules -MOD_PATH = $(F_MASTER)/build +MOD_PATH = $(ROOT_DIR)/build # Define the directory for the executables -EXE_PATH = $(F_MASTER)/bin - -#======================================================================== -# PART 2: Assemble all of the SUMMA sub-routines -#======================================================================== +EXE_PATH = $(ROOT_DIR)/bin +#################################################################################################### +###################################### Assemble Fortran Files ###################################### +#################################################################################################### # Define directories DRIVER_DIR = $(F_KORE_DIR)/driver HOOKUP_DIR = $(F_KORE_DIR)/hookup @@ -235,25 +233,65 @@ SUMMA_DRIVER= \ DRIVER = $(patsubst %, $(DRIVER_DIR)/%, $(SUMMA_DRIVER)) -ACTORC = $(F_KORE_DIR)/actors/main.cc +#################################################################################################### +###################################### Assemble Fortran Files ###################################### +#################################################################################################### + +#################################################################################################### +######################################## Assemble C++ Files ######################################## +#################################################################################################### + +INCLUDE_DIR = /Summa-Actors/build/includes +SOURCE_DIR = /Summa-Actors/build/source/actors + + +GLOBAL_INCLUDES = -I$(INCLUDE_DIR)/global +GLOBAL = $(SOURCE_DIR)/global/global.cpp +TIMEINFO = $(SOURCE_DIR)/global/timing_info.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 -# Compile -all: lib main +fortran: compile_noah compile_comm compile_summa link clean_fortran -lib: compile_noah compile_comm compile_summa link clean - -main: actors actorsLink actorsClean +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 Noah-MP routines + +################################################################################################################### +############################################## COMPILE SUMMA-Fortran ############################################## +################################################################################################################### compile_noah: $(FC) $(FLAGS_NOAH) -c $(NRUTIL) $(NOAHMP) @@ -268,30 +306,66 @@ compile_summa: # generate library link: $(FC) -shared *.o -o libsumma.so - mv libsumma.so $(F_MASTER)/bin + mv libsumma.so $(ROOT_DIR)/bin -# compile the c++ portion of SummaActors -actors: - $(CC) $(FLAGS_ACTORS) -c $(ACTORC) -std=c++17 $(ACTORS_INCLUDES) +# 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) $(TIMEINFO) $(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) -actorsLink: - $(CC) -o summaMain *.o $(ACTORS_LIBRARIES) - mv summaMain $(F_MASTER)/bin +compile_main: + $(CC) $(FLAGS_ACTORS) -c $(MAIN) $(GLOBAL_INCLUDES) $(SUMMA_ACTOR_INCLUDES) $(JOB_ACTOR_INCLUDES) -#### COMPILE TESTING FILES #### +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) -actorsClean: - rm *.o -# Remove object files -clean: - rm -f *.o *.mod soil_veg_gen_parm__genmod.f90 - - clean_lib: rm *.so diff --git a/build/makefile-container b/build/makefile-container new file mode 100644 index 0000000000000000000000000000000000000000..0f30d90d4168361c46b82ecd461ee7e4d844515c --- /dev/null +++ b/build/makefile-container @@ -0,0 +1,370 @@ +#### parent directory of the 'build' directory #### +ROOT_DIR = /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 = $(ROOT_DIR)/build/includes +SOURCE_DIR = $(ROOT_DIR)/build/source/actors + + +GLOBAL_INCLUDES = -I$(INCLUDE_DIR)/global +GLOBAL = $(SOURCE_DIR)/global/global.cpp +TIMEINFO = $(SOURCE_DIR)/global/timing_info.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) $(INTERFACE) $(INCLUDES) + +# compile SUMMA routines +compile_summa: + $(FC) $(FLAGS_SUMMA) -c $(SUMMA_ALL) $(DRIVER) $(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) $(TIMEINFO) $(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/module_load.sh b/build/module_load.sh new file mode 100755 index 0000000000000000000000000000000000000000..041d0e199a153b24fe8e9ba6836160dcd49ec32e --- /dev/null +++ b/build/module_load.sh @@ -0,0 +1,9 @@ +#!/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 diff --git a/build/run_script.sh b/build/run_script.sh new file mode 100755 index 0000000000000000000000000000000000000000..06e4b8284a4c456803cc40dcd783abd1ee3028d2 --- /dev/null +++ b/build/run_script.sh @@ -0,0 +1,6 @@ +#!/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 diff --git a/build/source/actors/file_access_actor/FileAccess.h b/build/source/actors/file_access_actor/FileAccess.h deleted file mode 100644 index 9dee306931bb8df4584c737d03ff09b256b4d4d4..0000000000000000000000000000000000000000 --- a/build/source/actors/file_access_actor/FileAccess.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef FILEACCESS_H_ -#define FILEACCESS_H_ -#include "caf/all.hpp" - -#include "../global/fortran_dataTypes.h" -#include "../global/messageAtoms.h" -#include "../global/global.h" -#include "../global/json.hpp" -#include "fileAccess_subroutine_wrappers.h" -#include "OutputManager.h" -#include <vector> -#include <chrono> - - - -class forcingFile { - private: - int fileID; // which file are we relative the forcing file list saved in fortran - int numSteps; // the number of steps in this forcing file - bool isLoaded; // is this file actually loaded in to RAM yet. - public: - forcingFile(int fileID) { - this->fileID = fileID; - this->numSteps = 0; - this->isLoaded = false; - } - - int getNumSteps() { - return this->numSteps; - } - - bool isFileLoaded() { - return this->isLoaded; - } - - void updateIsLoaded() { - this->isLoaded = true; - } - - void updateNumSteps(int numSteps) { - this->numSteps = numSteps; - this->isLoaded = true; - } -}; - -struct file_access_state { - // Variables set on Spwan - caf::actor parent; - int startGRU; - int numGRU; - - - void *handle_forcFileInfo = new_handle_file_info(); // Handle for the forcing file information - void *handle_ncid = new_handle_var_i(); // output file ids - OutputManager *output_manager; - int num_vectors_in_output_manager; - int num_steps; - int outputStrucSize; - int stepsInCurrentFile; - int numFiles; - int filesLoaded; - int err = 0; - - std::vector<forcingFile> forcFileList; // list of steps in file - std::vector<bool> outputFileInitHRU; - - std::chrono::time_point<std::chrono::system_clock> readStart; - std::chrono::time_point<std::chrono::system_clock> readEnd; - double readDuration = 0.0; - - std::chrono::time_point<std::chrono::system_clock> writeStart; - std::chrono::time_point<std::chrono::system_clock> writeEnd; - double writeDuration = 0.0; - - -}; - - - - - - - - -#endif \ No newline at end of file diff --git a/build/source/actors/file_access_actor/OutputManager.h b/build/source/actors/file_access_actor/OutputManager.h deleted file mode 100644 index 5faa5f1f7ffd4ec8dbf14d61386105a72d80b5f9..0000000000000000000000000000000000000000 --- a/build/source/actors/file_access_actor/OutputManager.h +++ /dev/null @@ -1,306 +0,0 @@ -#ifndef OutputManager_H_ -#define OutputManager_H_ - -#include "caf/all.hpp" -#include <vector> -#include <algorithm> -/** - * @brief Basic Container class to hold actor references. This has a size component for checking when it is full. - * - */ -class ActorRefList { - private: - int numStepsToWrite; // We can save this value here so that we know how many steps to write - int currentSize; - unsigned int maxSize; - int minIndex = -1; // minimum index of the actor being stored on this list - int maxIndex = 0; // maximum index of the actor being stored on this list - std::vector<std::tuple<caf::actor, int>> list; - - public: - // Constructor - ActorRefList(int maxSize){ - this->currentSize = 0; - this->maxSize = maxSize; - } - - // Deconstructor - ~ActorRefList(){}; - - int getMaxIndex() { - return this->maxIndex; - } - - int getMinIndex() { - return this->minIndex; - } - - int getCurrentSize() { - return this->currentSize; - } - - int getMaxSize() { - return this->maxSize; - } - - int getNumStepsToWrite() { - return this->numStepsToWrite; - } - - bool isFull() { - return list.size() == this->maxSize; - } - - /** - * Adds An Actor and its return message as a tuple to this->list - * actor - the actor ref of the actor being added to this->list - * returnMessage - Either 9999 (place holder and specifies to send a done_write_v message) or - * this is the current forcingFileList index that allows the file_access actor to know the number - * of steps the HRU actor that needs to compute - */ - void addActor(caf::actor actor, int index, int returnMessage, int numStepsToWrite) { - if (this->isFull()) { - throw "List is full, cannot add actor to this list"; - } - if (index > this->maxIndex) { - this->maxIndex = index; - } - if (index < this->minIndex || this->minIndex < 0) { - this->minIndex = index; - } - this->numStepsToWrite = numStepsToWrite; - this->currentSize++; - list.push_back(std::make_tuple(actor, returnMessage)); - } - - /** - * Return a tuple of an actor and its returnMessage. - * The return message is 9999 or the index of the forcingFile it needs to acces - */ - std::tuple<caf::actor,int> popActor() { - if (list.empty()) { - throw "List is empty, nothing to pop"; - } - auto actor = list.back(); - list.pop_back(); - this->currentSize--; - return actor; - } - - - bool isEmpty() { - return list.empty(); - } - - - /** - * When an actor fails we need to decrement the count - * so that this list becomes full when there is a failure - * - * indexHRU - index of the HRU causing the error - */ - void decrementMaxSize() { - this->maxSize--; - } - - /** - * Remove the failed HRU from the list - * - */ - void removeFailed(caf::actor actorRef) { - bool found = false; - for(std::vector<std::tuple<caf::actor, int>>::iterator it = this->list.begin(); it != this->list.end(); it++) { - if (std::get<0>(*it) == actorRef) { - found = true; - this->list.erase(it); - this->currentSize--; this->maxSize--; - break; - } - } - - if (!found) { - throw "Element To Remove Not Found"; - } - } -}; - - -/** - * @brief Class that manages which structure actors are held on - * - */ -class OutputManager { - private: - - int numVectors; - int avgSizeOfActorList; - bool runningFailures; - std::vector<ActorRefList*> list; - std::vector<int> failedHRU; - std::vector<int> failureReRun; // index used so we can add failedHRUs if they fail a second time - - - - public: - // Constructor - OutputManager(int numVectors, int totalNumActors){ - this->numVectors = numVectors; - int sizeOfOneVector = totalNumActors / numVectors; - this->avgSizeOfActorList = sizeOfOneVector; - this->runningFailures = false; - // Create the first n-1 vectors with the same size - for (int i = 0; i < numVectors - 1; i++) { - auto refList = new ActorRefList(sizeOfOneVector); - totalNumActors = totalNumActors - sizeOfOneVector; - list.push_back(refList); - } - // Create the last vector with size however many actors are left - auto refList = new ActorRefList(totalNumActors); - list.push_back(refList); - } - // Deconstructor - ~OutputManager(){}; - - /** - * @brief Adds an actor to its respective list - * - * @param actor Actor reference - * @param index Actor Index - * @param returnMessage Forcing File index or 9999 - * @return int The list index that actor is added to. - */ - int addActor(caf::actor actor, int index, int returnMessage, int numStepsToWrite) { - int listIndex; - if (this->runningFailures) { - // find the index of the structure this HRU is in - auto it = find(this->failureReRun.begin(), this->failureReRun.end(), index); - - if (it != this->failureReRun.end()) { - listIndex = it - this->failureReRun.begin(); - } else { - throw "Element Not Found in failureReRun list"; - } - - this->list[listIndex]->addActor(actor, index, returnMessage, numStepsToWrite); - - } else { - // Index has to be subtracted by 1 because Fortran array starts at 1 - listIndex = (index - 1) / this->avgSizeOfActorList; - if (listIndex > this->numVectors - 1) { - listIndex = this->numVectors - 1; - } - - this->list[listIndex]->addActor(actor, index, returnMessage, numStepsToWrite); - } - - return listIndex; - } - - /** - * Remove tuple from list[index] - * - */ - std::tuple<caf::actor,int> popActor(int index) { - if (index > this->numVectors - 1 || index < 0) { - throw "List Index Out Of Range"; - } else if (this->list[index]->isEmpty()) { - throw "List is Empty, Nothing to pop"; - } - - return this->list[index]->popActor(); - } - - - /** When a failure occurs an actor most likley will not already be on this list - * This method may and probably should not be used. Although needing to remove a - * specific element from a list may be needed. - * Remove the failed actor from the list - * Return the index of the list we removed the actor from - * This is so we can check if it is full - */ - int removeFailed(caf::actor actorRef, int index) { - // Find the list this actor is on - int listIndex = (index - 1) / this->avgSizeOfActorList; - if (listIndex > this->numVectors - 1) { - listIndex = this->numVectors - 1; - } - - this->list[listIndex]->removeFailed(actorRef); - - return listIndex; - } - - /** - * Decrease the size of the list - * Add this GRU to the failed list - */ - int decrementMaxSize(int indexHRU) { - - this->failedHRU.push_back(indexHRU); - - // Find the list this actor is on - int listIndex = (indexHRU - 1) / this->avgSizeOfActorList; - if (listIndex > this->numVectors - 1) { - listIndex = this->numVectors - 1; - } - - this->list[listIndex]->decrementMaxSize(); - return listIndex; - } - - void restartFailures() { - this->list.clear(); - this->numVectors = this->failedHRU.size(); - for (unsigned int i = 0; i < this->failedHRU.size(); i++) { - auto refList = new ActorRefList(1); - this->list.push_back(refList); - } - - this->failureReRun = this->failedHRU; - this->failedHRU.clear(); - - this->runningFailures = true; - - } - - /** - * Get the number of steps to write from the correct listIndex - */ - int getNumStepsToWrite(int listIndex) { - - return this->list[listIndex]->getNumStepsToWrite(); - } - - bool isFull(int listIndex) { - if (listIndex > this->numVectors - 1) { - throw "List Index Out Of Range"; - } - return this->list[listIndex]->isFull(); - } - - bool isEmpty(int listIndex) { - return this->list[listIndex]->isEmpty(); - } - - int getSize(int listIndex) { - if (listIndex > this->numVectors - 1) { - throw "List Index Out Of Range"; - } - return this->list[listIndex]->getCurrentSize(); - } - - int getMinIndex(int listIndex) { - return this->list[listIndex]->getMinIndex(); - } - - int getMaxIndex(int listIndex) { - return this->list[listIndex]->getMaxIndex(); - } - - void addFailed(int indxHRU) { - this->failedHRU.push_back(indxHRU); - } - -}; - -#endif \ No newline at end of file diff --git a/build/source/actors/file_access_actor/cppwrap_fileAccess.f90 b/build/source/actors/file_access_actor/cppwrap_fileAccess.f90 index 8691a802925af74f8d606d9ebd5cd2d7c2b4476b..2687c4f8b84e977136cdf7e2e358c6f66245ce22 100644 --- a/build/source/actors/file_access_actor/cppwrap_fileAccess.f90 +++ b/build/source/actors/file_access_actor/cppwrap_fileAccess.f90 @@ -15,7 +15,7 @@ module cppwrap_fileAccess public::Init_OutputStruct public::initFailedHRUTracker public::FileAccessActor_ReadForcing - public::Create_Output_File + ! public::Create_Output_File public::FileAccessActor_WriteOutput contains @@ -129,6 +129,7 @@ subroutine initFailedHRUTracker(numGRU) bind(C, name="initFailedHRUTracker") implicit none integer(c_int), intent(in) :: numGRU + if (allocated(failedHRUs))then; deallocate(failedHRUs); endif; allocate(failedHRUs(numGRU)) failedHRUs(:) = .false. @@ -203,65 +204,6 @@ subroutine FileAccessActor_ReadForcing(handle_forcFileInfo, currentFile, stepsIn end subroutine FileAccessActor_ReadForcing -subroutine Create_Output_File(& - handle_ncid, & ! ncid of the output file - numGRU, & ! number of GRUs assigned to this job - startGRU, & ! Starting GRU indx for the job - err) bind(C, name="Create_Output_File") - USE globalData,only:fileout - USE summaActors_FileManager,only:OUTPUT_PATH,OUTPUT_PREFIX ! define output file - USE def_output_module,only:def_output ! module to define model output - USE globalData,only:gru_struc - USE var_lookup,only:maxVarFreq ! number of available output frequencies - USE globalData,only:outputTimeStep - USE globalData,only:finalizeStats - USE var_lookup,only:iLookFreq ! named variables for the frequency structure - - - implicit none - type(c_ptr),intent(in), value :: handle_ncid ! ncid of the output file - integer(c_int),intent(in) :: numGRU ! numGRUs for the entire job (for file creation) - integer(c_int),intent(in) :: startGRU ! startGRU for the entire job (for file creation) - integer(c_int),intent(inout) :: err ! Error code - - ! local variables - type(var_i),pointer :: ncid ! ncid of the output file - character(LEN=256) :: startGRUString ! String Variable to convert startGRU - character(LEN=256) :: numGRUString ! String Varaible to convert numGRU - character(LEN=256) :: cmessage - integer(i4b) :: iGRU - - call c_f_pointer(handle_ncid, ncid) - - ! allocate space for the output file ID array - allocate(ncid%var(maxVarFreq)) - ncid%var(:) = integerMissing - - ! initialize finalizeStats for testing purposes - allocate(outputTimeStep(numGRU)) - do iGRU = 1, numGRU - allocate(outputTimeStep(iGRU)%dat(maxVarFreq)) - outputTimeStep(iGRU)%dat(:) = 1 - end do - - finalizeStats(:) = .false. - finalizeStats(iLookFreq%timestep) = .true. - ! initialize number of hru and gru in global data - nGRUrun = numGRU - nHRUrun = numGRU - - write(unit=startGRUString,fmt=*)startGRU - write(unit=numGRUString,fmt=*) numGRU - fileout = trim(OUTPUT_PATH)//trim(OUTPUT_PREFIX)//"GRU"& - //trim(adjustl(startGRUString))//"-"//trim(adjustl(numGRUString)) - - ! def_output call will need to change to allow for numHRUs in future - ! NA_Domain numGRU = numHRU, this is why we pass numGRU twice - call def_output("summaVersion","buildTime","gitBranch","gitHash",numGRU,numGRU,& - gru_struc(1)%hruInfo(1)%nSoil,fileout,ncid,err,cmessage) - print*, "Creating Output File "//trim(fileout) -end subroutine Create_Output_File - subroutine Write_HRU_Param(& handle_ncid, & indxGRU, & @@ -315,7 +257,6 @@ subroutine FileAccessActor_WriteOutput(& maxGRU, & ! index of HRU we are currently writing for err) bind(C, name="FileAccessActor_WriteOutput") USE def_output_module,only:def_output ! module to define model output - USE globalData,only:gru_struc USE var_lookup,only:maxVarFreq ! # of available output frequencies USE writeOutput_module,only:writeBasin,writeTime,writeData USE globalData,only:structInfo @@ -347,22 +288,19 @@ subroutine FileAccessActor_WriteOutput(& integer(i4b) :: iFreq integer(i4b) :: indxHRU=1 integer(i4b), dimension(maxVarFreq) :: outputTimestepUpdate + integer(i4b), dimension(maxVarFreq) :: stepCounter call c_f_pointer(handle_ncid, ncid) ! **************************************************************************** ! *** write data ! **************************************************************************** do iGRU=minGRU, maxGRU + stepCounter(:) = outputTimeStep(iGRU)%dat(:) ! We want to avoid updating outputTimeStep do iStep=1, nSteps - call writeBasin(ncid,iGRU,outputTimeStep(iGRU)%dat(:),iStep,bvar_meta, & + call writeBasin(ncid,iGRU,stepCounter(:),iStep,bvar_meta, & outputStructure(1)%bvarStat(1)%gru(iGRU)%hru(indxHRU)%var, & outputStructure(1)%bvarStruct(1)%gru(iGRU)%hru(indxHRU)%var, bvarChild_map, err, cmessage) - - - ! reset outputTimeStep - ! get the number of HRUs in the run domain - ! nHRUrun = sum(gru_struc%hruCount) - ! write time information + call writeTime(ncid,outputTimeStep(iGRU)%dat(:),iStep,time_meta, & outputStructure(1)%timeStruct(1)%gru(iGRU)%hru(indxHRU)%var,err,cmessage) end do ! istep @@ -371,27 +309,27 @@ subroutine FileAccessActor_WriteOutput(& do iStruct=1,size(structInfo) select case(trim(structInfo(iStruct)%structName)) case('forc') - call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,& + call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,& minGRU, maxGRU, numGRU, & forc_meta,outputStructure(1)%forcStat(1),outputStructure(1)%forcStruct(1),'forc', & forcChild_map,outputStructure(1)%indxStruct(1),err,cmessage) case('prog') - call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,& + call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,& minGRU, maxGRU, numGRU, & prog_meta,outputStructure(1)%progStat(1),outputStructure(1)%progStruct(1),'prog', & progChild_map,outputStructure(1)%indxStruct(1),err,cmessage) case('diag') - call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,& + call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,& minGRU, maxGRU, numGRU, & diag_meta,outputStructure(1)%diagStat(1),outputStructure(1)%diagStruct(1),'diag', & diagChild_map,outputStructure(1)%indxStruct(1),err,cmessage) case('flux') - call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,& + call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,& minGRU, maxGRU, numGRU, & flux_meta,outputStructure(1)%fluxStat(1),outputStructure(1)%fluxStruct(1),'flux', & fluxChild_map,outputStructure(1)%indxStruct(1),err,cmessage) case('indx') - call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,& + call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,& minGRU, maxGRU, numGRU, & indx_meta,outputStructure(1)%indxStat(1),outputStructure(1)%indxStruct(1),'indx', & indxChild_map,outputStructure(1)%indxStruct(1),err,cmessage) @@ -407,9 +345,7 @@ end subroutine subroutine FileAccessActor_DeallocateStructures(handle_forcFileInfo, handle_ncid) bind(C,name="FileAccessActor_DeallocateStructures") USE netcdf_util_module,only:nc_file_close - USE globalData,only:forcingDataStruct USE globalData,only:structInfo ! information on the data structures - USE globalData,only:vecTime USE globalData,only:outputTimeStep USE globalData,only:failedHRUs USE summaActors_deallocateOuptutStruct,only:deallocateOutputStruc @@ -423,8 +359,6 @@ subroutine FileAccessActor_DeallocateStructures(handle_forcFileInfo, handle_ncid character(LEN=256) :: cmessage character(LEN=256) :: message integer(i4b) :: err - integer(i4b) :: iFile - integer(i4b) :: iVar call c_f_pointer(handle_ncid, ncid) call c_f_pointer(handle_forcFileInfo, forcFileInfo) @@ -438,23 +372,10 @@ subroutine FileAccessActor_DeallocateStructures(handle_forcFileInfo, handle_ncid endif end do - ! Deallocate Forcing Structure - ! do iFile = 1, size(forcingDataStruct(:)) - ! do iVar = 1, size(forcingDataStruct(iFile)%var(:)) - ! if (allocated(forcingDataStruct(iFile)%var(iVar)%dataFromFile))then - ! deallocate(forcingDataStruct(iFile)%var(iVar)%dataFromFile) - ! endif - ! end do - ! deallocate(forcingDataStruct(iFile)%var_ix) - ! end do - ! deallocate(forcingDataStruct) - deallocate(forcFileInfo) - ! deallocate(outputStructure) deallocate(outputTimeStep) deallocate(ncid) deallocate(failedHRUs) - ! if(allocated(vecTime)) then; deallocate(vecTime); endif end subroutine FileAccessActor_DeallocateStructures diff --git a/build/source/actors/file_access_actor/FileAccessActor.h b/build/source/actors/file_access_actor/file_access_actor.cpp similarity index 66% rename from build/source/actors/file_access_actor/FileAccessActor.h rename to build/source/actors/file_access_actor/file_access_actor.cpp index 61c4da36f79906cc810fba78f1f865ec09ae1ccc..dad7a6326c2ebed738ef89fb9ff47d6d3bbaf880 100644 --- a/build/source/actors/file_access_actor/FileAccessActor.h +++ b/build/source/actors/file_access_actor/file_access_actor.cpp @@ -1,42 +1,47 @@ -#ifndef FILEACCESSACTOR_H_ -#define FILEACCESSACTOR_H_ +#include "caf/all.hpp" +#include "file_access_actor.hpp" +#include "output_manager.hpp" +#include "forcing_file_info.hpp" +#include "file_access_actor_subroutine_wrappers.hpp" +#include "fortran_data_types.hpp" +#include "message_atoms.hpp" +#include "global.hpp" +#include "json.hpp" -#include "FileAccess.h" - -using namespace caf; using json = nlohmann::json; - -void initalizeFileAccessActor(stateful_actor<file_access_state>* self); -int writeOutput(stateful_actor<file_access_state>* self, int indxGRU, int indxHRU, int numStepsToWrite, int returnMessage, caf::actor actorRef); -int readForcing(stateful_actor<file_access_state>* self, int currentFile); -int write(stateful_actor<file_access_state>* self, int listIndex); -int parseSettings(stateful_actor<file_access_state>* self, std::string configPath); +bool debug; +namespace caf { behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU, int numGRU, int outputStrucSize, std::string configPath, actor parent) { - // Set File_Access_Actor variables + aout(self) << "\n----------File_Access_Actor Started----------\n"; + // Set Up timing Info we wish to track + self->state.file_access_timing = TimingInfo(); + self->state.file_access_timing.addTimePoint("read_duration"); + self->state.file_access_timing.addTimePoint("write_duration"); + + self->state.parent = parent; self->state.numGRU = numGRU; self->state.startGRU = startGRU; self->state.outputStrucSize = outputStrucSize; + self->state.handle_forcing_file_info = new_handle_file_info(); + self->state.handle_ncid = new_handle_var_i(); + self->state.err = 0; // Get Settings from configuration file - if (parseSettings(self, configPath) == -1) { - aout(self) << "Error with JSON Settings File!!!\n"; - self->quit(); - } else { - aout(self) << "\nSETTINGS FOR FILE_ACCESS_ACTOR\n" << - "Number of Vectors in Output Structure = " << self->state.num_vectors_in_output_manager << "\n"; - } + self->state.num_vectors_in_output_manager = getSettings(configPath, "FileAccessActor", "num_vectors_in_output_manager", + self->state.num_vectors_in_output_manager).value_or(1); + initalizeFileAccessActor(self); return { [=](initalize_outputStructure) { aout(self) << "Initalizing Output Structure" << std::endl; - Init_OutputStruct(self->state.handle_forcFileInfo, &self->state.outputStrucSize, + Init_OutputStruct(self->state.handle_forcing_file_info, &self->state.outputStrucSize, &self->state.numGRU, &self->state.err); }, @@ -52,33 +57,32 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU [=](access_forcing, int currentFile, caf::actor refToRespondTo) { // aout(self) << "Received Current FIle = " << currentFile << std::endl; if (currentFile <= self->state.numFiles) { - if(self->state.forcFileList[currentFile - 1].isFileLoaded()) { // C++ starts at 0 Fortran starts at 1 + if(self->state.forcing_file_list[currentFile - 1].isFileLoaded()) { // C++ starts at 0 Fortran starts at 1 // aout(self) << "ForcingFile Already Loaded \n"; self->send(refToRespondTo, run_hru_v, - self->state.forcFileList[currentFile - 1].getNumSteps()); + self->state.forcing_file_list[currentFile - 1].getNumSteps()); } else { - self->state.readStart = std::chrono::high_resolution_clock::now(); + self->state.file_access_timing.updateStartPoint("read_duration"); // Load the file - FileAccessActor_ReadForcing(self->state.handle_forcFileInfo, ¤tFile, + FileAccessActor_ReadForcing(self->state.handle_forcing_file_info, ¤tFile, &self->state.stepsInCurrentFile, &self->state.startGRU, &self->state.numGRU, &self->state.err); if (self->state.err != 0) { aout(self) << "ERROR: Reading Forcing" << std::endl; } self->state.filesLoaded += 1; - self->state.forcFileList[currentFile - 1].updateNumSteps(self->state.stepsInCurrentFile); + self->state.forcing_file_list[currentFile - 1].updateNumSteps(self->state.stepsInCurrentFile); - self->state.readEnd = std::chrono::high_resolution_clock::now(); - self->state.readDuration += calculateTime(self->state.readStart, self->state.readEnd); + self->state.file_access_timing.updateEndPoint("read_duration"); // Check if we have loaded all forcing files if(self->state.filesLoaded <= self->state.numFiles) { self->send(self, access_forcing_internal_v, currentFile + 1); } self->send(refToRespondTo, run_hru_v, - self->state.forcFileList[currentFile - 1].getNumSteps()); + self->state.forcing_file_list[currentFile - 1].getNumSteps()); } } else { aout(self) << currentFile << " is larger than expected" << std::endl; @@ -90,29 +94,28 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU if (self->state.filesLoaded <= self->state.numFiles && currentFile <= self->state.numFiles) { // aout(self) << "Loading in background, File:" << currentFile << "\n"; - if (self->state.forcFileList[currentFile - 1].isFileLoaded()) { + if (self->state.forcing_file_list[currentFile - 1].isFileLoaded()) { aout(self) << "File Loaded when shouldn't be \n"; } - self->state.readStart = std::chrono::high_resolution_clock::now(); - FileAccessActor_ReadForcing(self->state.handle_forcFileInfo, ¤tFile, + self->state.file_access_timing.updateStartPoint("read_duration"); + + FileAccessActor_ReadForcing(self->state.handle_forcing_file_info, ¤tFile, &self->state.stepsInCurrentFile, &self->state.startGRU, &self->state.numGRU, &self->state.err); if (self->state.err != 0) { aout(self) << "ERROR: Reading Forcing" << std::endl; } self->state.filesLoaded += 1; - self->state.forcFileList[currentFile - 1].updateNumSteps(self->state.stepsInCurrentFile); - - self->state.readEnd = std::chrono::high_resolution_clock::now(); - self->state.readDuration += calculateTime(self->state.readStart, self->state.readEnd); + self->state.forcing_file_list[currentFile - 1].updateNumSteps(self->state.stepsInCurrentFile); + self->state.file_access_timing.updateEndPoint("read_duration"); + self->send(self, access_forcing_internal_v, currentFile + 1); } else { aout(self) << "All Forcing Files Loaded \n"; } }, - [=](write_output, int indxGRU, int indxHRU, int numStepsToWrite, caf::actor refToRespondTo) { int err; @@ -122,8 +125,6 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU if (err != 0) { aout(self) << "FILE_ACCESS_ACTOR - ERROR Writing Output \n"; } - - }, [=](read_and_write, int indxGRU, int indxHRU, int numStepsToWrite, int currentFile, @@ -164,16 +165,15 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU [=](deallocate_structures) { aout(self) << "Deallocating Structure" << std::endl; - FileAccessActor_DeallocateStructures(self->state.handle_forcFileInfo, self->state.handle_ncid); + FileAccessActor_DeallocateStructures(self->state.handle_forcing_file_info, self->state.handle_ncid); + aout(self) << "\n________________FILE_ACCESS_ACTOR TIMING INFO RESULTS________________\n"; + aout(self) << "Total Read Duration = " << self->state.file_access_timing.getDuration("read_duration").value_or(-1.0) << " Seconds\n"; + aout(self) << "Total Write Duration = " << self->state.file_access_timing.getDuration("write_duration").value_or(-1.0) << " Seconds\n"; - self->state.readDuration = self->state.readDuration / 1000; // Convert to milliseconds - self->state.readDuration = self->state.readDuration / 1000; // Convert to seconds - - self->state.writeDuration = self->state.writeDuration / 1000; // Convert to milliseconds - self->state.writeDuration = self->state.writeDuration / 1000; // Convert to milliseconds - - self->send(self->state.parent, file_access_actor_done_v, self->state.readDuration, - self->state.writeDuration); + self->send(self->state.parent, + file_access_actor_done_v, + self->state.file_access_timing.getDuration("read_duration").value_or(-1.0), + self->state.file_access_timing.getDuration("write_duration").value_or(-1.0)); self->quit(); }, @@ -187,8 +187,8 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU void initalizeFileAccessActor(stateful_actor<file_access_state>* self) { int indx = 1; int err = 0; - // aout(self) << "Set Up the forcing file" << std::endl; - ffile_info_C(&indx, self->state.handle_forcFileInfo, &self->state.numFiles, &err); + + ffile_info_C(&indx, self->state.handle_forcing_file_info, &self->state.numFiles, &err); if (err != 0) { aout(self) << "Error: ffile_info_C - File_Access_Actor \n"; std::string function = "ffile_info_C"; @@ -226,10 +226,10 @@ void initalizeFileAccessActor(stateful_actor<file_access_state>* self) { initFailedHRUTracker(&self->state.numGRU); - Create_Output_File(self->state.handle_ncid, &self->state.numGRU, &self->state.startGRU, &err); + def_output(self->state.handle_ncid, &self->state.startGRU, &self->state.numGRU, &self->state.numGRU, &err); if (err != 0) { aout(self) << "ERROR: Create_OutputFile\n"; - std::string function = "Create_Output_File"; + std::string function = "def_output"; self->send(self->state.parent, file_access_actor_err_v, function); self->quit(); return; @@ -237,7 +237,7 @@ void initalizeFileAccessActor(stateful_actor<file_access_state>* self) { // Initalize the output Structure aout(self) << "Initalizing Output Structure" << std::endl; - Init_OutputStruct(self->state.handle_forcFileInfo, &self->state.outputStrucSize, + Init_OutputStruct(self->state.handle_forcing_file_info, &self->state.outputStrucSize, &self->state.numGRU, &self->state.err); // Initalize the output manager @@ -247,7 +247,7 @@ void initalizeFileAccessActor(stateful_actor<file_access_state>* self) { // initalize the forcingFile array self->state.filesLoaded = 0; for (int i = 1; i <= self->state.numFiles; i++) { - self->state.forcFileList.push_back(forcingFile(i)); + self->state.forcing_file_list.push_back(Forcing_File_Info(i)); } } @@ -269,7 +269,7 @@ int write(stateful_actor<file_access_state>* self, int listIndex) { } else { self->send(get<0>(actor), run_hru_v, - self->state.forcFileList[get<1>(actor) - 1].getNumSteps()); + self->state.forcing_file_list[get<1>(actor) - 1].getNumSteps()); } } @@ -278,7 +278,8 @@ int write(stateful_actor<file_access_state>* self, int listIndex) { int writeOutput(stateful_actor<file_access_state>* self, int indxGRU, int indxHRU, int numStepsToWrite, int returnMessage, caf::actor actorRef) { - self->state.writeStart = std::chrono::high_resolution_clock::now(); + self->state.file_access_timing.updateStartPoint("write_duration"); + if (debug) { aout(self) << "Recieved Write Request From GRU: " << indxGRU << "\n"; } @@ -299,29 +300,25 @@ int writeOutput(stateful_actor<file_access_state>* self, int indxGRU, int indxHR aout(self) << "Size of list is " << self->state.output_manager->getSize(listIndex) << "\n"; } } - - self->state.writeEnd = std::chrono::high_resolution_clock::now(); - self->state.writeDuration += calculateTime(self->state.writeStart, self->state.writeEnd); - + self->state.file_access_timing.updateEndPoint("write_duration"); return err; } int readForcing(stateful_actor<file_access_state>* self, int currentFile) { // Check if we have already loaded this file - if(self->state.forcFileList[currentFile -1].isFileLoaded()) { + if(self->state.forcing_file_list[currentFile -1].isFileLoaded()) { if (debug) aout(self) << "ForcingFile Already Loaded \n"; return 0; - } else { - - // File Needs to be loaded - self->state.readStart = std::chrono::high_resolution_clock::now(); - + } else { // File Needs to be loaded + + self->state.file_access_timing.updateStartPoint("read_duration"); + // Load the file - FileAccessActor_ReadForcing(self->state.handle_forcFileInfo, ¤tFile, + FileAccessActor_ReadForcing(self->state.handle_forcing_file_info, ¤tFile, &self->state.stepsInCurrentFile, &self->state.startGRU, &self->state.numGRU, &self->state.err); @@ -333,40 +330,12 @@ int readForcing(stateful_actor<file_access_state>* self, int currentFile) { return -1; } else { self->state.filesLoaded += 1; - self->state.forcFileList[currentFile - 1].updateNumSteps(self->state.stepsInCurrentFile); - - self->state.readEnd = std::chrono::high_resolution_clock::now(); - self->state.readDuration += calculateTime(self->state.readStart, self->state.readEnd); + self->state.forcing_file_list[currentFile - 1].updateNumSteps(self->state.stepsInCurrentFile); + self->state.file_access_timing.updateEndPoint("read_duration"); return 0; } } } -int parseSettings(stateful_actor<file_access_state>* self, std::string configPath) { - json settings; - std::string SummaActorsSettigs = "/Summa_Actors_Settings.json"; - std::ifstream settings_file(configPath + SummaActorsSettigs); - settings_file >> settings; - settings_file.close(); - - if (settings.find("FileAccessActor") != settings.end()) { - json FileAccessActorConfig = settings["FileAccessActor"]; - // Find the File Manager Path - if (FileAccessActorConfig.find("num_vectors_in_output_manager") != FileAccessActorConfig.end()) { - self->state.num_vectors_in_output_manager = FileAccessActorConfig["num_vectors_in_output_manager"]; - } else { - aout(self) << "Error Finding FileManagerPath - Exiting as this is needed\n"; - return -1; - } - - return 0; - } else { - aout(self) << "Error Finding JobActor in JSON file - Exiting as there is no path for the fileManger\n"; - return -1; - } -} - - - -#endif \ No newline at end of file +} // end namespace \ No newline at end of file diff --git a/build/source/actors/file_access_actor/forcing_file_info.cpp b/build/source/actors/file_access_actor/forcing_file_info.cpp new file mode 100644 index 0000000000000000000000000000000000000000..13f1ec0934d301e6aa4fe6e9e5b391b88e6c29b6 --- /dev/null +++ b/build/source/actors/file_access_actor/forcing_file_info.cpp @@ -0,0 +1,27 @@ +#include "forcing_file_info.hpp" + +Forcing_File_Info::Forcing_File_Info(int file_ID) { + this->file_ID = file_ID; + this->num_steps = 0; + this->is_loaded = false; +} + +int Forcing_File_Info::getNumSteps() { + return this->num_steps; +} + +bool Forcing_File_Info::isFileLoaded() { + return this->is_loaded; +} + +void Forcing_File_Info::updateIsLoaded() { + this->is_loaded = true; +} + + +void Forcing_File_Info::updateNumSteps(int num_steps) { + this->num_steps = num_steps; + this->is_loaded = true; +} + + diff --git a/build/source/actors/file_access_actor/output_manager.cpp b/build/source/actors/file_access_actor/output_manager.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f8637ef598b9fffd8811230151f39c70bb26ec7b --- /dev/null +++ b/build/source/actors/file_access_actor/output_manager.cpp @@ -0,0 +1,215 @@ +#include "output_manager.hpp" +#include "caf/all.hpp" + +// ActorRefList +ActorRefList::ActorRefList(int maxSize){ + this->currentSize = 0; + this->maxSize = maxSize; +} + +ActorRefList::~ActorRefList(){} + +int ActorRefList::getMaxIndex() { + return this->maxIndex; +} + +int ActorRefList::getMinIndex() { + return this->minIndex; +} + +int ActorRefList::getCurrentSize() { + return this->currentSize; +} + +int ActorRefList::getMaxSize() { + return this->maxSize; +} + +int ActorRefList::getNumStepsToWrite() { + return this->numStepsToWrite; +} + +bool ActorRefList::isFull() { + return list.size() == this->maxSize; +} + +void ActorRefList::addActor(caf::actor actor, int index, int returnMessage, int numStepsToWrite) { + if (this->isFull()) { + throw "List is full, cannot add actor to this list"; + } + if (index > this->maxIndex) { + this->maxIndex = index; + } + if (index < this->minIndex || this->minIndex < 0) { + this->minIndex = index; + } + this->numStepsToWrite = numStepsToWrite; + this->currentSize++; + list.push_back(std::make_tuple(actor, returnMessage)); +} + +std::tuple<caf::actor,int> ActorRefList::popActor() { + if (list.empty()) { + throw "List is empty, nothing to pop"; + } + auto actor = list.back(); + list.pop_back(); + this->currentSize--; + return actor; +} + +bool ActorRefList::isEmpty() { + return list.empty(); +} + +void ActorRefList::decrementMaxSize() { + this->maxSize--; +} + +void ActorRefList::removeFailed(caf::actor actorRef) { + bool found = false; + for(std::vector<std::tuple<caf::actor, int>>::iterator it = this->list.begin(); it != this->list.end(); it++) { + if (std::get<0>(*it) == actorRef) { + found = true; + this->list.erase(it); + this->currentSize--; this->maxSize--; + break; + } + } + + if (!found) { + throw "Element To Remove Not Found"; + } +} + +// OutputManager +OutputManager::OutputManager(int numVectors, int totalNumActors){ + this->numVectors = numVectors; + int sizeOfOneVector = totalNumActors / numVectors; + this->avgSizeOfActorList = sizeOfOneVector; + this->runningFailures = false; + // Create the first n-1 vectors with the same size + for (int i = 0; i < numVectors - 1; i++) { + auto refList = new ActorRefList(sizeOfOneVector); + totalNumActors = totalNumActors - sizeOfOneVector; + list.push_back(refList); + } + // Create the last vector with size however many actors are left + auto refList = new ActorRefList(totalNumActors); + list.push_back(refList); +} + +OutputManager::~OutputManager(){}; + +int OutputManager::addActor(caf::actor actor, int index, int returnMessage, int numStepsToWrite) { + int listIndex; + if (this->runningFailures) { + // find the index of the structure this HRU is in + auto it = find(this->failureReRun.begin(), this->failureReRun.end(), index); + + if (it != this->failureReRun.end()) { + listIndex = it - this->failureReRun.begin(); + } else { + throw "Element Not Found in failureReRun list"; + } + + this->list[listIndex]->addActor(actor, index, returnMessage, numStepsToWrite); + + } else { + // Index has to be subtracted by 1 because Fortran array starts at 1 + listIndex = (index - 1) / this->avgSizeOfActorList; + if (listIndex > this->numVectors - 1) { + listIndex = this->numVectors - 1; + } + + this->list[listIndex]->addActor(actor, index, returnMessage, numStepsToWrite); + } + + return listIndex; +} + +std::tuple<caf::actor,int> OutputManager::popActor(int index) { + if (index > this->numVectors - 1 || index < 0) { + throw "List Index Out Of Range"; + } else if (this->list[index]->isEmpty()) { + throw "List is Empty, Nothing to pop"; + } + + return this->list[index]->popActor(); +} + +int OutputManager::removeFailed(caf::actor actorRef, int index) { + // Find the list this actor is on + int listIndex = (index - 1) / this->avgSizeOfActorList; + if (listIndex > this->numVectors - 1) { + listIndex = this->numVectors - 1; + } + + this->list[listIndex]->removeFailed(actorRef); + + return listIndex; +} + +int OutputManager::decrementMaxSize(int indexHRU) { + + this->failedHRU.push_back(indexHRU); + + // Find the list this actor is on + int listIndex = (indexHRU - 1) / this->avgSizeOfActorList; + if (listIndex > this->numVectors - 1) { + listIndex = this->numVectors - 1; + } + + this->list[listIndex]->decrementMaxSize(); + return listIndex; +} + +void OutputManager::restartFailures() { + this->list.clear(); + this->numVectors = this->failedHRU.size(); + for (unsigned int i = 0; i < this->failedHRU.size(); i++) { + auto refList = new ActorRefList(1); + this->list.push_back(refList); + } + + this->failureReRun = this->failedHRU; + this->failedHRU.clear(); + + this->runningFailures = true; + +} + +int OutputManager::getNumStepsToWrite(int listIndex) { + + return this->list[listIndex]->getNumStepsToWrite(); +} + +bool OutputManager::isFull(int listIndex) { + if (listIndex > this->numVectors - 1) { + throw "List Index Out Of Range"; + } + return this->list[listIndex]->isFull(); +} + +bool OutputManager::isEmpty(int listIndex) { + return this->list[listIndex]->isEmpty(); +} + +int OutputManager::getSize(int listIndex) { + if (listIndex > this->numVectors - 1) { + throw "List Index Out Of Range"; + } + return this->list[listIndex]->getCurrentSize(); +} + +int OutputManager::getMinIndex(int listIndex) { + return this->list[listIndex]->getMinIndex(); +} + +int OutputManager::getMaxIndex(int listIndex) { + return this->list[listIndex]->getMaxIndex(); +} + +void OutputManager::addFailed(int indxHRU) { + this->failedHRU.push_back(indxHRU); +} \ No newline at end of file diff --git a/build/source/actors/global/global.cpp b/build/source/actors/global/global.cpp new file mode 100644 index 0000000000000000000000000000000000000000..dff7bf4d1fb978d6d7b4e9eb15c59f3f2accdbc4 --- /dev/null +++ b/build/source/actors/global/global.cpp @@ -0,0 +1,9 @@ +#include "global.hpp" +#include <chrono> + + +double calculateTime(std::chrono::time_point<std::chrono::system_clock> start, + std::chrono::time_point<std::chrono::system_clock> end) { + + return std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); +} diff --git a/build/source/actors/global/global.h b/build/source/actors/global/global.h deleted file mode 100644 index b3104cba17ee6579950ee4c93168c7642cc86edd..0000000000000000000000000000000000000000 --- a/build/source/actors/global/global.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef COMMONFUNCTIONS_H_ -#define COMMONFUNCTIONS_H_ - -#include <chrono> - - -// Gobal Flag for Debuging only main function will change this -bool debug; - -/** - * Return the time between to time points - */ -double calculateTime(std::chrono::time_point<std::chrono::system_clock> start, - std::chrono::time_point<std::chrono::system_clock> end); - - - -double calculateTime(std::chrono::time_point<std::chrono::system_clock> start, - std::chrono::time_point<std::chrono::system_clock> end) { - - return std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); -} - - - - -#endif \ No newline at end of file diff --git a/build/source/actors/global/timing_info.cpp b/build/source/actors/global/timing_info.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5c83987b1583bc7ce6407afda6eddf1ee4b875f4 --- /dev/null +++ b/build/source/actors/global/timing_info.cpp @@ -0,0 +1,70 @@ +#include "timing_info.hpp" +#include <chrono> +#include <algorithm> + +TimingInfo::TimingInfo() { + this->num_time_points = 0; +} + +TimingInfo::~TimingInfo(){} + +std::optional<double> TimingInfo::calculateDuration(int index) { + if (!this->start[index].has_value() || !this->end[index].has_value()) { + return {}; + } else { + auto start = this->start[index].value(); + auto end = this->end[index].value(); + return std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); + + } +} + +std::optional<int> TimingInfo::getIndex(std::string time_point_name) { + + auto itr = std::find(this->name_of_time_point.begin(), + this->name_of_time_point.end(), + time_point_name); + if (itr != this->name_of_time_point.end()) { + return std::distance(this->name_of_time_point.begin(), itr); + } else { + return {}; + } +} + +void TimingInfo::addTimePoint(std::string time_point_name) { + this->name_of_time_point.push_back(time_point_name); + this->start.push_back({}); + this->end.push_back({}); + this->duration.push_back(0.0); + this->num_time_points++; +} + +void TimingInfo::updateStartPoint(std::string time_point_name) { + std::optional<int> index = getIndex(time_point_name); + + if (index.has_value()) { + this->start[index.value()] = std::chrono::high_resolution_clock::now(); + } +} + +void TimingInfo::updateEndPoint(std::string time_point_name) { + std::optional<int> index = getIndex(time_point_name); + if (index.has_value()) { + this->end[index.value()] = std::chrono::high_resolution_clock::now(); + std::optional<double> duration = calculateDuration(index.value()); + if (duration.has_value()) + this->duration[index.value()] += duration.value(); + } +} + +std::optional<double> TimingInfo::getDuration(std::string time_point_name) { + std::optional<int> index = getIndex(time_point_name); + if (index.has_value()) { + double duration = this->duration[index.value()]; + duration = duration / 1000; // convert to miliseconds + duration = duration / 1000; // convert to seconds + return duration; + } else { + return {}; + } +} \ No newline at end of file diff --git a/build/source/actors/hru_actor/cppwrap_hru.f90 b/build/source/actors/hru_actor/cppwrap_hru.f90 index 87587d061b4773e5f6d12eea0a4cedcc33ae1b22..11b27e42a0427b2f57d6d7aa5cccdd225395d9d2 100644 --- a/build/source/actors/hru_actor/cppwrap_hru.f90 +++ b/build/source/actors/hru_actor/cppwrap_hru.f90 @@ -6,7 +6,8 @@ USE data_types USE globalData implicit none -public::Initialize +! public::Initialize ! This is called Directly by the actors code +! The above is here just in case I look here again public::SetupParam public::Restart public::Forcing @@ -16,182 +17,6 @@ public::Write_Param_C contains -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! *************** Initalize Structures For HRU ************************ -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -subroutine Initialize(& - indxGRU, & - num_steps, & - ! statistics structures - handle_forcStat, & ! model forcing data - handle_progStat, & ! model prognostic (state) variables - handle_diagStat, & ! model diagnostic variables - handle_fluxStat, & ! model fluxes - handle_indxStat, & ! model indices - handle_bvarStat, & ! basin-average variables - ! primary data structures (scalars) - handle_timeStruct, & ! model time data - handle_forcStruct, & ! model forcing data - handle_attrStruct, & ! local attributes for each HRU - handle_typeStruct, & ! local classification of soil veg etc. for each HRU - handle_idStruct, & ! - ! primary data structures (variable length vectors) - handle_indxStruct, & ! model indices - handle_mparStruct, & ! model parameters - handle_progStruct, & ! model prognostic (state) variables - handle_diagStruct, & ! model diagnostic variables - handle_fluxStruct, & ! model fluxes - ! basin-average structures - handle_bparStruct, & ! basin-average parameters - handle_bvarStruct, & ! basin-average variables - ! ancillary data structures - handle_dparStruct, & ! default model parameters - ! local HRU data - handle_startTime, & ! start time for the model simulation - handle_finshTime, & ! end time for the model simulation - handle_refTime, & ! reference time for the model simulation - handle_oldTime, & ! time for the previous model time step - ! miscellaneous variables - err) bind(C,name='Initialize') - - use summa4chm_init,only:summa4chm_initialize - - implicit none - ! calling variables - integer(c_int),intent(in) :: indxGRU - integer(c_int),intent(out) :: num_steps - ! statistics structures - type(c_ptr), intent(in), value :: handle_forcStat ! model forcing data - type(c_ptr), intent(in), value :: handle_progStat ! model prognostic (state) variables - type(c_ptr), intent(in), value :: handle_diagStat ! model diagnostic variables - type(c_ptr), intent(in), value :: handle_fluxStat ! model fluxes - type(c_ptr), intent(in), value :: handle_indxStat ! model indices - type(c_ptr), intent(in), value :: handle_bvarStat ! basin-average variables - ! primary data structures (scalars) - type(c_ptr), intent(in), value :: handle_timeStruct ! model time data - type(c_ptr), intent(in), value :: handle_forcStruct ! model forcing data - type(c_ptr), intent(in), value :: handle_attrStruct ! local attributes for each HRU - type(c_ptr), intent(in), value :: handle_typeStruct ! local classification of soil veg etc. for each HRU - type(c_ptr), intent(in), value :: handle_idStruct ! - ! primary data structures (variable length vectors) - type(c_ptr), intent(in), value :: handle_indxStruct ! model indices - type(c_ptr), intent(in), value :: handle_mparStruct ! model parameters - type(c_ptr), intent(in), value :: handle_progStruct ! model prognostic (state) variables - type(c_ptr), intent(in), value :: handle_diagStruct ! model diagnostic variables - type(c_ptr), intent(in), value :: handle_fluxStruct ! model fluxes - ! basin-average structures - type(c_ptr), intent(in), value :: handle_bparStruct ! basin-average parameters - type(c_ptr), intent(in), value :: handle_bvarStruct ! basin-average variables - ! ancillary data structures - type(c_ptr), intent(in), value :: handle_dparStruct ! default model parameters - ! local hru data structures - type(c_ptr), intent(in), value :: handle_startTime ! start time for the model simulation - type(c_ptr), intent(in), value :: handle_finshTime ! end time for the model simulation - type(c_ptr), intent(in), value :: handle_refTime ! reference time for the model simulation - type(c_ptr), intent(in), value :: handle_oldTime ! time for the previous model time step - integer(c_int),intent(inout) :: err - !--------------------------------------------------------------------------------------------------- - ! local variables - - ! statistics structures - type(var_dlength),pointer :: forcStat ! model forcing data - type(var_dlength),pointer :: progStat ! model prognostic (state) variables - type(var_dlength),pointer :: diagStat ! model diagnostic variables - type(var_dlength),pointer :: fluxStat ! model fluxes - type(var_dlength),pointer :: indxStat ! model indices - type(var_dlength),pointer :: bvarStat ! basin-average variabl - ! primary data structures (scalars) - type(var_i),pointer :: timeStruct ! model time data - type(var_d),pointer :: forcStruct ! model forcing data - type(var_d),pointer :: attrStruct ! local attributes for each HRU - type(var_i),pointer :: typeStruct ! local classification of soil veg etc. for each HRU - type(var_i8),pointer :: idStruct ! - ! primary data structures (variable length vectors) - type(var_ilength),pointer :: indxStruct ! model indices - type(var_dlength),pointer :: mparStruct ! model parameters - type(var_dlength),pointer :: progStruct ! model prognostic (state) variables - type(var_dlength),pointer :: diagStruct ! model diagnostic variables - type(var_dlength),pointer :: fluxStruct ! model fluxes - ! basin-average structures - type(var_d),pointer :: bparStruct ! basin-average parameters - type(var_dlength),pointer :: bvarStruct ! basin-average variables - ! ancillary data structures - type(var_d),pointer :: dparStruct ! default model parameters - ! local HRU data structures - type(var_i),pointer :: startTime ! start time for the model simulation - type(var_i),pointer :: finshTime ! end time for the model simulation - type(var_i),pointer :: refTime ! reference time for the model simulation - type(var_i),pointer :: oldTime ! time for the previous model time step - character(len=256) :: message - - - ! getting data - call c_f_pointer(handle_forcStat, forcStat) - call c_f_pointer(handle_progStat, progStat) - call c_f_pointer(handle_diagStat, diagStat) - call c_f_pointer(handle_fluxStat, fluxStat) - call c_f_pointer(handle_indxStat, indxStat) - call c_f_pointer(handle_bvarStat, bvarStat) - call c_f_pointer(handle_timeStruct, timeStruct) - call c_f_pointer(handle_forcStruct, forcStruct) - call c_f_pointer(handle_attrStruct, attrStruct) - call c_f_pointer(handle_typeStruct, typeStruct) - call c_f_pointer(handle_idStruct, idStruct) - call c_f_pointer(handle_indxStruct, indxStruct) - call c_f_pointer(handle_mparStruct, mparStruct) - call c_f_pointer(handle_progStruct, progStruct) - call c_f_pointer(handle_diagStruct, diagStruct) - call c_f_pointer(handle_fluxStruct, fluxStruct) - call c_f_pointer(handle_bparStruct, bparStruct) - call c_f_pointer(handle_bvarStruct, bvarStruct) - call c_f_pointer(handle_dparStruct, dparStruct) - call c_f_pointer(handle_startTime, startTime) - call c_f_pointer(handle_finshTime, finshTime) - call c_f_pointer(handle_refTime, refTime) - call c_f_pointer(handle_oldTime, oldTime) - - - call summa4chm_initialize(& - indxGRU, & ! index of the parent GRU - num_steps, & - ! statistics structures - forcStat, & ! model forcing data - progStat, & ! model prognostic (state) variables - diagStat, & ! model diagnostic variables - fluxStat, & ! model fluxes - indxStat, & ! model indices - bvarStat, & ! basin-average variables - ! primary data structures (scalars) - timeStruct, & ! model time data - forcStruct, & ! model forcing data - attrStruct, & ! local attributes for each HRU - typeStruct, & ! local classification of soil veg etc. for each HRU - idStruct, & ! - ! primary data structures (variable length vectors) - indxStruct, & ! model indices - mparStruct, & ! model parameters - progStruct, & ! model prognostic (state) variables - diagStruct, & ! model diagnostic variables - fluxStruct, & ! model fluxes - ! basin-average structures - bparStruct, & ! basin-average parameters - bvarStruct, & ! basin-average variables - ! ancillary data structures - dparStruct, & ! default model parameters - startTime, & ! start time for the model simulation - finshTime, & ! end time for the model simulation - refTime, & ! reference time for the model simulation - oldTime, & ! time for the previous model time step - ! miscellaneous variables - err, message) - - if(err/=0)then - message=trim(message) - print*, message - endif - -end subroutine Initialize - ! ********************************************************************************************************** ! public subroutine SetupParam: initializes parameter data structures (e.g. vegetation and soil parameters). ! ********************************************************************************************************** diff --git a/build/source/actors/hru_actor/HRUActor.h b/build/source/actors/hru_actor/hru_actor.cpp similarity index 62% rename from build/source/actors/hru_actor/HRUActor.h rename to build/source/actors/hru_actor/hru_actor.cpp index 12ea48016f972406083fe9e841667feb95387f69..90b60db61a71e33454bc90879e4f4324e14342ae 100644 --- a/build/source/actors/hru_actor/HRUActor.h +++ b/build/source/actors/hru_actor/hru_actor.cpp @@ -1,26 +1,24 @@ -#ifndef HRUActor_H_ -#define HRUActor_H_ - -#include "HRU.h" -using json = nlohmann::json; - - -/** - * @brief HRU Actor is reponsible for carrying out the computation component of SUMMA - * - * @param self The Actor Ref - * @param refGRU The GRU we are computing in reference to the forcingFile - * @param indxGRU The GRU we are computing's index in gru_struc - * @param parent - * @return behavior - */ +#include "caf/all.hpp" +#include "hru_actor.hpp" +#include "global.hpp" +#include "message_atoms.hpp" +#include "hru_actor_subroutine_wrappers.hpp" + + +namespace caf { + behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, - std::string configPath, - caf::actor file_access_actor, int outputStrucSize, caf::actor parent) { + std::string configPath, caf::actor file_access_actor, int outputStrucSize, caf::actor parent) { + // Timing Information - self->state.start = std::chrono::high_resolution_clock::now(); - self->state.duration = 0.0; - self->state.initDuration = 0.0; + self->state.hru_timing = TimingInfo(); + self->state.hru_timing.addTimePoint("total_duration"); + self->state.hru_timing.updateStartPoint("total_duration"); + // Add the rest of the timing + self->state.hru_timing.addTimePoint("init_duration"); + self->state.hru_timing.addTimePoint("forcing_duration"); + self->state.hru_timing.addTimePoint("run_physics_duration"); + self->state.hru_timing.addTimePoint("write_output_duration"); // Actor References self->state.file_access_actor = file_access_actor; @@ -41,7 +39,13 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, self->state.iFile = 1; // Get the settings for the HRU - parseSettings(self, configPath); + // parseSettings(self, configPath); + + self->state.printOutput = getSettings(configPath, "HRUActor", "printOutput", + self->state.printOutput).value_or(true); + self->state.outputFrequency = getSettings(configPath, "HRUActor", "outputFrequency", + self->state.outputFrequency).value_or(500); + // We only want to print this once if (indxGRU == 1) { aout(self) << "\nSETTINGS FOR HRU_ACTOR\n"; @@ -51,16 +55,14 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, Initialize_HRU(self); - - self->state.end = std::chrono::high_resolution_clock::now(); - self->state.duration += calculateTime(self->state.start, self->state.end); - + self->state.hru_timing.updateEndPoint("total_duration"); self->send(self->state.parent, done_init_hru_v); return { // Starts the HRU and tells it to ask for data from the file_access_actor [=](start_hru) { - self->state.start = std::chrono::high_resolution_clock::now(); + self->state.hru_timing.updateStartPoint("total_duration"); + int err; @@ -76,35 +78,33 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, self->send(self->state.file_access_actor, access_forcing_v, self->state.iFile, self); - self->state.end = std::chrono::high_resolution_clock::now(); - self->state.duration += calculateTime(self->state.start, self->state.end); + self->state.hru_timing.updateEndPoint("total_duration"); }, [=](done_write) { - self->state.start = std::chrono::high_resolution_clock::now(); + self->state.hru_timing.updateStartPoint("total_duration"); // We receive a done_write message so we ensure that // stepsInCurrentFFile remains unchanged if (self->state.timestep >= self->state.num_steps) { - - self->state.end = std::chrono::high_resolution_clock::now(); - self->state.duration += calculateTime(self->state.start, self->state.end); - // Tell our parent we are done, convert all timings to seconds + self->state.hru_timing.updateEndPoint("total_duration"); - self->state.duration = self->state.duration / 1000; // Convert to milliseconds - self->state.initDuration = self->state.initDuration / 1000; // Convert to milliseconds - self->state.forcingDuration = self->state.forcingDuration / 1000; // Convert to milliseconds - self->state.runPhysicsDuration = self->state.runPhysicsDuration / 1000; // Convert to milliseconds - self->state.writeOutputDuration = self->state.writeOutputDuration / 1000; // Convert to milliseconds + // Tell our parent we are done, convert all timings to seconds + aout(self) << "\n________________HRU TIMING INFO RESULTS________________\n"; + aout(self) << "Total Duration = " << self->state.hru_timing.getDuration("total_duration").value_or(-1.0) << " Seconds\n"; + aout(self) << "Init Duration = " << self->state.hru_timing.getDuration("init_duration").value_or(-1.0) << " Seconds\n"; + aout(self) << "Forcing Duration = " << self->state.hru_timing.getDuration("forcing_duration").value_or(-1.0) << " Seconds\n"; + aout(self) << "Run Physics Duration = " << self->state.hru_timing.getDuration("run_physics_duration").value_or(-1.0) << " Seconds\n"; + aout(self) << "Write Output Duration = " << self->state.hru_timing.getDuration("write_output_duration").value_or(-1.0) << " Seconds\n\n"; self->send(self->state.parent, done_hru_v, self->state.indxGRU, - self->state.duration / 1000, - self->state.initDuration / 1000, - self->state.forcingDuration / 1000, - self->state.runPhysicsDuration / 1000, - self->state.writeOutputDuration / 1000); + self->state.hru_timing.getDuration("total_duration").value_or(-1.0), + self->state.hru_timing.getDuration("init_duration").value_or(-1.0), + self->state.hru_timing.getDuration("forcing_duration").value_or(-1.0), + self->state.hru_timing.getDuration("run_physics_duration").value_or(-1.0), + self->state.hru_timing.getDuration("write_output_duration").value_or(-1.0)); deallocateHRUStructures(self); @@ -112,14 +112,13 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, return; } - self->state.end = std::chrono::high_resolution_clock::now(); - self->state.duration += calculateTime(self->state.start, self->state.end); - + self->state.hru_timing.updateEndPoint("total_duration"); self->send(self, run_hru_v, self->state.stepsInCurrentFFile); }, [=](run_hru, int stepsInCurrentFFile) { - self->state.start = std::chrono::high_resolution_clock::now(); + self->state.hru_timing.updateStartPoint("total_duration"); + bool keepRunning = true; int err = 0; self->state.stepsInCurrentFFile = stepsInCurrentFFile; @@ -133,16 +132,11 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, self->state.outputStep += 1; self->state.forcingStep += 1; - // if (self->state.timestep == 450 && self->state.indxGRU == 5) { - // err = 20; - // } - keepRunning = check_HRU(self, err); // check if we are done, need to write } - self->state.end = std::chrono::high_resolution_clock::now(); - self->state.duration += calculateTime(self->state.start, self->state.end); + self->state.hru_timing.updateEndPoint("total_duration"); }, @@ -151,51 +145,14 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, self->state.dt_init_factor = dt_init_factor; }, }; - /********************************************************************************************************* - *********************************** END ACTOR MESSAGE HANDLERS ****************************************** - *********************************************************************************************************/ } -void parseSettings(stateful_actor<hru_state>* self, std::string configPath) { - json settings; - std::string SummaActorsSettings = "/Summa_Actors_Settings.json"; - std::ifstream settings_file(configPath + SummaActorsSettings); - settings_file >> settings; - settings_file.close(); - - if (settings.find("HRUActor") != settings.end()) { - json HRUActorConfig = settings["HRUActor"]; - // find if we want to print output to stdout - if (HRUActorConfig.find("printOutput") != HRUActorConfig.end()) { - self->state.printOutput = HRUActorConfig["printOutput"]; - } else { - aout(self) << "Error finding printOutput in JSON File - Reverting to default value\n"; - self->state.printOutput = true; - } - - if (self->state.printOutput) { - // get the frequency in number of timesteps we want to print the output - if(HRUActorConfig.find("outputFrequency") != HRUActorConfig.end()) { - self->state.outputFrequency = HRUActorConfig["outputFrequency"]; - } else { - aout(self) << "Error finding outputFrequency in JSON File - Reverting to default value\n"; - self->state.outputFrequency = 10000; - } - } - } else { - aout(self) << "Error finding HRUActor in JSON File - Reverting to default values for HRUs\n"; - self->state.printOutput = true; - self->state.outputFrequency = 10000; - } -} - void Initialize_HRU(stateful_actor<hru_state>* self) { - self->state.initStart = std::chrono::high_resolution_clock::now(); - // aout(self) << "Initalizing HRU" << std::endl; - // aout(self) << "Entering Initalize \n"; - Initialize(&self->state.indxGRU, + self->state.hru_timing.updateStartPoint("init_duration"); + + summaActors_initialize(&self->state.indxGRU, &self->state.num_steps, self->state.handle_forcStat, self->state.handle_progStat, @@ -219,7 +176,9 @@ void Initialize_HRU(stateful_actor<hru_state>* self) { self->state.handle_startTime, self->state.handle_finshTime, self->state.handle_refTime, - self->state.handle_oldTime, &self->state.err); + self->state.handle_oldTime, + &self->state.err); + if (self->state.err != 0) { aout(self) << "Error: Initialize - HRU = " << self->state.indxHRU << @@ -247,7 +206,6 @@ void Initialize_HRU(stateful_actor<hru_state>* self) { self->quit(); return; } - // aout(self) << "Restart" << std::endl; Restart(&self->state.indxGRU, &self->state.indxHRU, @@ -265,16 +223,15 @@ void Initialize_HRU(stateful_actor<hru_state>* self) { return; } - // aout(self) << self->state.refGRU << " - Done Init" << std::endl; - self->state.initEnd = std::chrono::high_resolution_clock::now(); - self->state.initDuration = calculateTime(self->state.initStart, self->state.initEnd); + self->state.hru_timing.updateEndPoint("init_duration"); } int Run_HRU(stateful_actor<hru_state>* self) { /********************************************************************** ** READ FORCING **********************************************************************/ - self->state.forcingStart = std::chrono::high_resolution_clock::now(); + self->state.hru_timing.updateStartPoint("forcing_duration"); + Forcing(&self->state.indxGRU, &self->state.timestep, self->state.handle_timeStruct, @@ -292,9 +249,7 @@ int Run_HRU(stateful_actor<hru_state>* self) { return 10; } - self->state.forcingEnd = std::chrono::high_resolution_clock::now(); - self->state.forcingDuration += calculateTime(self->state.forcingStart, self->state.forcingEnd); - + self->state.hru_timing.updateEndPoint("forcing_duration"); if (self->state.printOutput && self->state.timestep % self->state.outputFrequency == 0) { @@ -305,7 +260,8 @@ int Run_HRU(stateful_actor<hru_state>* self) { /********************************************************************** ** RUN_PHYSICS **********************************************************************/ - self->state.runPhysicsStart = std::chrono::high_resolution_clock::now(); + self->state.hru_timing.updateStartPoint("run_physics_duration"); + self->state.err = 0; RunPhysics(&self->state.indxHRU, &self->state.timestep, @@ -332,13 +288,9 @@ int Run_HRU(stateful_actor<hru_state>* self) { " - Timestep = " << self->state.timestep << std::endl; return 20; } - self->state.runPhysicsEnd = std::chrono::high_resolution_clock::now(); - self->state.runPhysicsDuration += calculateTime(self->state.runPhysicsStart, self->state.runPhysicsEnd); + self->state.hru_timing.updateEndPoint("run_physics_duration"); - /********************************************************************** - ** WRITE_OUTPUT - **********************************************************************/ - self->state.writeOutputStart = std::chrono::high_resolution_clock::now(); + self->state.hru_timing.updateStartPoint("write_output_duration"); WriteOutput(&self->state.indxHRU, &self->state.indxGRU, &self->state.timestep, @@ -373,8 +325,7 @@ int Run_HRU(stateful_actor<hru_state>* self) { " - Timestep = " << self->state.timestep << std::endl; return 30; } - self->state.writeOutputEnd = std::chrono::high_resolution_clock::now(); - self->state.writeOutputDuration += calculateTime(self->state.writeOutputStart, self->state.writeOutputEnd); + self->state.hru_timing.updateEndPoint("write_output_duration"); return 0; } @@ -391,19 +342,11 @@ bool check_HRU(stateful_actor<hru_state>* self, int err) { } else if (self->state.timestep > self->state.num_steps) { // check if simulation is finished self->state.outputStep -= 1; // prevents segfault - - if (debug) - aout(self) << "Sending Final Write" << - "forcingStep = " << self->state.forcingStep << "\n" << - "stepsInCurrentFFile = " << self->state.stepsInCurrentFFile << "\n" << - "timeStep = " << self->state.timestep << "\n" << - "outputStep = " << self->state.outputStep << "\n"; self->send(self->state.file_access_actor, write_output_v, self->state.indxGRU, self->state.indxHRU, self->state.outputStep, self); - self->state.end = std::chrono::high_resolution_clock::now(); - self->state.duration += calculateTime(self->state.start, self->state.end); + self->state.hru_timing.updateEndPoint("total_duration"); return false; @@ -412,14 +355,6 @@ bool check_HRU(stateful_actor<hru_state>* self, int err) { // Special case where we need both reading and writing self->state.outputStep -= 1; // prevents segfault - if (debug) - aout(self) << "Need to read forcing and write to outputstruc\n" << - "forcingStep = " << self->state.forcingStep << "\n" << - "stepsInCurrentFFile = " << self->state.stepsInCurrentFFile << "\n" << - "timeStep = " << self->state.timestep << "\n" << - "outputStep = " << self->state.outputStep << "\n"; - - self->send(self->state.file_access_actor, read_and_write_v, self->state.indxGRU, self->state.indxHRU, self->state.outputStep, self->state.iFile + 1, self); self->state.outputStep = 1; @@ -429,14 +364,6 @@ bool check_HRU(stateful_actor<hru_state>* self, int err) { } else if (self->state.outputStep > self->state.outputStrucSize) { // check if we need to clear the output struc self->state.outputStep -= 1; - - if (debug) - aout(self) << "Sending Write \n" << - "forcingStep = " << self->state.forcingStep << "\n" << - "stepsInCurrentFFile = " << self->state.stepsInCurrentFFile << "\n" << - "timeStep = " << self->state.timestep << "\n" << - "outputStep = " << self->state.outputStep << "\n"; - self->send(self->state.file_access_actor, write_output_v, self->state.indxGRU, self->state.indxHRU, self->state.outputStep, self); @@ -446,14 +373,6 @@ bool check_HRU(stateful_actor<hru_state>* self, int err) { } else if (self->state.forcingStep > self->state.stepsInCurrentFFile) { // we need more forcing data - - if (debug) - aout(self) << "Asking for more forcing data\n" << - "forcingStep = " << self->state.forcingStep << "\n" << - "stepsInCurrentFFile = " << self->state.stepsInCurrentFFile << "\n" << - "timeStep = " << self->state.timestep << "\n" << - "outputStep = " << self->state.outputStep << "\n"; - self->send(self->state.file_access_actor, access_forcing_v, self->state.iFile + 1, self); return false; @@ -498,7 +417,6 @@ void deallocateHRUStructures(stateful_actor<hru_state>* self) { void printOutput(stateful_actor<hru_state>* self) { aout(self) << self->state.refGRU << " - Timestep = " << self->state.timestep << std::endl; - aout(self) << self->state.refGRU << ":Accumulated Run Physics Time = " << - self->state.runPhysicsDuration << std::endl; } -#endif \ No newline at end of file + +} \ No newline at end of file diff --git a/build/source/actors/job_actor/GRUinfo.cpp b/build/source/actors/job_actor/GRUinfo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c23be65df8ae5bb62641060e08bcae7928195e29 --- /dev/null +++ b/build/source/actors/job_actor/GRUinfo.cpp @@ -0,0 +1,113 @@ +#include "caf/all.hpp" +#include "GRUinfo.hpp" +#include <iostream> +#include <fstream> + + +GRUinfo::GRUinfo(int refGRU, int indxGRU, caf::actor gru, int dt_init, int maxAttempts) { + this->refGRU = refGRU; + this->indxGRU = indxGRU; + this->GRU = gru; + this->dt_init = dt_init; + this->currentAttempt = 1; + this->maxAttempts = maxAttempts; + this->completed = false; + this->failed = false; +} +GRUinfo::~GRUinfo(){}; + +// Getters +int GRUinfo::getRefGRU() { + return this->refGRU; +} + +int GRUinfo::getIndxGRU() { + return this->indxGRU; +} + +int GRUinfo::getDt_init() { + return this->dt_init; +} + +caf::actor GRUinfo::getActor() { + return GRU; +} +// Setters +void GRUinfo::updateGRU(caf::actor gru) { + this->GRU = gru; +} + +void GRUinfo::updateFailed() { + if (this->failed) { + this->failed = false; + } else { + this->failed = true; + } +} + +void GRUinfo::updateCompletedToTrue(){ + this->completed = true; +} + +void GRUinfo::updateDt_init() { + this->dt_init = this->dt_init * 2; +} + +void GRUinfo::updateCurrentAttempt() { + this->currentAttempt++; +} + +// Methods that return Booleans +bool GRUinfo::isMaxAttemptsReached() { + return this->maxAttempts <= this->currentAttempt; +} + +bool GRUinfo::isFailed() { + return this->failed; +} + +bool GRUinfo::isCompleted() { + return this->completed; +} + +void GRUinfo::doneRun(double runTime, double initDuration, double forcingDuration, + double runPhysicsDuration, double writeOutputDuration) { + this->runTime = runTime; + this->initDuration = initDuration; + this->forcingDuration = forcingDuration; + this->runPhysicsDuration = runPhysicsDuration; + this->writeOutputDuration = writeOutputDuration; +} + +// Methods for writing statistics to a file +void GRUinfo::writeSuccess(std::string fileName) { + std::ofstream file; + file.open(fileName, std::ios_base::app); + file << this->refGRU << "," + << this->runTime << "," + << this->initDuration << "," + << this->forcingDuration << "," + << this->runPhysicsDuration << "," + << this->writeOutputDuration << "," + << this->dt_init << "," + << this->currentAttempt << "\n"; + file.close(); +} + +void GRUinfo::writeFail(std::string fileName) { + std::ofstream file; + file.open(fileName, std::ios_base::app); + file << this->refGRU << "," + << this->dt_init << "," + << this->currentAttempt << "\n"; + file.close(); +} + +void GRUinfo::printOutput() { + std::cout << "\nGRU = " << this->refGRU << "\n" << + "RunTime = " << this->runTime << "\n" << + "initDuration = " << this->initDuration << "\n" << + "forcingDuration = " << this->forcingDuration << "\n" << + "runPhysicsDuration = " << this->runPhysicsDuration << "\n" << + "writeOutputDuration = " << this->writeOutputDuration << "\n\n"; +} \ No newline at end of file diff --git a/build/source/actors/job_actor/GRUinfo.h b/build/source/actors/job_actor/GRUinfo.h deleted file mode 100644 index 51153f0d28afdf9a59dea6927744cccc5d03c88f..0000000000000000000000000000000000000000 --- a/build/source/actors/job_actor/GRUinfo.h +++ /dev/null @@ -1,146 +0,0 @@ -#ifndef GRUinfo_H_ -#define GRUinfo_H_ - -#include "caf/all.hpp" -#include <iostream> -#include <fstream> -#include "Job.h" - - -class GRUinfo { - private: - int refGRU; // This will be the same as the refGRU - int indxGRU; - caf::actor GRU; - - // Variable to update - int dt_init; - - // Completed Information - int currentAttempt; - int maxAttempts; - bool completed; - bool failed; - - // Timing information for the GRU - double runTime; - double initDuration; - double forcingDuration; - double runPhysicsDuration; - double writeOutputDuration; - - public: - // Constructor - GRUinfo(int refGRU, int indxGRU, caf::actor gru, int dt_init, int maxAttempts) { - this->refGRU = refGRU; - this->indxGRU = indxGRU; - this->GRU = gru; - this->dt_init = dt_init; - this->currentAttempt = 1; - this->maxAttempts = maxAttempts; - this->completed = false; - this->failed = false; - } - // Deconstructor - ~GRUinfo(){}; - - // Getters - int getRefGRU() { - return this->refGRU; - } - - int getIndxGRU() { - return this->indxGRU; - } - - int getDt_init() { - return this->dt_init; - } - - caf::actor getActor() { - return GRU; - } - // Setters - void updateGRU(caf::actor gru) { - this->GRU = gru; - } - - void updateFailed() { - if (this->failed) { - this->failed = false; - } else { - this->failed = true; - } - } - - void updateCompletedToTrue(){ - this->completed = true; - } - - void updateDt_init() { - this->dt_init = this->dt_init * 2; - } - - void updateCurrentAttempt() { - this->currentAttempt++; - } - - // Methods that return Booleans - bool isMaxAttemptsReached() { - return this->maxAttempts <= this->currentAttempt; - } - - bool isFailed() { - return this->failed; - } - - bool isCompleted() { - return this->completed; - } - - void doneRun(double runTime, double initDuration, double forcingDuration, - double runPhysicsDuration, double writeOutputDuration) { - this->runTime = runTime; - this->initDuration = initDuration; - this->forcingDuration = forcingDuration; - this->runPhysicsDuration = runPhysicsDuration; - this->writeOutputDuration = writeOutputDuration; - } - - // Methods for writing statistics to a file - void writeSuccess(std::string fileName) { - std::ofstream file; - file.open(fileName, std::ios_base::app); - file << this->refGRU << "," - << this->runTime << "," - << this->initDuration << "," - << this->forcingDuration << "," - << this->runPhysicsDuration << "," - << this->writeOutputDuration << "," - << this->dt_init << "," - << this->currentAttempt << "\n"; - file.close(); - } - - void writeFail(std::string fileName) { - std::ofstream file; - file.open(fileName, std::ios_base::app); - file << this->refGRU << "," - << this->dt_init << "," - << this->currentAttempt << "\n"; - file.close(); - } - - void printOutput() { - std::cout << "\nGRU = " << this->refGRU << "\n" << - "RunTime = " << this->runTime << "\n" << - "initDuration = " << this->initDuration << "\n" << - "forcingDuration = " << this->forcingDuration << "\n" << - "runPhysicsDuration = " << this->runPhysicsDuration << "\n" << - "writeOutputDuration = " << this->writeOutputDuration << "\n\n"; - } - - - -}; -#endif \ No newline at end of file diff --git a/build/source/actors/job_actor/JobActor.h b/build/source/actors/job_actor/job_actor.cpp similarity index 56% rename from build/source/actors/job_actor/JobActor.h rename to build/source/actors/job_actor/job_actor.cpp index 890bfde6b0621022a0118d5d7d750c6f2fdd731b..1fb5f5e1f0760b9cc140fd2168c0011a66731104 100644 --- a/build/source/actors/job_actor/JobActor.h +++ b/build/source/actors/job_actor/job_actor.cpp @@ -1,11 +1,17 @@ -#ifndef SUMMACLIENTACTOR_H_ -#define SUMMACLIENTACTOR_H_ +#include "job_actor.hpp" +#include "file_access_actor.hpp" +#include "json.hpp" +#include <chrono> +#include <thread> +#include "message_atoms.hpp" +#include "global.hpp" +#include "job_actor_subroutine_wrappers.hpp" +#include "hru_actor.hpp" -#include "Job.h" - -using namespace caf; using json = nlohmann::json; +namespace caf { + /** * @brief First Actor that is spawned that is not the Coordinator Actor. * @@ -14,7 +20,12 @@ using json = nlohmann::json; */ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, std::string configPath, int outputStrucSize, caf::actor parent) { - self->state.start = std::chrono::high_resolution_clock::now(); + // Timinig Information + self->state.job_timing = TimingInfo(); + self->state.job_timing.addTimePoint("total_duration"); + self->state.job_timing.updateStartPoint("total_duration"); + + // Set Job Variables self->state.startGRU = startGRU; self->state.numGRU = numGRU; @@ -22,17 +33,26 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, self->state.parent = parent; self->state.outputStrucSize = outputStrucSize; - if (parseSettings(self, configPath) == -1) { - aout(self) << "ERROR WITH JSON SETTINGS FILE!!!\n"; - self->quit(); - } else { - aout(self) << "\nSETTINGS FOR JOB_ACTOR\n" << - "File Manager Path = " << self->state.fileManager << "\n" << - "outputCSV = " << self->state.outputCSV << "\n"; - if (self->state.outputCSV) { - aout(self) << "csvPath = " << self->state.csvPath << "\n"; + // Get All Settings + self->state.fileManager = getSettings(self->state.configPath, "JobActor", "FileManagerPath", + self->state.fileManager).value_or(""); + self->state.outputCSV = getSettings(self->state.configPath, "JobActor", "outputCSV", + self->state.outputCSV).value_or(false); + if (self->state.outputCSV) { + self->state.csvPath = getSettings(self->state.configPath, "JobActor", "csvPath", + self->state.csvPath).value_or(""); + if (self->state.csvPath == ""){ // check if we found the value if not set outputCSV to false + self->state.outputCSV = false; } } + + // Print Settings + aout(self) << "\nSETTINGS FOR JOB_ACTOR\n" << + "File Manager Path = " << self->state.fileManager << "\n" << + "outputCSV = " << self->state.outputCSV << "\n"; + if (self->state.outputCSV) { + aout(self) << "csvPath = " << self->state.csvPath << "\n"; + } // Initalize global variables initJob(self); @@ -45,20 +65,11 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, aout(self) << "Job Actor Initalized \n"; return { - // ******************************************************************************************* - // *********************************** INTERFACE WITH HRU ************************************ - // ******************************************************************************************* - - /** - * - */ + [=](init_hru) { initalizeGRU(self); }, - /** - * - */ [=](done_init_hru) { if (debug) { aout(self) << "Done Init\n"; @@ -74,17 +85,16 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, } }, + [=](done_hru, int indx_gru, double total_duration, double init_duration, + double forcing_duration, double run_physics_duration, double write_output_duration) { + aout(self) << "\nDone - GRU:" << self->state.GRUList[indx_gru - 1]->getRefGRU() + << " - IndexInJob = " << indx_gru << "\n"; - [=](done_hru, int indxGRU, double totalDuration, double initDuration, - double forcingDuration, double runPhysicsDuration, double writeOutputDuration) { - aout(self) << "GRU:" << self->state.GRUList[indxGRU - 1]->getRefGRU() - << "indxGRU = " << indxGRU << "Done \n"; - - self->state.GRUList[indxGRU - 1]->doneRun(totalDuration, initDuration, forcingDuration, - runPhysicsDuration, writeOutputDuration); + self->state.GRUList[indx_gru - 1]->doneRun(total_duration, init_duration, forcing_duration, + run_physics_duration, write_output_duration); if (self->state.outputCSV) { - self->state.GRUList[indxGRU - 1]->writeSuccess(self->state.successOutputFile); + self->state.GRUList[indx_gru - 1]->writeSuccess(self->state.successOutputFile); } self->state.numGRUDone++; @@ -101,7 +111,6 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, } }, - [=](run_failure, caf::actor actorRef, int indxGRU, int err) { aout(self) << "GRU:" << self->state.GRUList[indxGRU - 1]->getRefGRU() << "indxGRU = " << indxGRU << "Failed \n" @@ -120,25 +129,12 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, } }, - // ******************************************************************************************* - // ******************************* END INTERFACE WITH HRU ************************************ - // ******************************************************************************************* - - // ******************************************************************************************* - // ****************************** INTERFACE WITH FileAccessActor ***************************** - // ******************************************************************************************* - /** - * - */ [=](done_file_access_actor_init) { // Init GRU Actors and the Output Structure - // self->send(self->state.file_access_actor, initalize_outputStructure_v); self->send(self, init_hru_v); }, - - - [=](file_access_actor_done, double readDuration, double writeDuration) { + [=](file_access_actor_done, double read_duration, double write_duration) { int err = 0; if (debug) { aout(self) << "\n********************************\n"; @@ -156,31 +152,37 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, self->state.GRUList.clear(); - self->state.end = std::chrono::high_resolution_clock::now(); - self->state.duration = calculateTime(self->state.start, self->state.end); - - self->state.duration = self->state.duration / 1000; // Convert to milliseconds + self->state.job_timing.updateEndPoint("total_duration"); - aout(self) << "\nTotal Job Duration:\n"; - aout(self) << " " << self->state.duration / 1000 << " Seconds\n"; - aout(self) << " " << (self->state.duration / 1000) / 60 << " Minutes\n"; - aout(self) << " " << ((self->state.duration / 1000) / 60) / 60 << " Hours\n"; - aout(self) << "\nReading Duration:\n"; - aout(self) << " " << readDuration << " Seconds\n"; - aout(self) << "\nWriting Duration:\n"; - aout(self) << " " << writeDuration << " Seconds\n\n"; + aout(self) << "\n________________PRINTING JOB_ACTOR TIMING INFO RESULTS________________\n"; + aout(self) << "Total Duration = " << self->state.job_timing.getDuration("total_duration").value_or(-1.0) << " Seconds\n"; + aout(self) << "Total Duration = " << self->state.job_timing.getDuration("total_duration").value_or(-1.0) / 60 << " Minutes\n"; + aout(self) << "Total Duration = " << (self->state.job_timing.getDuration("total_duration").value_or(-1.0) / 60) / 60 << " Hours\n\n"; cleanUpJobActor(&err); // Tell Parent we are done - self->send(self->state.parent, done_job_v, self->state.numGRUFailed); + self->send(self->state.parent, + done_job_v, + self->state.numGRUFailed, + self->state.job_timing.getDuration("total_duration").value_or(-1.0), + read_duration, write_duration); self->quit(); }, [=](file_access_actor_err, std::string function) { - aout(self) << "Failure in File Access Actor in function" << function << "\n"; - aout(self) << "Letting Parent Know we are quitting\n"; - self->send(self->state.parent, err_v); - self->quit(); + aout(self) << "Failure in File Access Actor in function: " << function << "\n"; + if (function == "def_output") { + aout(self) << "Error with the output file, will try creating it agian\n"; + std::this_thread::sleep_for(std::chrono::seconds(5)); + self->state.file_access_actor = self->spawn(file_access_actor, self->state.startGRU, self->state.numGRU, + self->state.outputStrucSize, self->state.configPath, self); + } else { + aout(self) << "Letting Parent Know we are quitting\n"; + self->send(self->state.parent, err_v); + self->quit(); + } + + } // ******************************************************************************************* // ************************** END INTERFACE WITH FileAccessActor ***************************** @@ -189,49 +191,6 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, }; } - -int parseSettings(stateful_actor<job_state>* self, std::string configPath) { - json settings; - std::string SummaActorsSettigs = "/Summa_Actors_Settings.json"; - std::ifstream settings_file(configPath + SummaActorsSettigs); - settings_file >> settings; - settings_file.close(); - - if (settings.find("JobActor") != settings.end()) { - json JobActorConfig = settings["JobActor"]; - // Find the File Manager Path - if (JobActorConfig.find("FileManagerPath") != JobActorConfig.end()) { - self->state.fileManager = JobActorConfig["FileManagerPath"]; - } else { - aout(self) << "Error Finding FileManagerPath - Exiting as this is needed\n"; - return -1; - } - - // Find if we want to outputCSV - if (JobActorConfig.find("outputCSV") != JobActorConfig.end()) { - self->state.outputCSV = JobActorConfig["outputCSV"]; - } else { - aout(self) << "Error Finding outputCSV in JSON file - Reverting to Default Value\n"; - self->state.outputCSV = false; - } - - // Output Path of CSV - if (self->state.outputCSV) { - if (JobActorConfig.find("csvPath") != JobActorConfig.end()) { - self->state.csvPath = JobActorConfig["csvPath"]; - } else { - aout(self) << "Error Finding csvPath in JSON file = Reverting to Default Value \n"; - self->state.outputCSV = false; // we just choose not to output a csv - } - } - - return 0; - } else { - aout(self) << "Error Finding JobActor in JSON file - Exiting as there is no path for the fileManger\n"; - return -1; - } -} - void initJob(stateful_actor<job_state>* self) { std::string success = "Success"; // allows us to build the string if (self->state.outputCSV) { @@ -239,13 +198,18 @@ void initJob(stateful_actor<job_state>* self) { self->state.successOutputFile = self->state.csvPath += success += std::to_string(self->state.startGRU) += ".csv"; file.open(self->state.successOutputFile, std::ios_base::out); - file << "GRU" << "," << "totalDuration" << "," << "initDuration" << "," << - "forcingDuration" << "," << "runPhysicsDuration" << "," << "writeOutputDuration" << - "," << "dt_init" << "," << "numAttemtps" << "\n"; + file << + "GRU," << + "totalDuration," << + "initDuration," << + "forcingDuration," << + "runPhysicsDuration," << + "writeOutputDuration," << + "dt_init," << + "numAttemtps\n"; file.close(); } - int totalGRUs = 0; int totalHRUs = 0; int numHRUs = 0; @@ -305,6 +269,6 @@ void restartFailures(stateful_actor<job_state>* self) { } } +} // End Namespace caf -#endif diff --git a/build/source/actors/main.cc b/build/source/actors/main.cc deleted file mode 100644 index bb1f58afdf93be4aa85fc3f34ac2f43236fbdca6..0000000000000000000000000000000000000000 --- a/build/source/actors/main.cc +++ /dev/null @@ -1,60 +0,0 @@ -#include "caf/all.hpp" -#include "caf/io/all.hpp" -#include "summa_actor/SummaActor.h" -#include "global/messageAtoms.h" -#include "global/global.h" - -#include <string> -#include <bits/stdc++.h> -#include <unistd.h> -#include <iostream> - -using namespace caf; - -/* Configuration class that handles the config and -/ command line options for the actors program */ -class config : public actor_system_config { - public: - int startGRU = -1; - int countGRU = -1; - std::string configPath = ""; // master file - bool debugMode = false; - - config() { - opt_group{custom_options_, "global"} - .add(startGRU, "gru,g", "Starting GRU Index") - .add(countGRU, "numGRU,n", "Total Number of GRUs") - .add(configPath, "config,c", "Path name of the config directory") - .add(debugMode, "debug-mode,d", "enable debug mode"); - } -}; - -void caf_main(actor_system& sys, const config& cfg) { - scoped_actor self{sys}; - if (cfg.startGRU == -1) { - aout(self) << "Starting GRU was not defined!! " << - "startGRU is set with the \"-g\" option\n"; - aout(self) << "EXAMPLE: ./summaMain -g 1 -n 10 -c location/of/config \n"; - return; - } - if (cfg.countGRU == -1) { - aout(self) << "Number of GRUs was not defined!! " << - "countGRU is set with the \"-n\" option\n"; - aout(self) << "EXAMPLE: ./summaMain -g 1 -n 10 -c location/of/config \n"; - return; - } - if (cfg.configPath == "") { - aout(self) << "File Manager was not defined!! " << - "fileManger is set with the \"-c\" option\n"; - aout(self) << "EXAMPLE: ./summaMain -g 1 -n 10 -c location/of/config \n"; - return; - } - if (cfg.debugMode) { - aout(self) << "Starting SUMMA-Actors in DebugMode\n"; - debug = true; - } - // start SUMMA - auto summa = sys.spawn(summa_actor, cfg.startGRU, cfg.countGRU, cfg.configPath); -} - -CAF_MAIN(id_block::summa) \ No newline at end of file diff --git a/build/source/actors/main.cpp b/build/source/actors/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ab6583ad3e9c2a70d28aad0db507c7b643b1b177 --- /dev/null +++ b/build/source/actors/main.cpp @@ -0,0 +1,122 @@ +#include "caf/all.hpp" +#include "caf/io/all.hpp" +#include "summa_actor.hpp" +#include "summa_client.hpp" +#include "summa_server.hpp" +#include "global.hpp" +#include "message_atoms.hpp" +#include <string> +#include <bits/stdc++.h> +#include <unistd.h> +#include <iostream> +#include "json.hpp" +#include "batch_manager.hpp" +#include <optional> + +using namespace caf; + + +/* Configuration class that handles the config and +/ command line options for the actors program */ +class config : public actor_system_config { + public: + int startGRU = -1; + int countGRU = -1; + std::string config_path = ""; + bool debugMode = false; + bool server_mode = false; + + config() { + opt_group{custom_options_, "global"} + .add(startGRU, "gru,g", "Starting GRU Index") + .add(countGRU, "numGRU,n", "Total Number of GRUs") + .add(config_path, "config,c", "Path name of the config directory") + .add(debugMode, "debug-mode,b", "enable debug mode") + .add(server_mode, "server-mode,s", "enable server mode"); + } +}; + +void run_client(actor_system& system, const config& cfg) { + scoped_actor self{system}; + std::string host; + uint16_t port; + + aout(self) << "Starting SUMMA-Client in Distributed Mode\n"; + host = getSettings(cfg.config_path, "DistributedSettings", "host", host).value_or(""); + port = getSettings(cfg.config_path, "DistributedSettings", "port", port).value_or(-1); + + if (host == "" || port == -1) { + aout(self) << "ERROR: run_client() host and port - CHECK SETTINGS FILE\n"; + return; + } + std::optional<std::string> path = cfg.config_path; + auto c = system.spawn(summa_client, path); + if (!host.empty() && port > 0) { + anon_send(c, connect_atom_v, host, port); + } else { + aout(self) << "No Server Config" << std::endl; + } + +} + +void run_server(actor_system& system, const config& cfg) { + scoped_actor self{system}; + uint16_t port; + + port = getSettings(cfg.config_path, "DistributedSettings", "port", port).value_or(-1); + if (port == -1) { + aout(self) << "ERROR: run_server() port - CHECK SETTINGS FILE\n"; + return; + } + auto server = system.spawn(summa_server, cfg.config_path); + aout(self) << "Attempting to publish summa_server_actor on port " << port << std::endl; + auto is_port = io::publish(server, port); + if (!is_port) { + std::cerr << "********PUBLISH FAILED*******" << to_string(is_port.error()) << "\n"; + return; + } + aout(self) << "Successfully Published summa_server_actor on port " << *is_port << "\n"; +} + + + + +void caf_main(actor_system& sys, const config& cfg) { + scoped_actor self{sys}; + std::string key_1 = "DistributedSettings"; + std::string key_2 = "distributed-mode"; + bool distributed_mode = false; + + distributed_mode = getSettings(cfg.config_path, key_1, key_2, distributed_mode).value_or(false); + if (distributed_mode) { + // only command line arguments needed are config_path and server-mode + auto system = cfg.server_mode ? run_server : run_client; + system(sys, cfg); + + } else { + // Configure command line arguments + if (cfg.startGRU == -1) { + aout(self) << "Starting GRU was not defined!! " << + "startGRU is set with the \"-g\" option\n"; + aout(self) << "EXAMPLE: ./summaMain -g 1 -n 10 -c location/of/config \n"; + return; + } + if (cfg.countGRU == -1) { + aout(self) << "Number of GRUs was not defined!! " << + "countGRU is set with the \"-n\" option\n"; + aout(self) << "EXAMPLE: ./summaMain -g 1 -n 10 -c location/of/config \n"; + return; + } + if (cfg.config_path == "") { + aout(self) << "File Manager was not defined!! " << + "fileManger is set with the \"-c\" option\n"; + aout(self) << "EXAMPLE: ./summaMain -g 1 -n 10 -c location/of/config \n"; + return; + } + + auto summa = sys.spawn(summa_actor, cfg.startGRU, cfg.countGRU, cfg.config_path, self); + } + +} + +CAF_MAIN(id_block::summa, io::middleman) diff --git a/build/source/actors/summa_actor/SummaActor.h b/build/source/actors/summa_actor/SummaActor.h deleted file mode 100644 index 444bdc74ab2bc57ff13acd75a3baa91758c63c37..0000000000000000000000000000000000000000 --- a/build/source/actors/summa_actor/SummaActor.h +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef SUMMAACTOR_H_ -#define SUMMAACTOR_H_ - -#include "SummaManager.h" - -using namespace caf; -using json = nlohmann::json; -/** - * Top Level Actor for Summa. This actor recieves the number of GRUs to compute from main and - * divides them into jobs that compute one at a time. - * - * @param startGRU - starting GRU for the simulation - * @param numGRU - total number of GRUs to compute - * @param configPath - location of file information for SUMMA - * @return behavior - */ -behavior summa_actor(stateful_actor<summa_manager>* self, int startGRU, int numGRU, std::string configPath) { - self->state.start = std::chrono::high_resolution_clock::now(); - // Set Variables - self->state.startGRU = startGRU; - self->state.numGRU = numGRU; - self->state.configPath = configPath; - - parseSettings(self, configPath); - aout(self) << "SETTINGS FOR SUMMA_ACTOR\n"; - aout(self) << "Output Structure Size = " << self->state.outputStrucSize << "\n"; - aout(self) << "Max GRUs Per Job = " << self->state.maxGRUPerJob << "\n"; - - // Create the job_actor and start SUMMA - spawnJob(self); - - return { - [=](done_job, int numFailed) { - self->state.numFailed += numFailed; - aout(self) << "Job Done\n"; - if (self->state.numGRU <= 0) { - - self->state.end = std::chrono::high_resolution_clock::now(); - self->state.duration = calculateTime(self->state.start, self->state.end); - - self->state.duration = self->state.duration / 1000; // Convert to milliseconds - - - aout(self) << "Total Program Duration:\n"; - aout(self) << " " << self->state.duration / 1000 << " Seconds\n"; - aout(self) << " " << (self->state.duration / 1000) / 60 << " Minutes\n"; - aout(self) << " " << ((self->state.duration / 1000) / 60) / 60 << " Hours\n"; - - aout(self) << "Program Finished \n"; - - } else { - // spawn a new job - spawnJob(self); - } - }, - - [=](err) { - aout(self) << "Unrecoverable Error: Attempting To Fail Gracefully\n"; - self->quit(); - } - }; -} - - -void spawnJob(stateful_actor<summa_manager>* self) { - // Ensure we do not start a job with too many GRUs - if (self->state.numGRU > self->state.maxGRUPerJob) { - // 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.configPath, self->state.outputStrucSize, self); - - // Update GRU count - self->state.numGRU = self->state.numGRU - self->state.maxGRUPerJob; - self->state.startGRU = self->state.startGRU + self->state.maxGRUPerJob; - - } else { - - self->state.currentJob = self->spawn(job_actor, self->state.startGRU, self->state.numGRU, - self->state.configPath, self->state.outputStrucSize, self); - self->state.numGRU = 0; - } -} - -void parseSettings(stateful_actor<summa_manager>* self, std::string configPath) { - json settings; - std::string SummaActorsSettings = "/Summa_Actors_Settings.json"; - std::ifstream settings_file(configPath + SummaActorsSettings); - settings_file >> settings; - settings_file.close(); - - if (settings.find("SummaActor") != settings.end()) { - json SummaActorConfig = settings["SummaActor"]; - - // Find the desired OutputStrucSize - if (SummaActorConfig.find("OuputStructureSize") != SummaActorConfig.end()) { - self->state.outputStrucSize = SummaActorConfig["OuputStructureSize"]; - } else { - aout(self) << "Error Finding OutputStructureSize in JOSN - Reverting to default value\n"; - self->state.outputStrucSize = 250; - } - - // Find the desired maxGRUPerJob size - if (SummaActorConfig.find("maxGRUPerJob") != SummaActorConfig.end()) { - self->state.maxGRUPerJob = SummaActorConfig["maxGRUPerJob"]; - } else { - aout(self) << "Error Finding maxGRUPerJob in JOSN - Reverting to default value\n"; - self->state.maxGRUPerJob = 500; - } - - } else { - aout(self) << "Error Finding SummaActor in JSON - Reverting to default values\n"; - self->state.outputStrucSize = 250; - self->state.maxGRUPerJob = 500; - } -} - - - -#endif \ No newline at end of file diff --git a/build/source/actors/summa_actor/SummaManager.h b/build/source/actors/summa_actor/SummaManager.h deleted file mode 100644 index da875782b25c35ea1b589823d68a467a32321581..0000000000000000000000000000000000000000 --- a/build/source/actors/summa_actor/SummaManager.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef SUMMAMANGER_H_ -#define SUMMAMANGER_H_ - -#include "caf/all.hpp" -#include "caf/io/all.hpp" -#include "../job_actor/JobActor.h" -#include "../global/json.hpp" -#include "../global/global.h" - - -#include <iostream> -#include <chrono> -#include <string> -#include <fstream> - - - -struct summa_manager { - // Timing Information - std::chrono::time_point<std::chrono::system_clock> start; - std::chrono::time_point<std::chrono::system_clock> end; - double duration; - // Program Parameters - int startGRU; // starting GRU for the simulation - int numGRU; // number of GRUs to compute - std::string configPath;// path to the fileManager.txt file - // 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 - -}; - -/** - * @brief Function to spawn a job actor - */ -void spawnJob(stateful_actor<summa_manager>* self); - -void parseSettings(stateful_actor<summa_manager>* self, std::string configPath); -#endif \ No newline at end of file diff --git a/build/source/actors/summa_actor/batch_manager.cpp b/build/source/actors/summa_actor/batch_manager.cpp new file mode 100644 index 0000000000000000000000000000000000000000..85beab394bedbff8e9ce337cb670938afb87baf6 --- /dev/null +++ b/build/source/actors/summa_actor/batch_manager.cpp @@ -0,0 +1,68 @@ +#include "caf/all.hpp" +#include <vector> +#include "batch_manager.hpp" + +Batch::Batch(int batch_id, int start_hru, int num_hru) { + this->batch_id = batch_id; + this->start_hru = start_hru; + this->num_hru = num_hru; + this->status = unassigned; +} + + + +void Batch::printBatchInfo() { + std::cout << "batch_id: " << this->batch_id << "\n"; + std::cout << "start_hru: " << this->start_hru << "\n"; + std::cout << "num_hru: " << this->num_hru << "\n"; +} + +batch_status Batch::getBatchStatus() { + return this->status; +} + +int Batch::getBatchID() { + return this->batch_id; +} + +int Batch::getStartHRU() { + return this->start_hru; +} + +int Batch::getNumHRU() { + return this->num_hru; +} + +void Batch::solvedBatch(double run_time, double read_time, double write_time) { + this->status = solved; + this->run_time = run_time; + this->read_time = read_time; + this->write_time = write_time; +} + +void Batch::assignedBatch(std::string hostname, caf::actor actor_ref) { + this->status = assigned; + this->assigned_host = hostname; + this->assigned_actor = actor_ref; +} + +void Batch::updateRunTime(double run_time) { + this->run_time = run_time; +} + +void Batch::writeBatchToFile(std::string file_name) { + std::ofstream output_file; + output_file.open(file_name, std::ios_base::app); + output_file << + this->batch_id << "," << + this->start_hru << "," << + this->num_hru << "," << + this->assigned_host << "," << + this->run_time << "," << + this->read_time << "," << + this->write_time << "," << + this->status << "\n"; + output_file.close(); +} + + diff --git a/build/source/actors/summa_actor/client.cpp b/build/source/actors/summa_actor/client.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bc5faa16663312972ee84117a4fedab95f7b6dea --- /dev/null +++ b/build/source/actors/summa_actor/client.cpp @@ -0,0 +1,23 @@ +#include "caf/all.hpp" +#include "client.hpp" + + +Client::Client(int id, caf::actor client_actor, std::string hostname) { + this->id = id; + this->client_actor = client_actor; + this->hostname = hostname; + this->connected = true; +} + + +caf::actor Client::getActor() { + return this->client_actor; +} + +int Client::getID() { + return this->id; +} + +std::string Client::getHostname() { + return this->hostname; +} \ No newline at end of file diff --git a/build/source/actors/summa_actor/summa_actor.cpp b/build/source/actors/summa_actor/summa_actor.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a62e5fb23f18f9822d4ceb8f13041cd32f848c4d --- /dev/null +++ b/build/source/actors/summa_actor/summa_actor.cpp @@ -0,0 +1,112 @@ +#include "caf/all.hpp" +#include "caf/io/all.hpp" +#include "message_atoms.hpp" +#include "summa_actor.hpp" +#include "global.hpp" +#include "job_actor.hpp" +#include "json.hpp" +#include <iostream> +#include <chrono> +#include <string> +#include <fstream> + +using json = nlohmann::json; + +namespace caf { + +behavior summa_actor(stateful_actor<summa_actor_state>* self, int startGRU, int numGRU, std::string configPath, actor parent) { + // Set Timing Variables + self->state.summa_actor_timing = TimingInfo(); + self->state.summa_actor_timing.addTimePoint("total_duration"); + self->state.summa_actor_timing.updateStartPoint("total_duration"); + // Set Variables + self->state.startGRU = startGRU; + self->state.numGRU = numGRU; + self->state.configPath = configPath; + self->state.parent = parent; + + self->state.outputStrucSize = getSettings(self->state.configPath, "SummaActor", "OuputStructureSize", + self->state.outputStrucSize).value_or(250); + self->state.maxGRUPerJob = getSettings(self->state.configPath, "SummaActor", "maxGRUPerJob", + self->state.maxGRUPerJob).value_or(100); + + aout(self) << "SETTINGS FOR SUMMA_ACTOR\n"; + aout(self) << "Output Structure Size = " << self->state.outputStrucSize << "\n"; + aout(self) << "Max GRUs Per Job = " << self->state.maxGRUPerJob << "\n"; + + // Create the job_actor and start SUMMA + spawnJob(self); + + return { + [=](done_job, int numFailed, double job_duration, double read_duration, double write_duration) { + self->state.numFailed += numFailed; + + self->state.timing_info_for_jobs.job_duration.push_back(job_duration); + self->state.timing_info_for_jobs.job_read_duration.push_back(read_duration); + self->state.timing_info_for_jobs.job_write_duration.push_back(write_duration); + + if (self->state.numGRU <= 0) { + self->state.summa_actor_timing.updateEndPoint("total_duration"); + + for (std::vector<int>::size_type i = 0; i < self->state.timing_info_for_jobs.job_duration.size(); i++) { + aout(self) << "\n________________Job " << i + 1 << " Info_______________\n"; + aout(self) << "Job Duration = " << self->state.timing_info_for_jobs.job_duration[i] << "\n"; + aout(self) << "Job Read Duration = " << self->state.timing_info_for_jobs.job_read_duration[i] << "\n"; + aout(self) << "Job Write Duration = " << self->state.timing_info_for_jobs.job_write_duration[i] << "\n"; + } + + // TODO: Output CSV file for finished jobs + + aout(self) << "\n________________SUMMA_ACTOR TIMING INFO________________\n"; + aout(self) << "Total Duration = " << self->state.summa_actor_timing.getDuration("total_duration").value_or(-1.0) << " Seconds\n"; + aout(self) << "Total Duration = " << self->state.summa_actor_timing.getDuration("total_duration").value_or(-1.0) / 60 << " Minutes\n"; + aout(self) << "Total Duration = " << (self->state.summa_actor_timing.getDuration("total_duration").value_or(-1.0) / 60) / 60 << " Hours\n\n"; + double total_read_duration = std::accumulate(self->state.timing_info_for_jobs.job_read_duration.begin(), + self->state.timing_info_for_jobs.job_read_duration.end(), + 0.0); + aout(self) << "Total Read Duration = " << total_read_duration << "Seconds \n"; + double total_write_duration = std::accumulate(self->state.timing_info_for_jobs.job_write_duration.begin(), + self->state.timing_info_for_jobs.job_write_duration.end(), + 0.0); + aout(self) << "Total Write Duration = " << total_write_duration << "Seconds \n"; + aout(self) << "Program Finished \n"; + + self->send(self->state.parent, done_batch_v, + self->state.summa_actor_timing.getDuration("total_duration").value_or(-1.0), + total_read_duration, + total_write_duration); + + } else { + // spawn a new job + spawnJob(self); + } + }, + + [=](err) { + aout(self) << "Unrecoverable Error: Attempting To Fail Gracefully\n"; + self->quit(); + } + }; +} + + +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) { + // 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.configPath, self->state.outputStrucSize, self); + + // Update GRU count + self->state.numGRU = self->state.numGRU - self->state.maxGRUPerJob; + self->state.startGRU = self->state.startGRU + self->state.maxGRUPerJob; + + } else { + + self->state.currentJob = self->spawn(job_actor, self->state.startGRU, self->state.numGRU, + self->state.configPath, self->state.outputStrucSize, self); + self->state.numGRU = 0; + } +} +} // end namespace diff --git a/build/source/actors/summa_actor/summa_client.cpp b/build/source/actors/summa_actor/summa_client.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6df57bbda5862fa1cba05e5162169793a86ee813 --- /dev/null +++ b/build/source/actors/summa_actor/summa_client.cpp @@ -0,0 +1,110 @@ +#include "caf/all.hpp" +#include "caf/io/all.hpp" + +#include "summa_client.hpp" +#include "summa_actor.hpp" +#include "message_atoms.hpp" +#include "batch_manager.hpp" +#include <optional> +#include <unistd.h> +#include <limits.h> + + +namespace caf { + +behavior summa_client(stateful_actor<summa_client_state>* self, std::optional<std::string> config_path) { + self->state.config_path = config_path; + + self->set_down_handler([=](const down_msg& dm){ + if(dm.source == self->state.current_server) { + aout(self) << "*** Lost Connection to Server" << std::endl; + self->state.current_server = nullptr; + self->become(unconnected(self)); + } + }); + return unconnected(self); +} +/** + * Attempt to connect to the server + */ +behavior unconnected(stateful_actor<summa_client_state>* self) { + return { + [=] (connect_atom, const std::string& host, uint16_t port) { + connecting(self, host, port); + }, + }; +} + +void connecting(stateful_actor<summa_client_state>* self, const std::string& host, uint16_t port) { + self->state.current_server = nullptr; + + auto mm = self->system().middleman().actor_handle(); + self->request(mm, infinite, connect_atom_v, host, port) + .await( + [=](const node_id&, strong_actor_ptr serv, + const std::set<std::string>& ifs) { + if (!serv) { + aout(self) << R"(*** no server found at ")" << host << R"(":)" << port + << std::endl; + return; + } + if (!ifs.empty()) { + aout(self) << R"(*** typed actor found at ")" << host << R"(":)" + << port << ", but expected an untyped actor " << std::endl; + return; + } + aout(self) << "*** successfully connected to server" << std::endl; + self->state.current_server = serv; + auto hdl = actor_cast<actor>(serv); + self->monitor(hdl); + self->become(running(self, hdl)); + }, + [=](const error& err) { + aout(self) << R"(*** cannot connect to ")" << host << R"(":)" << port + << " => " << to_string(err) << std::endl; + self->become(unconnected(self)); + }); +} + +behavior running(stateful_actor<summa_client_state>* self, const actor& server_actor) { + char host[HOST_NAME_MAX]; + aout(self) << "Client Has Started Successfully" << std::endl; + gethostname(host, HOST_NAME_MAX); + self->state.hostname = host; + + self->send(server_actor, connect_to_server_v, self, self->state.hostname); + return { + [=](batch, int client_id, int batch_id, int start_hru, int num_hru, std::string config_path) { + aout(self) << "\nReceived batch to compute" << "\n"; + aout(self) << "BatchID = " << batch_id << "\n"; + aout(self) << "Start HRU = " << start_hru << "\n"; + aout(self) << "Num HRU = " << num_hru << "\n"; + aout(self) << "Config Path = " << config_path << "\n"; + self->state.client_id = client_id; + self->state.batch_id = batch_id; + + + self->state.summa_actor_ref = self->spawn(summa_actor, + start_hru, + num_hru, + self->state.config_path.value_or(config_path), + self); + + + + }, + + [=](done_batch, double total_duration, double total_read_duration, double total_write_duration) { + aout(self) << "summa_actor has finished, sending message to the server for another batch\n"; + self->send(server_actor, done_batch_v, self, self->state.client_id, self->state.batch_id, + total_duration, total_read_duration, total_write_duration); + }, + + [=](time_to_exit) { + aout(self) << "Client Exiting\n"; + self->quit(); + } + + }; +} +} \ No newline at end of file diff --git a/build/source/actors/summa_actor/summa_server.cpp b/build/source/actors/summa_actor/summa_server.cpp new file mode 100644 index 0000000000000000000000000000000000000000..51c6d1c1e4cc41a84d0c6587fd1f73da55194c50 --- /dev/null +++ b/build/source/actors/summa_actor/summa_server.cpp @@ -0,0 +1,180 @@ +#include "caf/all.hpp" +#include "caf/io/all.hpp" +#include <string> +#include "batch_manager.hpp" +#include "summa_server.hpp" +#include "message_atoms.hpp" +#include "global.hpp" +#include <optional> + + +namespace caf { + +behavior summa_server(stateful_actor<summa_server_state>* self, std::string config_path) { + aout(self) << "Summa Server has Started \n"; + self->state.config_path = config_path; + // std::string returnType; + // getSettingsTest(std::vector<std::string> {"test", "test2"} ,returnType); + + // --------------------------Initalize Settings -------------------------- + self->state.total_hru_count = getSettings(self->state.config_path, "SimulationSettings", "total_hru_count", + self->state.total_hru_count).value_or(-1); + if (self->state.total_hru_count == -1) { + aout(self) << "ERROR: With total_hru_count - CHECK Summa_Actors_Settings.json\n"; + } + self->state.num_hru_per_batch = getSettings(self->state.config_path, "SimulationSettings", "num_hru_per_batch", + self->state.num_hru_per_batch).value_or(-1); + if (self->state.num_hru_per_batch == -1) { + aout(self) << "ERROR: With num_hru_per_batch - CHECK Summa_Actors_Settings.json\n"; + } + // --------------------------Initalize Settings -------------------------- + + // -------------------------- Initalize CSV ------------------------------ + std::ofstream csv_output; + self->state.csv_output_name = "Batch_Results.csv"; + csv_output.open(self->state.csv_output_name, std::ios_base::out); + csv_output << + "Batch_ID," << + "Start_HRU," << + "Num_HRU," << + "Hostname," << + "Run_Time," << + "Read_Time," << + "Write_Time,"<< + "Status\n"; + csv_output.close(); + // -------------------------- Initalize CSV ------------------------------ + + // -------------------------- Assemble Batches --------------------------- + aout(self) << "Assembling HRUs into Batches\n"; + if (assembleBatches(self) == -1) { + aout(self) << "ERROR: assembleBatches\n"; + } else { + aout(self) << "HRU Batches Assembled, Ready For Clients to Connect \n"; + + for (std::vector<int>::size_type i = 0; i < self->state.batch_list.size(); i++) { + self->state.batch_list[i].printBatchInfo(); + } + } + // -------------------------- Assemble Batches --------------------------- + + return { + [=](connect_to_server, actor client, std::string hostname) { + // Client is connecting - Add it to our client list and assign it a batch + aout(self) << "Actor trying to connect with hostname " << hostname << "\n"; + int client_id = self->state.client_list.size(); // So we can lookup the client in O(1) time + self->state.client_list.push_back(Client(client_id, client, hostname)); + + std::optional<int> batch_id = getUnsolvedBatchID(self); + if (batch_id.has_value()) { + // update the batch in the batch list with the host and actor_ref + self->state.batch_list[batch_id.value()].assignedBatch(self->state.client_list[client_id].getHostname(), client); + + int start_hru = self->state.batch_list[batch_id.value()].getStartHRU(); + int num_hru = self->state.batch_list[batch_id.value()].getNumHRU(); + + self->send(client, + batch_v, + client_id, + batch_id.value(), + start_hru, + num_hru, + self->state.config_path); + + } else { + + aout(self) << "We Are Done - Telling Clients to exit \n"; + for (std::vector<int>::size_type i = 0; i < self->state.client_list.size(); i++) { + self->send(self->state.client_list[i].getActor(), time_to_exit_v); + } + self->quit(); + return; + } + }, + + [=](done_batch, actor client, int client_id, int batch_id, double total_duration, + double total_read_duration, double total_write_duration) { + + self->state.batch_list[batch_id].solvedBatch(total_duration, total_read_duration, total_write_duration); + self->state.batch_list[batch_id].writeBatchToFile(self->state.csv_output_name); + self->state.batches_solved++; + self->state.batches_remaining = self->state.batch_list.size() - self->state.batches_solved; + + aout(self) << "\n****************************************\n"; + aout(self) << "Client finished batch: " << batch_id << "\n"; + aout(self) << "Client hostname = " << self->state.client_list[client_id].getHostname() << "\n"; + aout(self) << "Total Batch Duration = " << total_duration << "\n"; + aout(self) << "Total Batch Read Duration = " << total_read_duration << "\n"; + aout(self) << "Total Batch Write Duration = " << total_write_duration << "\n"; + aout(self) << "Batches Solved = " << self->state.batches_solved << "\n"; + aout(self) << "Batches Remaining = " << self->state.batches_remaining << "\n"; + aout(self) << "****************************************\n"; + + // Find a new batch + std::optional<int> new_batch_id = getUnsolvedBatchID(self); + if (new_batch_id.has_value()) { + // update the batch in the batch list with the host and actor_ref + self->state.batch_list[new_batch_id.value()].assignedBatch(self->state.client_list[client_id].getHostname(), client); + + int start_hru = self->state.batch_list[new_batch_id.value()].getStartHRU(); + int num_hru = self->state.batch_list[new_batch_id.value()].getNumHRU(); + + self->send(client, + batch_v, + client_id, + new_batch_id.value(), + start_hru, + num_hru, + self->state.config_path); + + } else { + // We found no batch this means all batches are assigned + if (self->state.batches_remaining == 0) { + aout(self) << "All Batches Solved -- Telling Clients To Exit\n"; + for (std::vector<int>::size_type i = 0; i < self->state.client_list.size(); i++) { + self->send(self->state.client_list[i].getActor(), time_to_exit_v); + } + aout(self) << "\nSUMMA_SERVER -- EXITING\n"; + self->quit(); + } else { + aout(self) << "No Batches left to compute -- letting client stay connected in case batch fails\n"; + } + } + } + }; +} + + +int assembleBatches(stateful_actor<summa_server_state>* self) { + int remaining_hru_to_batch = self->state.total_hru_count; + int count_index = 0; // this is like the offset for slurm bash scripts + int start_hru = 1; + + while(remaining_hru_to_batch > 0) { + if (self->state.num_hru_per_batch > remaining_hru_to_batch) { + self->state.batch_list.push_back(Batch(count_index, start_hru, + remaining_hru_to_batch)); + remaining_hru_to_batch = 0; + } else { + self->state.batch_list.push_back(Batch(count_index, start_hru, + self->state.num_hru_per_batch)); + + remaining_hru_to_batch -= self->state.num_hru_per_batch; + start_hru += self->state.num_hru_per_batch; + count_index += 1; + } + } + return 0; +} + +std::optional<int> getUnsolvedBatchID(stateful_actor<summa_server_state>* self) { + // Find the first unassigned batch + for (std::vector<int>::size_type i = 0; i < self->state.batch_list.size(); i++) { + if (self->state.batch_list[i].getBatchStatus() == unassigned) { + return i; + } + } + return {}; +} + +} // end namespace diff --git a/build/source/driver/SummaActors_modelRun.f90 b/build/source/driver/SummaActors_modelRun.f90 index 7aaba25108d23c91e700bb7189f186651304cb49..3310197b9d4d11d891122068989d35fb0189b288 100755 --- a/build/source/driver/SummaActors_modelRun.f90 +++ b/build/source/driver/SummaActors_modelRun.f90 @@ -213,7 +213,9 @@ contains ! initialize runoff variables bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) = 0._dp ! surface runoff (m s-1) + bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) = 0._dp bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1) = 0._dp ! outflow from all "outlet" HRUs (those with no downstream HRU) + bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = 0._dp ! initialize baseflow variables bvarStruct%var(iLookBVAR%basin__AquiferRecharge)%dat(1) = 0._dp ! recharge to the aquifer (m s-1) @@ -343,20 +345,28 @@ contains + fluxStruct%var(iLookFLUX%scalarAquiferBaseflow)%dat(1) * fracHRU end if + ! perform the routing + associate(totalArea => bvarStruct%var(iLookBVAR%basin__totalArea)%dat(1) ) + ! compute water balance for the basin aquifer if(model_decisions(iLookDECISIONS%spatial_gw)%iDecision == singleBasin)then message=trim(message)//'multi_driver/bigBucket groundwater code not transferred from old code base yet' err=20; return end if - ! perform the routing - associate(totalArea => bvarStruct%var(iLookBVAR%basin__totalArea)%dat(1) ) + ! calculate total runoff depending on whether aquifer is connected + if(model_decisions(iLookDECISIONS%groundwatr)%iDecision == bigBucket) then + ! aquifer + bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) + bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1)/totalArea + bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1) + else + ! no aquifer + bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) + bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1)/totalArea + bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) + endif + call qOverland(& ! input - model_decisions(iLookDECISIONS%subRouting)%iDecision, & ! intent(in): index for routing method - bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1), & ! intent(in): surface runoff (m s-1) - bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1)/totalArea, & ! intent(in): outflow from all "outlet" HRUs (those with no downstream HRU) - bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1), & ! intent(in): baseflow from the aquifer (m s-1) + model_decisions(iLookDECISIONS%subRouting)%iDecision, & ! intent(in): index for routing method + bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1), & ! intent(in): total runoff to the channel from all active components (m s-1) bvarStruct%var(iLookBVAR%routingFractionFuture)%dat, & ! intent(in): fraction of runoff in future time steps (m s-1) bvarStruct%var(iLookBVAR%routingRunoffFuture)%dat, & ! intent(in): runoff in future time steps (m s-1) ! output diff --git a/build/source/driver/summaActors_init.f90 b/build/source/driver/summaActors_init.f90 index 99b6872843fd39c9640cf8d3145575e75432cb7c..c95de9daa4c37fd1eaa4fe1adc5378f7bea7de71 100755 --- a/build/source/driver/summaActors_init.f90 +++ b/build/source/driver/summaActors_init.f90 @@ -1,5 +1,6 @@ -module summa4chm_init +module summaActors_init ! used to declare and allocate summa data structures and initialize model state to known values +USE,intrinsic :: iso_c_binding USE nrtype ! variable types, etc. USE data_types,only:& ! no spatial dimension @@ -33,44 +34,44 @@ USE var_lookup,only:maxVarFreq ! # of available ou ! safety: set private unless specified otherwise implicit none private -public::summa4chm_initialize +public::summaActors_initialize contains ! used to declare and allocate summa data structures and initialize model state to known values - subroutine summa4chm_initialize(& + subroutine summaActors_initialize(& indxGRU, & ! Index of HRU's GRU parent num_steps, & ! statistics structures - forcStat, & ! model forcing data - progStat, & ! model prognostic (state) variables - diagStat, & ! model diagnostic variables - fluxStat, & ! model fluxes - indxStat, & ! model indices - bvarStat, & ! basin-average variables + handle_forcStat, & ! model forcing data + handle_progStat, & ! model prognostic (state) variables + handle_diagStat, & ! model diagnostic variables + handle_fluxStat, & ! model fluxes + handle_indxStat, & ! model indices + handle_bvarStat, & ! basin-average variables ! primary data structures (scalars) - timeStruct, & ! model time data - forcStruct, & ! model forcing data - attrStruct, & ! local attributes for each HRU - typeStruct, & ! local classification of soil veg etc. for each HRU - idStruct, & ! + handle_timeStruct, & ! model time data + handle_forcStruct, & ! model forcing data + handle_attrStruct, & ! local attributes for each HRU + handle_typeStruct, & ! local classification of soil veg etc. for each HRU + handle_idStruct, & ! ! primary data structures (variable length vectors) - indxStruct, & ! model indices - mparStruct, & ! model parameters - progStruct, & ! model prognostic (state) variables - diagStruct, & ! model diagnostic variables - fluxStruct, & ! model fluxes + handle_indxStruct, & ! model indices + handle_mparStruct, & ! model parameters + handle_progStruct, & ! model prognostic (state) variables + handle_diagStruct, & ! model diagnostic variables + handle_fluxStruct, & ! model fluxes ! basin-average structures - bparStruct, & ! basin-average parameters - bvarStruct, & ! basin-average variables + handle_bparStruct, & ! basin-average parameters + handle_bvarStruct, & ! basin-average variables ! ancillary data structures - dparStruct, & ! default model parameters + handle_dparStruct, & ! default model parameters ! local HRU data structures - startTime_hru, & ! start time for the model simulation - finishTime_hru, & ! end time for the model simulation - refTime_hru, & ! reference time for the model simulation - oldTime_hru, & ! time from previous step + handle_startTime, & ! start time for the model simulation + handle_finshTime, & ! end time for the model simulation + handle_refTime, & ! reference time for the model simulation + handle_oldTime, & ! time for the previous model time step ! miscellaneous variables - err, message) + err) bind(C,name='summaActors_initialize') ! --------------------------------------------------------------------------------------- ! * desired modules ! --------------------------------------------------------------------------------------- @@ -91,51 +92,111 @@ contains USE globalData,only:numtim USE var_lookup,only:maxvarFreq ! maximum number of output files USE globalData,only:startTime,finshTime,refTime,oldTime + + implicit none + ! --------------------------------------------------------------------------------------- - ! * variables + ! * variables from C++ ! --------------------------------------------------------------------------------------- - implicit none - ! dummy variables - integer(i4b),intent(in) :: indxGRU ! indx of the parent GRU - integer(i4b),intent(out) :: num_steps ! number of steps in model, local to the HRU - ! statistics structures - type(var_dlength),intent(inout) :: forcStat ! model forcing data - type(var_dlength),intent(inout) :: progStat ! model prognostic (state) variables - type(var_dlength),intent(inout) :: diagStat ! model diagnostic variables - type(var_dlength),intent(inout) :: fluxStat ! model fluxes - type(var_dlength),intent(inout) :: indxStat ! model indices - type(var_dlength),intent(inout) :: bvarStat ! basin-average variabl + integer(c_int),intent(in) :: indxGRU ! indx of the parent GRU + integer(c_int),intent(out) :: num_steps ! number of steps in model, local to the HRU + ! statistics structures + type(c_ptr), intent(in), value :: handle_forcStat ! model forcing data + type(c_ptr), intent(in), value :: handle_progStat ! model prognostic (state) variables + type(c_ptr), intent(in), value :: handle_diagStat ! model diagnostic variables + type(c_ptr), intent(in), value :: handle_fluxStat ! model fluxes + type(c_ptr), intent(in), value :: handle_indxStat ! model indices + type(c_ptr), intent(in), value :: handle_bvarStat ! basin-average variables ! primary data structures (scalars) - type(var_i),intent(inout) :: timeStruct ! model time data - type(var_d),intent(inout) :: forcStruct ! model forcing data - type(var_d),intent(inout) :: attrStruct ! local attributes for each HRU - type(var_i),intent(inout) :: typeStruct ! local classification of soil veg etc. for each HRU - type(var_i8),intent(inout) :: idStruct ! + type(c_ptr), intent(in), value :: handle_timeStruct ! model time data + type(c_ptr), intent(in), value :: handle_forcStruct ! model forcing data + type(c_ptr), intent(in), value :: handle_attrStruct ! local attributes for each HRU + type(c_ptr), intent(in), value :: handle_typeStruct ! local classification of soil veg etc. for each HRU + type(c_ptr), intent(in), value :: handle_idStruct ! ! primary data structures (variable length vectors) - type(var_ilength),intent(inout) :: indxStruct ! model indices - type(var_dlength),intent(inout) :: mparStruct ! model parameters - type(var_dlength),intent(inout) :: progStruct ! model prognostic (state) variables - type(var_dlength),intent(inout) :: diagStruct ! model diagnostic variables - type(var_dlength),intent(inout) :: fluxStruct ! model fluxes + type(c_ptr), intent(in), value :: handle_indxStruct ! model indices + type(c_ptr), intent(in), value :: handle_mparStruct ! model parameters + type(c_ptr), intent(in), value :: handle_progStruct ! model prognostic (state) variables + type(c_ptr), intent(in), value :: handle_diagStruct ! model diagnostic variables + type(c_ptr), intent(in), value :: handle_fluxStruct ! model fluxes ! basin-average structures - type(var_d),intent(inout) :: bparStruct ! basin-average parameters - type(var_dlength),intent(inout) :: bvarStruct ! basin-average variables + type(c_ptr), intent(in), value :: handle_bparStruct ! basin-average parameters + type(c_ptr), intent(in), value :: handle_bvarStruct ! basin-average variables ! ancillary data structures - type(var_d),intent(inout) :: dparStruct ! default model parameters + type(c_ptr), intent(in), value :: handle_dparStruct ! default model parameters + ! local hru data structures + type(c_ptr), intent(in), value :: handle_startTime ! start time for the model simulation + type(c_ptr), intent(in), value :: handle_finshTime ! end time for the model simulation + type(c_ptr), intent(in), value :: handle_refTime ! reference time for the model simulation + type(c_ptr), intent(in), value :: handle_oldTime ! time for the previous model time step + integer(c_int),intent(inout) :: err + ! --------------------------------------------------------------------------------------- + ! * Fortran Variables For Conversion + ! --------------------------------------------------------------------------------------- + type(var_dlength),pointer :: forcStat ! model forcing data + type(var_dlength),pointer :: progStat ! model prognostic (state) variables + type(var_dlength),pointer :: diagStat ! model diagnostic variables + type(var_dlength),pointer :: fluxStat ! model fluxes + type(var_dlength),pointer :: indxStat ! model indices + type(var_dlength),pointer :: bvarStat ! basin-average variabl + ! primary data structures (scalars) + type(var_i),pointer :: timeStruct ! model time data + type(var_d),pointer :: forcStruct ! model forcing data + type(var_d),pointer :: attrStruct ! local attributes for each HRU + type(var_i),pointer :: typeStruct ! local classification of soil veg etc. for each HRU + type(var_i8),pointer :: idStruct ! + ! primary data structures (variable length vectors) + type(var_ilength),pointer :: indxStruct ! model indices + type(var_dlength),pointer :: mparStruct ! model parameters + type(var_dlength),pointer :: progStruct ! model prognostic (state) variables + type(var_dlength),pointer :: diagStruct ! model diagnostic variables + type(var_dlength),pointer :: fluxStruct ! model fluxes + ! basin-average structures + type(var_d),pointer :: bparStruct ! basin-average parameters + type(var_dlength),pointer :: bvarStruct ! basin-average variables + ! ancillary data structures + type(var_d),pointer :: dparStruct ! default model parameters ! local HRU data structures - type(var_i),intent(inout) :: startTime_hru ! start time for the model simulation - type(var_i),intent(inout) :: finishTime_hru ! end time for the model simulation - type(var_i),intent(inout) :: refTime_hru ! reference time for the model simulation - type(var_i),intent(inout) :: oldTime_hru ! time from previous step - ! misc variables - integer(i4b),intent(out) :: err ! error code - character(*),intent(out) :: message ! error message - ! local variables + type(var_i),pointer :: startTime_hru ! start time for the model simulation + type(var_i),pointer :: finishTime_hru ! end time for the model simulation + type(var_i),pointer :: refTime_hru ! reference time for the model simulation + type(var_i),pointer :: oldTime_hru ! time from previous step + ! --------------------------------------------------------------------------------------- + ! * Local Subroutine Variables + ! --------------------------------------------------------------------------------------- + character(LEN=256) :: message ! error message character(LEN=256) :: cmessage ! error message of downwind routine integer(i4b) :: iStruct ! looping variables + ! --------------------------------------------------------------------------------------- + ! * Convert From C++ to Fortran + ! --------------------------------------------------------------------------------------- + call c_f_pointer(handle_forcStat, forcStat) + call c_f_pointer(handle_progStat, progStat) + call c_f_pointer(handle_diagStat, diagStat) + call c_f_pointer(handle_fluxStat, fluxStat) + call c_f_pointer(handle_indxStat, indxStat) + call c_f_pointer(handle_bvarStat, bvarStat) + call c_f_pointer(handle_timeStruct, timeStruct) + call c_f_pointer(handle_forcStruct, forcStruct) + call c_f_pointer(handle_attrStruct, attrStruct) + call c_f_pointer(handle_typeStruct, typeStruct) + call c_f_pointer(handle_idStruct, idStruct) + call c_f_pointer(handle_indxStruct, indxStruct) + call c_f_pointer(handle_mparStruct, mparStruct) + call c_f_pointer(handle_progStruct, progStruct) + call c_f_pointer(handle_diagStruct, diagStruct) + call c_f_pointer(handle_fluxStruct, fluxStruct) + call c_f_pointer(handle_bparStruct, bparStruct) + call c_f_pointer(handle_bvarStruct, bvarStruct) + call c_f_pointer(handle_dparStruct, dparStruct) + call c_f_pointer(handle_startTime, startTime_hru) + call c_f_pointer(handle_finshTime, finishTime_hru) + call c_f_pointer(handle_refTime, refTime_hru) + call c_f_pointer(handle_oldTime, oldTime_hru) + ! --------------------------------------------------------------------------------------- ! initialize error control - err=0; message='summa4chm_initialize/' + err=0; message='summaActors_initialize/' ! initialize the start of the initialization call date_and_time(values=startInit) @@ -237,6 +298,6 @@ contains ! end association to info in data structures end associate - end subroutine summa4chm_initialize + end subroutine summaActors_initialize -end module summa4chm_init +end module summaActors_init diff --git a/build/source/dshare/get_ixname.f90 b/build/source/dshare/get_ixname.f90 index 3e4c59ac6828f480dfcf4bef9e73879cb86e563a..fbf9c4e3e37d3ac67a9c823f8e57f243f2379990 100755 --- a/build/source/dshare/get_ixname.f90 +++ b/build/source/dshare/get_ixname.f90 @@ -888,6 +888,7 @@ contains case('basin__AquiferRecharge' ); get_ixbvar = iLookBVAR%basin__AquiferRecharge ! recharge to the aquifer (m s-1) case('basin__AquiferBaseflow' ); get_ixbvar = iLookBVAR%basin__AquiferBaseflow ! baseflow from the aquifer (m s-1) case('basin__AquiferTranspire' ); get_ixbvar = iLookBVAR%basin__AquiferTranspire ! transpiration from the aquifer (m s-1) + case('basin__TotalRunoff' ); get_ixbvar = iLookBVAR%basin__TotalRunoff ! total runoff to channel from all active components (m s-1) case('basin__SoilDrainage' ); get_ixbvar = iLookBVAR%basin__SoilDrainage ! variables to compute runoff case('routingRunoffFuture' ); get_ixbvar = iLookBVAR%routingRunoffFuture ! runoff in future time steps (m s-1) diff --git a/build/source/dshare/popMetadat.f90 b/build/source/dshare/popMetadat.f90 index cec88e3ff6837115d4fa9834452595d86dd3de2a..4c2b371e64ea8dcb3f5294d6966f10242bc75e52 100755 --- a/build/source/dshare/popMetadat.f90 +++ b/build/source/dshare/popMetadat.f90 @@ -588,6 +588,7 @@ subroutine popMetadat(err,message) bvar_meta(iLookBVAR%basin__AquiferRecharge) = var_info('basin__AquiferRecharge' , 'recharge to the aquifer' , 'm s-1' , get_ixVarType('scalarv'), iMissVec, iMissVec, .false.) bvar_meta(iLookBVAR%basin__AquiferBaseflow) = var_info('basin__AquiferBaseflow' , 'baseflow from the aquifer' , 'm s-1' , get_ixVarType('scalarv'), iMissVec, iMissVec, .false.) bvar_meta(iLookBVAR%basin__AquiferTranspire) = var_info('basin__AquiferTranspire', 'transpiration loss from the aquifer' , 'm s-1' , get_ixVarType('scalarv'), iMissVec, iMissVec, .false.) + bvar_meta(iLookBVAR%basin__TotalRunoff) = var_info('basin__TotalRunoff' , 'total runoff to channel from all active components' , 'm s-1' , get_ixVarType('scalarv'), iMissVec, iMissVec, .false.) bvar_meta(iLookBVAR%basin__SoilDrainage) = var_info('basin__SoilDrainage' , 'soil drainage' , 'm s-1' , get_ixVarType('scalarv'), iMissVec, iMissVec, .false.) bvar_meta(iLookBVAR%routingRunoffFuture) = var_info('routingRunoffFuture' , 'runoff in future time steps' , 'm s-1' , get_ixVarType('routing'), iMissVec, iMissVec, .false.) bvar_meta(iLookBVAR%routingFractionFuture) = var_info('routingFractionFuture' , 'fraction of runoff in future time steps' , '-' , get_ixVarType('routing'), iMissVec, iMissVec, .false.) diff --git a/build/source/dshare/var_lookup.f90 b/build/source/dshare/var_lookup.f90 index 8030472178a03b8f77b84973e099c1265695ab24..b1ae8c0ad725c0c80862e549b26dc1e118ac482d 100755 --- a/build/source/dshare/var_lookup.f90 +++ b/build/source/dshare/var_lookup.f90 @@ -705,6 +705,7 @@ MODULE var_lookup integer(i4b) :: basin__AquiferRecharge = integerMissing ! recharge to the aquifer (m s-1) integer(i4b) :: basin__AquiferBaseflow = integerMissing ! baseflow from the aquifer (m s-1) integer(i4b) :: basin__AquiferTranspire = integerMissing ! transpiration from the aquifer (m s-1) + integer(i4b) :: basin__TotalRunoff = integerMissing ! total runoff to channel from all active components (m s-1) integer(i4b) :: basin__SoilDrainage = integerMissing ! define variables for runoff integer(i4b) :: routingRunoffFuture = integerMissing ! runoff in future time steps (m s-1) @@ -843,7 +844,7 @@ MODULE var_lookup ! named variables: basin-average variables type(iLook_bvar), public,parameter :: iLookBVAR =ilook_bvar ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,& - 11, 12) + 11, 12, 13) ! named variables in varibale type structure type(iLook_varType), public,parameter :: iLookVarType =ilook_varType ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,& diff --git a/build/source/engine/ffile_info.f90 b/build/source/engine/ffile_info.f90 index 1dcaccfef8020942adeb0b5dc45eb83941f14f8a..32ff3292667bf16f4cefa4a6e391c603b96aacf2 100755 --- a/build/source/engine/ffile_info.f90 +++ b/build/source/engine/ffile_info.f90 @@ -23,7 +23,6 @@ USE nrtype USE netcdf USE data_types USE globalData,only:integerMissing -USE globalData,only:ixHRUfile_min,ixHRUfile_max implicit none private public::ffile_info diff --git a/build/source/engine/mDecisions.f90 b/build/source/engine/mDecisions.f90 index cc885c4cf1d6a75f7c3396c359612bccff87d85b..f04bd566f863bc2fba068e6566a5266339a28678 100755 --- a/build/source/engine/mDecisions.f90 +++ b/build/source/engine/mDecisions.f90 @@ -289,7 +289,6 @@ subroutine mDecisions(numSteps,err,message) if(dJulianFinsh < dJulianStart)then; err=20; message=trim(message)//'end time of simulation occurs before start time'; return; end if ! initialize the old time vector (time from the previous time step) - ! oldTime%var(:) = startTime%var(:) ! compute the number of time steps numSteps = nint( (dJulianFinsh - dJulianStart)*secprday/data_step ) + 1 diff --git a/build/source/engine/qTimeDelay.f90 b/build/source/engine/qTimeDelay.f90 index 75cb75c0a5c382900d3faee3eccc70a56a645b1f..abcec24dc110612071dbc6c3ea651379e4cbeb48 100755 --- a/build/source/engine/qTimeDelay.f90 +++ b/build/source/engine/qTimeDelay.f90 @@ -40,9 +40,7 @@ contains subroutine qOverland(& ! input ixRouting, & ! index for routing method - averageSurfaceRunoff, & ! surface runoff (m s-1) - averageSoilBaseflow, & ! baseflow from the soil profile (m s-1) - averageAquiferBaseflow,& ! baseflow from the aquifer (m s-1) + averageTotalRunoff, & ! total runoff to the channel from all active components (m s-1) fracFuture, & ! fraction of runoff in future time steps (m s-1) qFuture, & ! runoff in future time steps (m s-1) ! output @@ -52,9 +50,7 @@ contains implicit none ! input integer(i4b),intent(in) :: ixRouting ! index for routing method - real(dp),intent(in) :: averageSurfaceRunoff ! surface runoff (m s-1) - real(dp),intent(in) :: averageSoilBaseflow ! baseflow from the soil profile (m s-1) - real(dp),intent(in) :: averageAquiferBaseflow ! baseflow from the aquifer (m s-1) + real(dp),intent(in) :: averageTotalRunoff ! total runoff to the channel from all active components (m s-1)ß real(dp),intent(in) :: fracFuture(:) ! fraction of runoff in future time steps (m s-1) real(dp),intent(inout) :: qFuture(:) ! runoff in future time steps (m s-1) ! output @@ -69,7 +65,7 @@ contains err=0; message='qOverland/' ! compute instantaneous runoff (m s-1) - averageInstantRunoff = averageSurfaceRunoff + averageAquiferBaseflow + averageSoilBaseflow + averageInstantRunoff = averageTotalRunoff ! compute routed runoff (m s-1) select case(ixRouting) ! (select option for sub-grid routing) diff --git a/build/source/netcdf/def_output.f90 b/build/source/netcdf/def_output.f90 index ed16b2391798af11577dc678b216c24e5cb2a0e5..59a6cae5264e43e22e8643c23ec79a2690f82b06 100755 --- a/build/source/netcdf/def_output.f90 +++ b/build/source/netcdf/def_output.f90 @@ -19,6 +19,8 @@ ! along with this program. If not, see <http://www.gnu.org/licenses/>. module def_output_module + +USE, intrinsic :: iso_c_binding USE data_types,only:var_i USE netcdf USE netcdf_util_module,only:netcdf_err ! netcdf error handling function @@ -70,119 +72,146 @@ contains ! ********************************************************************************************************** ! public subroutine def_output: define model output file ! ********************************************************************************************************** - subroutine def_output(summaVersion,buildTime,gitBranch,gitHash,nGRU,nHRU,nSoil,infile,ncid_c,err,message) - USE globalData,only:structInfo ! information on the data structures - USE globalData,only:forc_meta,attr_meta,type_meta ! metaData structures - USE globalData,only:prog_meta,diag_meta,flux_meta,deriv_meta ! metaData structures - USE globalData,only:mpar_meta,indx_meta ! metaData structures - USE globalData,only:bpar_meta,bvar_meta,time_meta ! metaData structures - USE globalData,only:model_decisions ! model decisions - USE globalData,only:outFreq ! output frequencies - USE globalData,only:fname - ! USE globalData,only:ncid - USE var_lookup,only:maxVarFreq ! # of available output frequencies - USE get_ixname_module,only:get_freqName ! get name of frequency from frequency index - - ! declare dummy variables - character(*),intent(in) :: summaVersion ! SUMMA version - character(*),intent(in) :: buildTime ! build time - character(*),intent(in) :: gitBranch ! git branch - character(*),intent(in) :: gitHash ! git hash - integer(i4b),intent(in) :: nGRU ! number of GRUs - integer(i4b),intent(in) :: nHRU ! number of HRUs - integer(i4b),intent(in) :: nSoil ! number of soil layers in the first HRU (used to define fixed length dimensions) - character(*),intent(in) :: infile ! file suffix - type(var_i),intent(inout) :: ncid_c ! id of output file - integer(i4b),intent(out) :: err ! error code - character(*),intent(out) :: message ! error message - ! local variables - integer(i4b) :: ivar ! loop through model decisions - integer(i4b) :: iFreq ! loop through output frequencies - integer(i4b) :: iStruct ! loop through structure types - character(len=32) :: fstring ! string to hold model output freuqnecy - character(len=256) :: cmessage ! temporary error message - - ! initialize errors - err=0; message="def_output/" - - ! close files if already open - do iFreq=1,maxvarFreq - if (ncid_c%var(iFreq)/=integerMissing) then - call nc_file_close(ncid_c%var(iFreq),err,cmessage) - if(err/=0)then; message=trim(message)//trim(cmessage); return; end if +subroutine def_output(handle_ncid,startGRU,nGRU,nHRU,err) bind(C, name='def_output') + USE globalData,only:structInfo ! information on the data structures + USE globalData,only:forc_meta,attr_meta,type_meta ! metaData structures + USE globalData,only:prog_meta,diag_meta,flux_meta,deriv_meta ! metaData structures + USE globalData,only:mpar_meta,indx_meta ! metaData structures + USE globalData,only:bpar_meta,bvar_meta,time_meta ! metaData structures + USE globalData,only:model_decisions ! model decisions + USE globalData,only:outFreq ! output frequencies + USE globalData,only:fname + ! Some global variabels required in the writing process + USE globalData,only:outputTimeStep + USE globalData,only:nHRUrun + USE globalData,only:nGRUrun + USE globalData,only:gru_struc + USE globalData,only:fileout + ! modules that are not globalData + USE var_lookup,only:maxVarFreq ! # of available output frequencies + USE get_ixname_module,only:get_freqName ! get name of frequency from frequency index + USE summaActors_FileManager,only:OUTPUT_PATH,OUTPUT_PREFIX ! define output file + + ! --------------------------------------------------------------------------------------- + ! * variables from C++ + ! --------------------------------------------------------------------------------------- + type(c_ptr),intent(in), value :: handle_ncid ! ncid of the output file + integer(c_int),intent(in) :: startGRU ! startGRU for the entire job (for file creation) + integer(c_int),intent(in) :: nGRU ! number of GRUs + integer(c_int),intent(in) :: nHRU ! number of HRUs + integer(c_int),intent(out) :: err ! error code + ! --------------------------------------------------------------------------------------- + ! * Fortran Variables For Conversion + ! --------------------------------------------------------------------------------------- + type(var_i),pointer :: ncid ! id of output file + ! --------------------------------------------------------------------------------------- + ! * Local Subroutine Variables + ! --------------------------------------------------------------------------------------- + character(len=256) :: message ! error message + integer(i4b) :: ivar ! loop through model decisions + integer(i4b) :: iFreq ! loop through output frequencies + integer(i4b) :: iStruct ! loop through structure types + character(len=32) :: fstring ! string to hold model output freuqnecy + character(len=256) :: cmessage ! temporary error message + integer(i4b) :: iGRU + character(LEN=256) :: startGRUString ! String Variable to convert startGRU + character(LEN=256) :: numGRUString ! String Varaible to convert numGRU + ! --------------------------------------------------------------------------------------- + ! * Convert From C++ to Fortran + ! --------------------------------------------------------------------------------------- + call c_f_pointer(handle_ncid, ncid) + + + ! initialize errors + err=0; message="def_output/" + + ! allocate space for the output file ID array + if (.not.allocated(ncid%var))then + allocate(ncid%var(maxVarFreq)) + ncid%var(:) = integerMissing endif - end do - - ! initialize netcdf file id - - ! ncid(:) = integerMissing - -! create initial file -! each file will have a master name with a frequency appended at the end: -! e.g., xxxxxxxxx_timestep.nc (for output at every model timestep) -! e.g., xxxxxxxxx_monthly.nc (for monthly model output) - do iFreq=1,maxvarFreq - ! skip frequencies that are not needed - - if(.not.outFreq(iFreq)) cycle - - ! create file - fstring = get_freqName(iFreq) - fname = trim(infile)//'_'//trim(fstring)//'.nc' - call ini_create(nGRU,nHRU,nSoil,trim(fname),ncid_c%var(iFreq),err,cmessage) - if(err/=0)then; message=trim(message)//trim(cmessage); return; end if -! print*,'Created output file: '//trim(fname) - - ! define SUMMA version - do iVar=1,4 - ! write attributes - if(iVar==1) call put_attrib(ncid_c%var(iFreq),'summaVersion', summaVersion, err, cmessage) ! SUMMA version - if(iVar==2) call put_attrib(ncid_c%var(iFreq),'buildTime' , buildTime , err, cmessage) ! build time - if(iVar==3) call put_attrib(ncid_c%var(iFreq),'gitBranch' , gitBranch , err, cmessage) ! git branch - if(iVar==4) call put_attrib(ncid_c%var(iFreq),'gitHash' , gitHash , err, cmessage) ! git hash - ! check errors - if(err/=0)then; message=trim(message)//trim(cmessage); return; end if - end do - ! define model decisions - do iVar = 1,size(model_decisions) - if(model_decisions(iVar)%iDecision.ne.integerMissing)then - call put_attrib(ncid_c%var(iFreq),model_decisions(iVar)%cOption,model_decisions(iVar)%cDecision,err,cmessage) - if(err/=0)then; message=trim(message)//trim(cmessage); return; end if - end if - end do - - ! define variables - do iStruct = 1,size(structInfo) - select case (trim(structInfo(iStruct)%structName)) - case('attr' ); call def_variab(ncid_c%var(iFreq),iFreq,needHRU, noTime,attr_meta, outputPrecision, err,cmessage) ! local attributes HRU - case('type' ); call def_variab(ncid_c%var(iFreq),iFreq,needHRU, noTime,type_meta, nf90_int, err,cmessage) ! local classification - case('mpar' ); call def_variab(ncid_c%var(iFreq),iFreq,needHRU, noTime,mpar_meta, outputPrecision, err,cmessage) ! model parameters - case('bpar' ); call def_variab(ncid_c%var(iFreq),iFreq,needGRU, noTime,bpar_meta, outputPrecision, err,cmessage) ! basin-average param - case('indx' ); call def_variab(ncid_c%var(iFreq),iFreq,needHRU,needTime,indx_meta, nf90_int, err,cmessage) ! model variables - case('deriv'); call def_variab(ncid_c%var(iFreq),iFreq,needHRU,needTime,deriv_meta,outputPrecision, err,cmessage) ! model derivatives - case('time' ); call def_variab(ncid_c%var(iFreq),iFreq, noHRU,needTime,time_meta, nf90_int, err,cmessage) ! model derivatives - case('forc' ); call def_variab(ncid_c%var(iFreq),iFreq,needHRU,needTime,forc_meta, outputPrecision, err,cmessage) ! model forcing data - case('prog' ); call def_variab(ncid_c%var(iFreq),iFreq,needHRU,needTime,prog_meta, outputPrecision, err,cmessage) ! model prognostics - case('diag' ); call def_variab(ncid_c%var(iFreq),iFreq,needHRU,needTime,diag_meta, outputPrecision, err,cmessage) ! model diagnostic variables - case('flux' ); call def_variab(ncid_c%var(iFreq),iFreq,needHRU,needTime,flux_meta, outputPrecision, err,cmessage) ! model fluxes - case('bvar' ); call def_variab(ncid_c%var(iFreq),iFreq,needGRU,needTime,bvar_meta, outputPrecision, err,cmessage) ! basin-average variables - case('id' ); cycle ! ids -- see write_hru_info() - case default; err=20; message=trim(message)//'unable to identify lookup structure'; - end select - ! error handling - if(err/=0)then;err=20;message=trim(message)//trim(cmessage)//'[structure = '//trim(structInfo(iStruct)%structName);return;end if - end do ! iStruct - ! write HRU dimension and ID for each output file - call write_hru_info(ncid_c%var(iFreq), err, cmessage); if(err/=0) then; message=trim(message)//trim(cmessage); return; end if + ! initalize outputTimeStep - keeps track of the step the GRU is writing for + if (.not.allocated(outputTimeStep))then + allocate(outputTimeStep(nGRU)) + do iGRU = 1, nGRU + allocate(outputTimeStep(iGRU)%dat(maxVarFreq)) + outputTimeStep(iGRU)%dat(:) = 1 + end do + end if - end do + ! Set the global variable for the number of HRU and GRU in run + nGRUrun = nGRU + nHRUrun = nGRU + + ! create the name of the new files + write(unit=startGRUString,fmt=*)startGRU + write(unit=numGRUString,fmt=*) nGRU + fileout = trim(OUTPUT_PATH)//trim(OUTPUT_PREFIX)//"GRU"& + //trim(adjustl(startGRUString))//"-"//trim(adjustl(numGRUString)) + + ! close files if already open + do iFreq=1,maxvarFreq + if (ncid%var(iFreq)/=integerMissing) then + call nc_file_close(ncid%var(iFreq),err,cmessage) + if(err/=0)then; message=trim(message)//trim(cmessage); return; end if + endif + end do + + ! create initial file + ! each file will have a master name with a frequency appended at the end: + ! e.g., xxxxxxxxx_timestep.nc (for output at every model timestep) + ! e.g., xxxxxxxxx_monthly.nc (for monthly model output) + do iFreq=1,maxvarFreq + ! skip frequencies that are not needed + + if(.not.outFreq(iFreq)) cycle + + ! create file + fstring = get_freqName(iFreq) + fname = trim(fileout)//'_'//trim(fstring)//'.nc' + call ini_create(nGRU,nHRU,gru_struc(1)%hruInfo(1)%nSoil,trim(fname),ncid%var(iFreq),err,cmessage) + if(err/=0)then; message=trim(message)//trim(cmessage); return; end if + + ! define model decisions + do iVar = 1,size(model_decisions) + if(model_decisions(iVar)%iDecision.ne.integerMissing)then + call put_attrib(ncid%var(iFreq),model_decisions(iVar)%cOption,model_decisions(iVar)%cDecision,err,cmessage) + if(err/=0)then; message=trim(message)//trim(cmessage); return; end if + end if + end do + + ! define variables + do iStruct = 1,size(structInfo) + select case (trim(structInfo(iStruct)%structName)) + case('attr' ); call def_variab(ncid%var(iFreq),iFreq,needHRU, noTime,attr_meta, outputPrecision, err,cmessage) ! local attributes HRU + case('type' ); call def_variab(ncid%var(iFreq),iFreq,needHRU, noTime,type_meta, nf90_int, err,cmessage) ! local classification + case('mpar' ); call def_variab(ncid%var(iFreq),iFreq,needHRU, noTime,mpar_meta, outputPrecision, err,cmessage) ! model parameters + case('bpar' ); call def_variab(ncid%var(iFreq),iFreq,needGRU, noTime,bpar_meta, outputPrecision, err,cmessage) ! basin-average param + case('indx' ); call def_variab(ncid%var(iFreq),iFreq,needHRU,needTime,indx_meta, nf90_int, err,cmessage) ! model variables + case('deriv'); call def_variab(ncid%var(iFreq),iFreq,needHRU,needTime,deriv_meta,outputPrecision, err,cmessage) ! model derivatives + case('time' ); call def_variab(ncid%var(iFreq),iFreq, noHRU,needTime,time_meta, nf90_int, err,cmessage) ! model derivatives + case('forc' ); call def_variab(ncid%var(iFreq),iFreq,needHRU,needTime,forc_meta, outputPrecision, err,cmessage) ! model forcing data + case('prog' ); call def_variab(ncid%var(iFreq),iFreq,needHRU,needTime,prog_meta, outputPrecision, err,cmessage) ! model prognostics + case('diag' ); call def_variab(ncid%var(iFreq),iFreq,needHRU,needTime,diag_meta, outputPrecision, err,cmessage) ! model diagnostic variables + case('flux' ); call def_variab(ncid%var(iFreq),iFreq,needHRU,needTime,flux_meta, outputPrecision, err,cmessage) ! model fluxes + case('bvar' ); call def_variab(ncid%var(iFreq),iFreq,needGRU,needTime,bvar_meta, outputPrecision, err,cmessage) ! basin-average variables + case('id' ); cycle ! ids -- see write_hru_info() + case default; err=20; message=trim(message)//'unable to identify lookup structure'; + end select + ! error handling + if(err/=0)then;err=20;message=trim(message)//trim(cmessage)//'[structure = '//trim(structInfo(iStruct)%structName);return;end if + end do ! iStruct + ! write HRU dimension and ID for each output file + call write_hru_info(ncid%var(iFreq), err, cmessage); if(err/=0) then; message=trim(message)//trim(cmessage); return; end if + + end do end subroutine def_output - ! ********************************************************************************************************** - ! private subroutine ini_create: initial create - ! ********************************************************************************************************** - subroutine ini_create(nGRU,nHRU,nSoil,infile,ncid,err,message) +! ********************************************************************************************************** +! private subroutine ini_create: initial create +! ********************************************************************************************************** +subroutine ini_create(nGRU,nHRU,nSoil,infile,ncid,err,message) ! variables to define number of steps per file (total number of time steps, step length, etc.) USE multiconst,only:secprday ! number of seconds per day ! model decisions diff --git a/build/source/netcdf/outputStrucWrite.f90 b/build/source/netcdf/outputStrucWrite.f90 index ce67959febff75b78f30c4aa003ed7f9d765cf64..58f277e3d805167f9ab837a37aeeb687db2b3a2d 100755 --- a/build/source/netcdf/outputStrucWrite.f90 +++ b/build/source/netcdf/outputStrucWrite.f90 @@ -100,7 +100,7 @@ contains integer(i4b) :: iVar ! loop through variables ! initialize error control - err=0;message="writeParm/" + err=0;message="outputStrucWrite.f90-writeParm/" ! loop through local column model parameters do iVar = 1,size(meta) @@ -194,7 +194,7 @@ subroutine writeData(indxGRU,indxHRU,iStep,structName,finalizeStats, & integer(i4b),parameter :: ixInteger=1001 ! named variable for integer integer(i4b),parameter :: ixReal=1002 ! named variable for real ! initialize error control - err=0;message="writeData/" + err=0;message="outputStrucWrite.f90-writeData/" ! loop through output frequencies do iFreq=1,maxvarFreq @@ -240,6 +240,8 @@ subroutine writeData(indxGRU,indxHRU,iStep,structName,finalizeStats, & outputStructure(1)%diagStat(1)%gru(indxGRU)%hru(indxHRU)%var(map(iVar))%tim(iStep)%dat(iFreq) = stat%var(map(iVar))%dat(iFreq) case('flux') outputStructure(1)%fluxStat(1)%gru(indxGRU)%hru(indxHRU)%var(map(iVar))%tim(iStep)%dat(iFreq) = stat%var(map(iVar))%dat(iFreq) + case('indx') + outputStructure(1)%indxStat(1)%gru(indxGRU)%hru(indxHRU)%var(map(iVar))%tim(iStep)%dat(iFreq) = stat%var(map(iVar))%dat(iFreq) case default err=21; message=trim(message)//"Stats structure not found"; return end select @@ -339,7 +341,7 @@ subroutine writeBasin(indxGRU,indxHRU,iStep,finalizeStats,& integer(i4b) :: iStat ! statistics index integer(i4b) :: iFreq ! frequency index ! initialize error control - err=0;message="f-writeBasin/" + err=0;message="outputStrucWrite.f90-writeBasin/" ! loop through output frequencies do iFreq=1,maxvarFreq @@ -404,7 +406,7 @@ subroutine writeTime(indxGRU,indxHRU,iStep,finalizeStats,meta,dat,err,message) integer(i4b) :: iVar ! variable index integer(i4b) :: iFreq ! frequency index ! initialize error control - err=0;message="f-writeTime/" + err=0;message="outputStrucWrite.f90-writeTime/" ! loop through output frequencies do iFreq=1,maxvarFreq diff --git a/build/source/netcdf/writeOutput.f90 b/build/source/netcdf/writeOutput.f90 index 7ce8d7d91d53d8cfaf5e0bf9654c941c47d7b704..3b7ce4951b311a082601b4fbcb0f5c3cb5b73c35 100644 --- a/build/source/netcdf/writeOutput.f90 +++ b/build/source/netcdf/writeOutput.f90 @@ -78,7 +78,8 @@ public::writeParm public::writeData public::writeBasin public::writeTime -public::writeRestart +private::writeScalar +private::writeVector ! define dimension lengths integer(i4b),parameter :: maxSpectral=2 ! maximum number of spectral bands contains @@ -147,10 +148,10 @@ subroutine writeParm(ncid,ispatial,struct,meta,err,message) end subroutine writeParm - ! ************************************************************************************** - ! public subroutine writeData: write model time-dependent data - ! ************************************************************************************** -subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,indxGRU,nSteps, & +! ************************************************************************************** +! public subroutine writeData: write model time-dependent data +! ************************************************************************************** +subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,nSteps, & minGRU, maxGRU, numGRU, & meta,stat,dat,structName,map,indx,err,message) USE data_types,only:var_info ! metadata type @@ -160,7 +161,6 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,indxGRU, USE var_lookup,only:iLookStat ! index into stat structure USE globalData,only:outFreq ! output file information USE globalData,only:outputStructure - USE globalData,only:gru_struc USE globalData,only:failedHRUs USE get_ixName_module,only:get_varTypeName ! to access type strings for error messages USE get_ixName_module,only:get_statName ! to access type strings for error messages @@ -171,7 +171,6 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,indxGRU, integer(i4b) ,intent(inout) :: outputTimestep(:) ! output time step integer(i4b) ,intent(inout) :: outputTimestepUpdate(:) ! number of HRUs in the run domain integer(i4b) ,intent(in) :: maxLayers ! maximum number of layers - integer(i4b) ,intent(in) :: indxGRU integer(i4b) ,intent(in) :: nSteps ! number of timeSteps integer(i4b) ,intent(in) :: minGRU ! minGRU index to write integer(i4b) ,intent(in) :: maxGRU ! maxGRU index to write - probably not needed @@ -185,30 +184,18 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,indxGRU, integer(i4b) ,intent(out) :: err ! error code character(*) ,intent(out) :: message ! error message ! local variables - integer(i4b) :: iHRU integer(i4b) :: iVar ! variable index integer(i4b) :: iStat ! statistics index integer(i4b) :: iFreq ! frequency index integer(i4b) :: ncVarID ! used only for time - integer(i4b) :: nSnow ! number of snow layers - integer(i4b) :: nSoil ! number of soil layers - integer(i4b) :: nLayers ! total number of layers ! output arrays - integer(i4b) :: datLength ! length of each data vector - integer(i4b) :: maxLength ! maximum length of each data vector real(rkind) :: timeVec(nSteps) ! timeVal to copy - real(rkind) :: realVec(numGRU, nSteps) ! real vector for all HRUs in the run domain - real(rkind) :: realArray(nSteps,maxLayers+1) ! real array for all HRUs in the run domain - integer(i4b) :: intArray(nSteps,maxLayers+1) ! integer array for all HRUs in the run domain - integer(i4b) :: dataType ! type of data integer(i4b),parameter :: ixInteger=1001 ! named variable for integer integer(i4b),parameter :: ixReal=1002 ! named variable for real integer(i4b) :: stepCounter ! counter to know how much data we have to write, needed because we do not always write nSteps - integer(i4b) :: gruCounter integer(i4b) :: iStep integer(i4b) :: iGRU integer(i4b) :: verifiedGRUIndex ! index of HRU verified to not have failed - integer(i4b) :: verifiedStepCounter ! numStepsForStepCounter from HRU that did not fail ! initialize error control err=0;message="writeData/" ! loop through output frequencies @@ -256,121 +243,13 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,indxGRU, ! check that the variable is desired if (iStat==integerMissing.or.trim(meta(iVar)%varName)=='unknown') cycle - ! do iHRU=1,gru_struc(iGRU)%hruCount - ! stats output: only scalar variable type - if(meta(iVar)%varType==iLookVarType%scalarv) then - select type(stat) - class is (gru_hru_time_doubleVec) - if (minGRU == maxGRU)then - gruCounter = 1 - do iStep = 1, nSteps - if(.not.outputStructure(1)%finalizeStats(1)%gru(verifiedGRUIndex)%hru(1)%tim(iStep)%dat(iFreq)) cycle - stepCounter = stepCounter + 1 - realVec(gruCounter, stepCounter) = stat%gru(verifiedGRUIndex)%hru(1)%var(map(iVar))%tim(iStep)%dat(iFreq) - end do ! iStep - else - gruCounter = 0 - do iGRU = minGRU, maxGRU - stepCounter = 0 - gruCounter = gruCounter + 1 - do iStep = 1, nSteps - if(.not.outputStructure(1)%finalizeStats(1)%gru(verifiedGRUIndex)%hru(1)%tim(iStep)%dat(iFreq)) cycle - stepCounter = stepCounter + 1 - realVec(gruCounter, stepCounter) = stat%gru(iGRU)%hru(1)%var(map(iVar))%tim(iStep)%dat(iFreq) - end do ! iStep - end do ! iGRU - endif - - err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),realVec(1:gruCounter, 1:stepCounter),start=(/minGRU,outputTimestep(iFreq)/),count=(/numGRU,stepCounter/)) - if (outputTimeStepUpdate(iFreq) /= stepCounter ) then - print*, "ERROR Missmatch in Steps - stat doubleVec" - print*, "iFreq = ", iFreq - print*, "outputTimeStepUpdate(iFreq) = ", outputTimeStepUpdate(iFreq) - print*, "stepCounter = ", stepCounter - return - endif - class default; err=20; message=trim(message)//'stats must be scalarv and of type gru_hru_doubleVec'; return - end select ! stat - - ! non-scalar variables: regular data structures - else - - ! initialize the data vectors - select type (dat) - class is (gru_hru_time_doubleVec); realArray(:,:) = realMissing; dataType=ixReal - class is (gru_hru_time_intVec); intArray(:,:) = integerMissing; dataType=ixInteger - class default; err=20; message=trim(message)//'data must not be scalarv and either of type gru_hru_doubleVec or gru_hru_intVec'; return - end select - - - ! get the model layers - nSoil = indx%gru(iGRU)%hru(1)%var(iLookIndex%nSoil)%tim(iStep)%dat(1) - nSnow = indx%gru(iGRU)%hru(1)%var(iLookIndex%nSnow)%tim(iStep)%dat(1) - nLayers = indx%gru(iGRU)%hru(1)%var(iLookIndex%nLayers)%tim(iStep)%dat(1) - - ! get the length of each data vector - select case (meta(iVar)%varType) - case(iLookVarType%wLength); datLength = maxSpectral - case(iLookVarType%midToto); datLength = nLayers - case(iLookVarType%midSnow); datLength = nSnow - case(iLookVarType%midSoil); datLength = nSoil - case(iLookVarType%ifcToto); datLength = nLayers+1 - case(iLookVarType%ifcSnow); datLength = nSnow+1 - case(iLookVarType%ifcSoil); datLength = nSoil+1 - case default; cycle - end select ! vartype - - ! get the data vectors - select type (dat) - class is (gru_hru_time_doubleVec) - do iStep = 1, nSteps - if(.not.outputStructure(1)%finalizeStats(1)%gru(verifiedGRUIndex)%hru(1)%tim(iStep)%dat(iFreq)) cycle - stepCounter = stepCounter + 1 - realArray(stepCounter,1:datLength) = dat%gru(iGRU)%hru(1)%var(iVar)%tim(iStep)%dat(:) - end do - - class is (gru_hru_time_intVec) - do iStep = 1, nSteps - if(.not.outputStructure(1)%finalizeStats(1)%gru(verifiedGRUIndex)%hru(1)%tim(iStep)%dat(iFreq)) cycle - stepCounter = stepCounter + 1 - intArray(stepCounter,1:datLength) = dat%gru(iGRU)%hru(1)%var(iVar)%tim(iStep)%dat(:) - end do - class default; err=20; message=trim(message)//'data must not be scalarv and either of type gru_hru_doubleVec or gru_hru_intVec'; return - end select - - ! get the maximum length of each data vector - select case (meta(iVar)%varType) - case(iLookVarType%wLength); maxLength = maxSpectral - case(iLookVarType%midToto); maxLength = maxLayers - case(iLookVarType%midSnow); maxLength = maxLayers-nSoil - case(iLookVarType%midSoil); maxLength = nSoil - case(iLookVarType%ifcToto); maxLength = maxLayers+1 - case(iLookVarType%ifcSnow); maxLength = (maxLayers-nSoil)+1 - case(iLookVarType%ifcSoil); maxLength = nSoil+1 - case default; cycle - end select ! vartype - - ! write the data vectors - select case(dataType) - case(ixReal) - - err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),realArray(1:stepCounter,:),start=(/iGRU,1,outputTimestep(iFreq)/),count=(/1,maxLength,stepCounter/)) - if (outputTimeStepUpdate(iFreq) /= stepCounter ) then - print*, "ERROR Missmatch in Steps - ixReal" - return - endif - case(ixInteger) - - err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),intArray(1:stepCounter,:),start=(/iGRU,1,outputTimestep(iFreq)/),count=(/1,maxLength,stepCounter/)) - if (outputTimeStepUpdate(iFreq) /= stepCounter ) then - print*, "ERROR Missmatch in Steps - ixInteger" - return - endif - case default; err=20; message=trim(message)//'data must be of type integer or real'; return - end select ! data type - - end if ! not scalarv - ! end do ! HRU Loop + ! stats output: only scalar variable type + if(meta(iVar)%varType==iLookVarType%scalarv) then + call writeScalar(ncid, outputTimeStep, outputTimeStepUpdate, nSteps, minGRU, maxGRU, numGRU, iFreq, iVar, meta, stat, map, err, message) + else ! non-scalar variables: regular data structures + call writeVector(ncid, outputTimeStep, outputTimeStepUpdate, maxLayers, nSteps, minGRU, maxGRU, numGRU, iFreq, iVar, meta, dat, & + indx, err, message) + end if ! not scalarv ! process error code if (err/=0) message=trim(message)//trim(meta(iVar)%varName)//'_'//trim(get_statName(iStat)) @@ -382,6 +261,187 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,indxGRU, end subroutine writeData +subroutine writeScalar(ncid, outputTimestep, outputTimestepUpdate, nSteps, minGRU, maxGRU, & + numGRU, iFreq, iVar, meta, stat, map, err, message) + USE data_types,only:var_info ! metadata type + + implicit none + ! declare dummy variables + type(var_i) ,intent(in) :: ncid ! fileid + integer(i4b) ,intent(inout) :: outputTimestep(:) ! output time step + integer(i4b) ,intent(inout) :: outputTimestepUpdate(:) ! number of HRUs in the run domain + integer(i4b) ,intent(in) :: nSteps ! number of timeSteps + integer(i4b) ,intent(in) :: minGRU ! minGRU index to write + integer(i4b) ,intent(in) :: maxGRU ! maxGRU index to write - probably not needed + integer(i4b) ,intent(in) :: numGRU + integer(i4b) ,intent(in) :: iFreq ! output file index (year, month, day, timesteps) + integer(i4b) ,intent(in) :: iVar ! netcdf variable we are writing data for + type(var_info),intent(in) :: meta(:) ! meta data + class(*) ,intent(in) :: stat ! stats data + integer(i4b) ,intent(in) :: map(:) ! map into stats child struct + integer(i4b) ,intent(inout) :: err + character(*) ,intent(inout) :: message + + ! local variables + integer(i4b) :: gruCounter ! counter for the realVecs + integer(i4b) :: iStep ! counter for looping over nSteps + integer(i4b) :: stepCounter ! counter for the realVec + integer(i4b) :: iGRU + ! output array + real(rkind) :: realVec(numGRU, nSteps)! real vector for all HRUs in the run domain + + err=0; message="writeOutput.f90-writeScalar/" + + select type(stat) + class is (gru_hru_time_doubleVec) + gruCounter=0 + do iGRU = minGRU, maxGRU + stepCounter = 0 + gruCounter = gruCounter + 1 + do iStep = 1, nSteps + if(.not.outputStructure(1)%finalizeStats(1)%gru(iGRU)%hru(1)%tim(iStep)%dat(iFreq)) cycle + stepCounter = stepCounter + 1 + realVec(gruCounter, stepCounter) = stat%gru(iGRU)%hru(1)%var(map(iVar))%tim(iStep)%dat(iFreq) + end do ! iStep + end do ! iGRU + + err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),realVec(1:gruCounter, 1:stepCounter),start=(/minGRU,outputTimestep(iFreq)/),count=(/numGRU,stepCounter/)) + if (outputTimeStepUpdate(iFreq) /= stepCounter ) then + print*, "ERROR Missmatch in Steps - stat doubleVec" + print*, " outputTimeStepUpdate(iFreq) = ", outputTimeStepUpdate(iFreq) + print*, " stepCounter = ", stepCounter + return + endif + class default; err=20; message=trim(message)//'stats must be scalarv and of type gru_hru_doubleVec'; return + end select ! stat + +end subroutine + +subroutine writeVector(ncid, outputTimestep, outputTimestepUpdate, maxLayers, nSteps, minGRU, maxGRU, & + numGRU, iFreq, iVar, meta, dat, indx, err, message) + USE data_types,only:var_info ! metadata type + USE var_lookup,only:iLookIndex ! index into index structure + USE var_lookup,only:iLookVarType ! index into type structure + + implicit none + type(var_i) ,intent(in) :: ncid ! fileid + integer(i4b) ,intent(inout) :: outputTimestep(:) ! output time step + integer(i4b) ,intent(inout) :: outputTimestepUpdate(:) ! number of HRUs in the run domain + integer(i4b) ,intent(in) :: maxLayers ! maximum number of layers + integer(i4b) ,intent(in) :: nSteps ! number of timeSteps + integer(i4b) ,intent(in) :: minGRU ! minGRU index to write + integer(i4b) ,intent(in) :: maxGRU ! maxGRU index to write - probably not needed + integer(i4b) ,intent(in) :: numGRU + integer(i4b) ,intent(in) :: iFreq ! output file index (year, month, day, timesteps) + integer(i4b) ,intent(in) :: iVar ! netcdf variable we are writing data for + type(var_info),intent(in) :: meta(:) ! meta data + class(*) ,intent(in) :: dat ! timestep data + type(gru_hru_time_intVec) ,intent(in) :: indx ! index data + integer(i4b) ,intent(inout) :: err + character(*) ,intent(inout) :: message + + ! local variables + integer(i4b) :: gruCounter ! counter for the realVecs + integer(i4b) :: iStep ! counter for looping over nSteps + integer(i4b) :: stepCounter ! counter for the realVec + integer(i4b) :: iGRU + integer(i4b) :: nSoil + integer(i4b) :: nSnow + integer(i4b) :: nLayers + ! output array + integer(i4b) :: datLength ! length of each data vector + integer(i4b) :: maxLength ! maximum length of each data vector + integer(i4b) :: dataType ! type of data + integer(i4b),parameter :: ixInteger=1001 ! named variable for integer + integer(i4b),parameter :: ixReal=1002 ! named variable for real + real(rkind) :: realArray(numGRU,maxLayers+1) ! real array for all HRUs in the run domain + integer(i4b) :: intArray(numGRU,maxLayers+1) ! integer array for all HRUs in the run domain + err=0; message="writeOutput.f90-writeVector/" + + ! initialize the data vectors + select type (dat) + class is (gru_hru_time_doubleVec); realArray(:,:) = realMissing; dataType=ixReal + class is (gru_hru_time_intVec); intArray(:,:) = integerMissing; dataType=ixInteger + class default; err=20; message=trim(message)//'data must not be scalarv and either of type gru_hru_doubleVec or gru_hru_intVec'; return + end select + + ! Loop over GRUs + + stepCounter = outputTimeStep(iFreq) + do iStep = 1, nSteps + gruCounter = 1 + do iGRU = minGRU, maxGRU + ! get the model layers + nSoil = indx%gru(iGRU)%hru(1)%var(iLookIndex%nSoil)%tim(iStep)%dat(1) + nSnow = indx%gru(iGRU)%hru(1)%var(iLookIndex%nSnow)%tim(iStep)%dat(1) + nLayers = indx%gru(iGRU)%hru(1)%var(iLookIndex%nLayers)%tim(iStep)%dat(1) + + ! get the length of each data vector + select case (meta(iVar)%varType) + case(iLookVarType%wLength); datLength = maxSpectral + case(iLookVarType%midToto); datLength = nLayers + case(iLookVarType%midSnow); datLength = nSnow + case(iLookVarType%midSoil); datLength = nSoil + case(iLookVarType%ifcToto); datLength = nLayers+1 + case(iLookVarType%ifcSnow); datLength = nSnow+1 + case(iLookVarType%ifcSoil); datLength = nSoil+1 + case default; cycle + end select ! vartype + + ! get the data vectors + select type (dat) + class is (gru_hru_time_doubleVec) + ! do iStep = 1, nSteps + if(.not.outputStructure(1)%finalizeStats(1)%gru(iGRU)%hru(1)%tim(iStep)%dat(iFreq)) cycle + ! stepCounter = stepCounter + 1 + realArray(gruCounter,1:datLength) = dat%gru(iGRU)%hru(1)%var(iVar)%tim(iStep)%dat(:) + ! end do + + class is (gru_hru_time_intVec) + ! do iStep = 1, nSteps + if(.not.outputStructure(1)%finalizeStats(1)%gru(iGRU)%hru(1)%tim(iStep)%dat(iFreq)) cycle + ! stepCounter = stepCounter + 1 + intArray(gruCounter,1:datLength) = dat%gru(iGRU)%hru(1)%var(iVar)%tim(iStep)%dat(:) + ! end do + class default; err=20; message=trim(message)//'data must not be scalarv and either of type gru_hru_doubleVec or gru_hru_intVec'; return + end select + + ! get the maximum length of each data vector + select case (meta(iVar)%varType) + case(iLookVarType%wLength); maxLength = maxSpectral + case(iLookVarType%midToto); maxLength = maxLayers + case(iLookVarType%midSnow); maxLength = maxLayers-nSoil + case(iLookVarType%midSoil); maxLength = nSoil + case(iLookVarType%ifcToto); maxLength = maxLayers+1 + case(iLookVarType%ifcSnow); maxLength = (maxLayers-nSoil)+1 + case(iLookVarType%ifcSoil); maxLength = nSoil+1 + case default; cycle + end select ! vartype + end do ! iGRU + + ! write the data vectors + select case(dataType) + + case(ixReal) + err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),realArray(1:numGRU,1:maxLength),start=(/minGRU,1,stepCounter/),count=(/numGRU,maxLength,1/)) + if(err/=0)then; print*, "ERROR: with nf90_put_var in data vector (ixReal)"; return; endif + + case(ixInteger) + err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),intArray(1:numGRU,1:maxLength),start=(/minGRU,1,stepCounter/),count=(/numGRU,maxLength,1/)) + if(err/=0)then; print*, "ERROR: with nf90_put_var in data vector (ixInteger)"; return; endif + + case default; err=20; message=trim(message)//'data must be of type integer or real'; return + end select ! data type + stepCounter = stepCounter + 1 + end do ! iStep + ! if (outputTimeStepUpdate(iFreq) /= stepCounter ) then + ! print*, "ERROR Missmatch in Steps: for non scalar case" + ! print*, " outputTimeStepUpdate(iFreq) = ", outputTimeStepUpdate(iFreq) + ! print*, " stepCounter = ", stepCounter + ! return + ! endif +end subroutine + ! ************************************************************************************** ! public subroutine writeBasin: write basin-average variables ! ************************************************************************************** @@ -447,8 +507,8 @@ subroutine writeBasin(ncid,iGRU,outputTimestep,iStep,meta,stat,dat,map,err,messa ! process error code if (err.ne.0) message=trim(message)//trim(meta(iVar)%varName)//'_'//trim(get_statName(iStat)) call netcdf_err(err,message); if (err/=0) return - end do ! iVar + outputTimeStep(iFreq) = outputTimeStep(iFreq) + 1 end do ! iFreq end subroutine writeBasin @@ -503,258 +563,5 @@ end do ! iFreq end subroutine writeTime - ! ********************************************************************************************************* - ! public subroutine printRestartFile: print a re-start file - ! ********************************************************************************************************* - subroutine writeRestart(filename, & ! intent(in): name of restart file - nGRU, & ! intent(in): number of GRUs - nHRU, & ! intent(in): number of HRUs - prog_meta, & ! intent(in): prognostics metadata - prog_data, & ! intent(in): prognostics data - bvar_meta, & ! intent(in): basin (gru) variable metadata - bvar_data, & ! intent(in): basin (gru) variable data - maxLayers, & ! intent(in): maximum number of layers - maxSnowLayers, & ! intent(in): maximum number of snow layers - indx_meta, & ! intent(in): index metadata - indx_data, & ! intent(in): index data - err,message) ! intent(out): error control - ! -------------------------------------------------------------------------------------------------------- - ! -------------------------------------------------------------------------------------------------------- - ! access the derived types to define the data structures - USE data_types,only:var_info ! metadata - ! access named variables defining elements in the data structures - USE var_lookup,only:iLookINDEX ! named variables for structure elements - USE var_lookup,only:iLookVarType ! named variables for structure elements - USE var_lookup,only:iLookBVAR ! named variables for structure elements - ! constants - USE globalData,only:gru_struc ! gru-hru mapping structures - ! external routines - USE netcdf_util_module,only:nc_file_close ! close netcdf file - USE netcdf_util_module,only:nc_file_open ! open netcdf file - USE globalData,only:nTimeDelay ! number of timesteps in the time delay histogram - - implicit none - ! -------------------------------------------------------------------------------------------------------- - ! input - character(len=256),intent(in) :: filename ! name of the restart file - integer(i4b),intent(in) :: nGRU ! number of GRUs - integer(i4b),intent(in) :: nHRU ! number of HRUs - type(var_info),intent(in) :: prog_meta(:) ! prognostic variable metadata - type(gru_hru_doubleVec),intent(in) :: prog_data ! prognostic vars - type(var_info),intent(in) :: bvar_meta(:) ! basin variable metadata - type(gru_doubleVec),intent(in) :: bvar_data ! basin variables - type(var_info),intent(in) :: indx_meta(:) ! metadata - type(gru_hru_intVec),intent(in) :: indx_data ! indexing vars - ! output: error control - integer(i4b),intent(out) :: err ! error code - character(*),intent(out) :: message ! error message - ! -------------------------------------------------------------------------------------------------------- - ! dummy variables - integer(i4b), intent(in) :: maxLayers ! maximum number of total layers - integer(i4b), intent(in) :: maxSnowLayers ! maximum number of snow layers - - ! local variables - integer(i4b) :: ncid ! netcdf file id - integer(i4b),allocatable :: ncVarID(:) ! netcdf variable id - integer(i4b) :: ncSnowID ! index variable id - integer(i4b) :: ncSoilID ! index variable id - - integer(i4b) :: nSoil ! number of soil layers - integer(i4b) :: nSnow ! number of snow layers - integer(i4b) :: maxSnow ! maximum number of snow layers - integer(i4b) :: maxSoil ! maximum number of soil layers - integer(i4b) :: nLayers ! number of total layers - integer(i4b),parameter :: nSpectral=2 ! number of spectal bands - integer(i4b),parameter :: nScalar=1 ! size of a scalar - integer(i4b) :: nProgVars ! number of prognostic variables written to state file - - integer(i4b) :: hruDimID ! variable dimension ID - integer(i4b) :: gruDimID ! variable dimension ID - integer(i4b) :: tdhDimID ! variable dimension ID - integer(i4b) :: scalDimID ! variable dimension ID - integer(i4b) :: specDimID ! variable dimension ID - integer(i4b) :: midSnowDimID ! variable dimension ID - integer(i4b) :: midSoilDimID ! variable dimension ID - integer(i4b) :: midTotoDimID ! variable dimension ID - integer(i4b) :: ifcSnowDimID ! variable dimension ID - integer(i4b) :: ifcSoilDimID ! variable dimension ID - integer(i4b) :: ifcTotoDimID ! variable dimension ID - - character(len=32),parameter :: hruDimName ='hru' ! dimension name for HRUs - character(len=32),parameter :: gruDimName ='gru' ! dimension name for GRUs - character(len=32),parameter :: tdhDimName ='tdh' ! dimension name for time-delay basin variables - character(len=32),parameter :: scalDimName ='scalarv' ! dimension name for scalar data - character(len=32),parameter :: specDimName ='spectral' ! dimension name for spectral bands - character(len=32),parameter :: midSnowDimName='midSnow' ! dimension name for snow-only layers - character(len=32),parameter :: midSoilDimName='midSoil' ! dimension name for soil-only layers - character(len=32),parameter :: midTotoDimName='midToto' ! dimension name for layered varaiables - character(len=32),parameter :: ifcSnowDimName='ifcSnow' ! dimension name for snow-only layers - character(len=32),parameter :: ifcSoilDimName='ifcSoil' ! dimension name for soil-only layers - character(len=32),parameter :: ifcTotoDimName='ifcToto' ! dimension name for layered variables - - integer(i4b) :: cHRU ! count of HRUs - integer(i4b) :: iHRU ! index of HRUs - integer(i4b) :: iGRU ! index of GRUs - integer(i4b) :: iVar ! variable index - logical(lgt) :: okLength ! flag to check if the vector length is OK - character(len=256) :: cmessage ! downstream error message - ! -------------------------------------------------------------------------------------------------------- - - ! initialize error control - err=0; message='writeRestart/' - - ! size of prognostic variable vector - nProgVars = size(prog_meta) - allocate(ncVarID(nProgVars+1)) ! include 1 additional basin variable in ID array (possibly more later) - - ! maximum number of soil layers - maxSoil = gru_struc(1)%hruInfo(1)%nSoil - - ! maximum number of snow layers - maxSnow = maxSnowLayers - - ! create file - err = nf90_create(trim(filename),nf90_classic_model,ncid) - message='iCreate[create]'; call netcdf_err(err,message); if(err/=0)return - - ! define dimensions - err = nf90_def_dim(ncid,trim(hruDimName) ,nHRU , hruDimID); message='iCreate[hru]' ; call netcdf_err(err,message); if(err/=0)return - err = nf90_def_dim(ncid,trim(gruDimName) ,nGRU , gruDimID); message='iCreate[gru]' ; call netcdf_err(err,message); if(err/=0)return - err = nf90_def_dim(ncid,trim(tdhDimName) ,nTimeDelay , tdhDimID); message='iCreate[tdh]' ; call netcdf_err(err,message); if(err/=0)return - err = nf90_def_dim(ncid,trim(scalDimName) ,nScalar , scalDimID); message='iCreate[scalar]' ; call netcdf_err(err,message); if(err/=0)return - err = nf90_def_dim(ncid,trim(specDimName) ,nSpectral , specDimID); message='iCreate[spectral]'; call netcdf_err(err,message); if(err/=0)return - err = nf90_def_dim(ncid,trim(midSoilDimName),maxSoil ,midSoilDimID); message='iCreate[ifcSoil]' ; call netcdf_err(err,message); if(err/=0)return - err = nf90_def_dim(ncid,trim(midTotoDimName),maxLayers ,midTotoDimID); message='iCreate[midToto]' ; call netcdf_err(err,message); if(err/=0)return - err = nf90_def_dim(ncid,trim(ifcSoilDimName),maxSoil+1 ,ifcSoilDimID); message='iCreate[ifcSoil]' ; call netcdf_err(err,message); if(err/=0)return - err = nf90_def_dim(ncid,trim(ifcTotoDimName),maxLayers+1,ifcTotoDimID); message='iCreate[ifcToto]' ; call netcdf_err(err,message); if(err/=0)return - if (maxSnow>0) err = nf90_def_dim(ncid,trim(midSnowDimName),maxSnow ,midSnowDimID); message='iCreate[ifcSnow]' ; call netcdf_err(err,message); if(err/=0)return - if (maxSnow>0) err = nf90_def_dim(ncid,trim(ifcSnowDimName),maxSnow+1 ,ifcSnowDimID); message='iCreate[ifcSnow]' ; call netcdf_err(err,message); if(err/=0)return - ! re-initialize error control - err=0; message='writeRestart/' - - ! define prognostic variables - do iVar = 1,nProgVars - if (prog_meta(iVar)%varType==iLookvarType%unknown) cycle - - ! define variable - select case(prog_meta(iVar)%varType) - case(iLookvarType%scalarv); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID, scalDimID /),ncVarID(iVar)) - case(iLookvarType%wLength); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID, specDimID /),ncVarID(iVar)) - case(iLookvarType%midSoil); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,midSoilDimID/),ncVarID(iVar)) - case(iLookvarType%midToto); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,midTotoDimID/),ncVarID(iVar)) - case(iLookvarType%ifcSoil); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,ifcSoilDimID/),ncVarID(iVar)) - case(iLookvarType%ifcToto); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,ifcTotoDimID/),ncVarID(iVar)) - case(iLookvarType%midSnow); if (maxSnow>0) err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,midSnowDimID/),ncVarID(iVar)) - case(iLookvarType%ifcSnow); if (maxSnow>0) err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,ifcSnowDimID/),ncVarID(iVar)) - end select - - ! check errors - if(err/=0)then - message=trim(message)//trim(cmessage)//' [variable '//trim(prog_meta(iVar)%varName)//']' - return - end if - - ! add parameter description - err = nf90_put_att(ncid,ncVarID(iVar),'long_name',trim(prog_meta(iVar)%vardesc)) - call netcdf_err(err,message) - - ! add parameter units - err = nf90_put_att(ncid,ncVarID(iVar),'units',trim(prog_meta(iVar)%varunit)) - call netcdf_err(err,message) - - end do ! iVar - - ! define selected basin variables (derived) -- e.g., hillslope routing - err = nf90_def_var(ncid, trim(bvar_meta(iLookBVAR%routingRunoffFuture)%varName), nf90_double, (/gruDimID, tdhDimID /), ncVarID(nProgVars+1)) - err = nf90_put_att(ncid,ncVarID(nProgVars+1),'long_name',trim(bvar_meta(iLookBVAR%routingRunoffFuture)%vardesc)); call netcdf_err(err,message) - err = nf90_put_att(ncid,ncVarID(nProgVars+1),'units' ,trim(bvar_meta(iLookBVAR%routingRunoffFuture)%varunit)); call netcdf_err(err,message) - - ! define index variables - snow - err = nf90_def_var(ncid,trim(indx_meta(iLookIndex%nSnow)%varName),nf90_int,(/hruDimID/),ncSnowID); call netcdf_err(err,message) - err = nf90_put_att(ncid,ncSnowID,'long_name',trim(indx_meta(iLookIndex%nSnow)%vardesc)); call netcdf_err(err,message) - err = nf90_put_att(ncid,ncSnowID,'units' ,trim(indx_meta(iLookIndex%nSnow)%varunit)); call netcdf_err(err,message) - - ! define index variables - soil - err = nf90_def_var(ncid,trim(indx_meta(iLookIndex%nSoil)%varName),nf90_int,(/hruDimID/),ncSoilID); call netcdf_err(err,message) - err = nf90_put_att(ncid,ncSoilID,'long_name',trim(indx_meta(iLookIndex%nSoil)%vardesc)); call netcdf_err(err,message) - err = nf90_put_att(ncid,ncSoilID,'units' ,trim(indx_meta(iLookIndex%nSoil)%varunit)); call netcdf_err(err,message) - - ! end definition phase - err = nf90_enddef(ncid); call netcdf_err(err,message); if (err/=0) return - - ! write variables - do iGRU = 1,nGRU - do iHRU = 1,gru_struc(iGRU)%hruCount - cHRU = gru_struc(iGRU)%hruInfo(iHRU)%hru_ix - do iVar = 1,size(prog_meta) - - ! excape if this variable is not used - if (prog_meta(iVar)%varType==iLookvarType%unknown) cycle - - ! actual number of layers - nSnow = gru_struc(iGRU)%hruInfo(iHRU)%nSnow - nSoil = gru_struc(iGRU)%hruInfo(iHRU)%nSoil - nLayers = nSoil + nSnow - - ! check size - ! NOTE: this may take time that we do not wish to use - okLength=.true. - select case (prog_meta(iVar)%varType) - case(iLookVarType%scalarv); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nScalar ) - case(iLookVarType%wlength); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSpectral) - case(iLookVarType%midSoil); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSoil ) - case(iLookVarType%midToto); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nLayers ) - case(iLookVarType%ifcSoil); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSoil+1 ) - case(iLookVarType%ifcToto); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nLayers+1) - case(iLookVarType%midSnow); if (nSnow>0) okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSnow ) - case(iLookVarType%ifcSnow); if (nSnow>0) okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSnow+1 ) - case default; err=20; message=trim(message)//'unknown var type'; return - end select - - ! error check - if(.not.okLength)then - message=trim(message)//'bad vector length for variable '//trim(prog_meta(iVar)%varname) - err=20; return - endif - - ! write data - select case (prog_meta(iVar)%varType) - case(iLookVarType%scalarv); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nScalar /)) - case(iLookVarType%wlength); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSpectral/)) - case(iLookVarType%midSoil); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSoil /)) - case(iLookVarType%midToto); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nLayers /)) - case(iLookVarType%ifcSoil); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSoil+1 /)) - case(iLookVarType%ifcToto); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nLayers+1/)) - case(iLookVarType%midSnow); if (nSnow>0) err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSnow /)) - case(iLookVarType%ifcSnow); if (nSnow>0) err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSnow+1 /)) - case default; err=20; message=trim(message)//'unknown var type'; return - end select - - ! error check - if (err.ne.0) message=trim(message)//'writing variable:'//trim(prog_meta(iVar)%varName) - call netcdf_err(err,message); if (err/=0) return - err=0; message='writeRestart/' - - end do ! iVar loop - - ! write index variables - err=nf90_put_var(ncid,ncSnowID,(/indx_data%gru(iGRU)%hru(iHRU)%var(iLookIndex%nSnow)%dat/),start=(/cHRU/),count=(/1/)) - err=nf90_put_var(ncid,ncSoilID,(/indx_data%gru(iGRU)%hru(iHRU)%var(iLookIndex%nSoil)%dat/),start=(/cHRU/),count=(/1/)) - - end do ! iHRU loop - - ! write selected basin variables - err=nf90_put_var(ncid,ncVarID(nProgVars+1),(/bvar_data%gru(iGRU)%var(iLookBVAR%routingRunoffFuture)%dat/), start=(/iGRU/),count=(/1,nTimeDelay/)) - - end do ! iGRU loop - - ! close file - call nc_file_close(ncid,err,cmessage) - if(err/=0)then;message=trim(message)//trim(cmessage);return;end if - - ! cleanup - deallocate(ncVarID) - - end subroutine writeRestart - + end module writeOutput_module \ No newline at end of file diff --git a/build/source/netcdf/writeRestart.f90 b/build/source/netcdf/writeRestart.f90 new file mode 100644 index 0000000000000000000000000000000000000000..116851765bc31f63af15d0ff5277d95b920cbb68 --- /dev/null +++ b/build/source/netcdf/writeRestart.f90 @@ -0,0 +1,253 @@ + ! ********************************************************************************************************* + ! public subroutine printRestartFile: print a re-start file + ! ********************************************************************************************************* + subroutine writeRestart(filename, & ! intent(in): name of restart file + nGRU, & ! intent(in): number of GRUs + nHRU, & ! intent(in): number of HRUs + prog_meta, & ! intent(in): prognostics metadata + prog_data, & ! intent(in): prognostics data + bvar_meta, & ! intent(in): basin (gru) variable metadata + bvar_data, & ! intent(in): basin (gru) variable data + maxLayers, & ! intent(in): maximum number of layers + maxSnowLayers, & ! intent(in): maximum number of snow layers + indx_meta, & ! intent(in): index metadata + indx_data, & ! intent(in): index data + err,message) ! intent(out): error control +! -------------------------------------------------------------------------------------------------------- +! -------------------------------------------------------------------------------------------------------- +! access the derived types to define the data structures +USE data_types,only:var_info ! metadata +! access named variables defining elements in the data structures +USE var_lookup,only:iLookINDEX ! named variables for structure elements +USE var_lookup,only:iLookVarType ! named variables for structure elements +USE var_lookup,only:iLookBVAR ! named variables for structure elements +! constants +USE globalData,only:gru_struc ! gru-hru mapping structures +! external routines +USE netcdf_util_module,only:nc_file_close ! close netcdf file +USE netcdf_util_module,only:nc_file_open ! open netcdf file +USE globalData,only:nTimeDelay ! number of timesteps in the time delay histogram + +implicit none +! -------------------------------------------------------------------------------------------------------- +! input +character(len=256),intent(in) :: filename ! name of the restart file +integer(i4b),intent(in) :: nGRU ! number of GRUs +integer(i4b),intent(in) :: nHRU ! number of HRUs +type(var_info),intent(in) :: prog_meta(:) ! prognostic variable metadata +type(gru_hru_doubleVec),intent(in) :: prog_data ! prognostic vars +type(var_info),intent(in) :: bvar_meta(:) ! basin variable metadata +type(gru_doubleVec),intent(in) :: bvar_data ! basin variables +type(var_info),intent(in) :: indx_meta(:) ! metadata +type(gru_hru_intVec),intent(in) :: indx_data ! indexing vars +! output: error control +integer(i4b),intent(out) :: err ! error code +character(*),intent(out) :: message ! error message +! -------------------------------------------------------------------------------------------------------- +! dummy variables +integer(i4b), intent(in) :: maxLayers ! maximum number of total layers +integer(i4b), intent(in) :: maxSnowLayers ! maximum number of snow layers + +! local variables +integer(i4b) :: ncid ! netcdf file id +integer(i4b),allocatable :: ncVarID(:) ! netcdf variable id +integer(i4b) :: ncSnowID ! index variable id +integer(i4b) :: ncSoilID ! index variable id + +integer(i4b) :: nSoil ! number of soil layers +integer(i4b) :: nSnow ! number of snow layers +integer(i4b) :: maxSnow ! maximum number of snow layers +integer(i4b) :: maxSoil ! maximum number of soil layers +integer(i4b) :: nLayers ! number of total layers +integer(i4b),parameter :: nSpectral=2 ! number of spectal bands +integer(i4b),parameter :: nScalar=1 ! size of a scalar +integer(i4b) :: nProgVars ! number of prognostic variables written to state file + +integer(i4b) :: hruDimID ! variable dimension ID +integer(i4b) :: gruDimID ! variable dimension ID +integer(i4b) :: tdhDimID ! variable dimension ID +integer(i4b) :: scalDimID ! variable dimension ID +integer(i4b) :: specDimID ! variable dimension ID +integer(i4b) :: midSnowDimID ! variable dimension ID +integer(i4b) :: midSoilDimID ! variable dimension ID +integer(i4b) :: midTotoDimID ! variable dimension ID +integer(i4b) :: ifcSnowDimID ! variable dimension ID +integer(i4b) :: ifcSoilDimID ! variable dimension ID +integer(i4b) :: ifcTotoDimID ! variable dimension ID + +character(len=32),parameter :: hruDimName ='hru' ! dimension name for HRUs +character(len=32),parameter :: gruDimName ='gru' ! dimension name for GRUs +character(len=32),parameter :: tdhDimName ='tdh' ! dimension name for time-delay basin variables +character(len=32),parameter :: scalDimName ='scalarv' ! dimension name for scalar data +character(len=32),parameter :: specDimName ='spectral' ! dimension name for spectral bands +character(len=32),parameter :: midSnowDimName='midSnow' ! dimension name for snow-only layers +character(len=32),parameter :: midSoilDimName='midSoil' ! dimension name for soil-only layers +character(len=32),parameter :: midTotoDimName='midToto' ! dimension name for layered varaiables +character(len=32),parameter :: ifcSnowDimName='ifcSnow' ! dimension name for snow-only layers +character(len=32),parameter :: ifcSoilDimName='ifcSoil' ! dimension name for soil-only layers +character(len=32),parameter :: ifcTotoDimName='ifcToto' ! dimension name for layered variables + +integer(i4b) :: cHRU ! count of HRUs +integer(i4b) :: iHRU ! index of HRUs +integer(i4b) :: iGRU ! index of GRUs +integer(i4b) :: iVar ! variable index +logical(lgt) :: okLength ! flag to check if the vector length is OK +character(len=256) :: cmessage ! downstream error message +! -------------------------------------------------------------------------------------------------------- + +! initialize error control +err=0; message='writeRestart/' + +! size of prognostic variable vector +nProgVars = size(prog_meta) +allocate(ncVarID(nProgVars+1)) ! include 1 additional basin variable in ID array (possibly more later) + +! maximum number of soil layers +maxSoil = gru_struc(1)%hruInfo(1)%nSoil + +! maximum number of snow layers +maxSnow = maxSnowLayers + +! create file +err = nf90_create(trim(filename),nf90_classic_model,ncid) +message='iCreate[create]'; call netcdf_err(err,message); if(err/=0)return + +! define dimensions +err = nf90_def_dim(ncid,trim(hruDimName) ,nHRU , hruDimID); message='iCreate[hru]' ; call netcdf_err(err,message); if(err/=0)return +err = nf90_def_dim(ncid,trim(gruDimName) ,nGRU , gruDimID); message='iCreate[gru]' ; call netcdf_err(err,message); if(err/=0)return +err = nf90_def_dim(ncid,trim(tdhDimName) ,nTimeDelay , tdhDimID); message='iCreate[tdh]' ; call netcdf_err(err,message); if(err/=0)return +err = nf90_def_dim(ncid,trim(scalDimName) ,nScalar , scalDimID); message='iCreate[scalar]' ; call netcdf_err(err,message); if(err/=0)return +err = nf90_def_dim(ncid,trim(specDimName) ,nSpectral , specDimID); message='iCreate[spectral]'; call netcdf_err(err,message); if(err/=0)return +err = nf90_def_dim(ncid,trim(midSoilDimName),maxSoil ,midSoilDimID); message='iCreate[ifcSoil]' ; call netcdf_err(err,message); if(err/=0)return +err = nf90_def_dim(ncid,trim(midTotoDimName),maxLayers ,midTotoDimID); message='iCreate[midToto]' ; call netcdf_err(err,message); if(err/=0)return +err = nf90_def_dim(ncid,trim(ifcSoilDimName),maxSoil+1 ,ifcSoilDimID); message='iCreate[ifcSoil]' ; call netcdf_err(err,message); if(err/=0)return +err = nf90_def_dim(ncid,trim(ifcTotoDimName),maxLayers+1,ifcTotoDimID); message='iCreate[ifcToto]' ; call netcdf_err(err,message); if(err/=0)return +if (maxSnow>0) err = nf90_def_dim(ncid,trim(midSnowDimName),maxSnow ,midSnowDimID); message='iCreate[ifcSnow]' ; call netcdf_err(err,message); if(err/=0)return +if (maxSnow>0) err = nf90_def_dim(ncid,trim(ifcSnowDimName),maxSnow+1 ,ifcSnowDimID); message='iCreate[ifcSnow]' ; call netcdf_err(err,message); if(err/=0)return +! re-initialize error control +err=0; message='writeRestart/' + +! define prognostic variables +do iVar = 1,nProgVars +if (prog_meta(iVar)%varType==iLookvarType%unknown) cycle + +! define variable +select case(prog_meta(iVar)%varType) +case(iLookvarType%scalarv); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID, scalDimID /),ncVarID(iVar)) +case(iLookvarType%wLength); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID, specDimID /),ncVarID(iVar)) +case(iLookvarType%midSoil); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,midSoilDimID/),ncVarID(iVar)) +case(iLookvarType%midToto); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,midTotoDimID/),ncVarID(iVar)) +case(iLookvarType%ifcSoil); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,ifcSoilDimID/),ncVarID(iVar)) +case(iLookvarType%ifcToto); err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,ifcTotoDimID/),ncVarID(iVar)) +case(iLookvarType%midSnow); if (maxSnow>0) err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,midSnowDimID/),ncVarID(iVar)) +case(iLookvarType%ifcSnow); if (maxSnow>0) err = nf90_def_var(ncid,trim(prog_meta(iVar)%varname),nf90_double,(/hruDimID,ifcSnowDimID/),ncVarID(iVar)) +end select + +! check errors +if(err/=0)then +message=trim(message)//trim(cmessage)//' [variable '//trim(prog_meta(iVar)%varName)//']' +return +end if + +! add parameter description +err = nf90_put_att(ncid,ncVarID(iVar),'long_name',trim(prog_meta(iVar)%vardesc)) +call netcdf_err(err,message) + +! add parameter units +err = nf90_put_att(ncid,ncVarID(iVar),'units',trim(prog_meta(iVar)%varunit)) +call netcdf_err(err,message) + +end do ! iVar + +! define selected basin variables (derived) -- e.g., hillslope routing +err = nf90_def_var(ncid, trim(bvar_meta(iLookBVAR%routingRunoffFuture)%varName), nf90_double, (/gruDimID, tdhDimID /), ncVarID(nProgVars+1)) +err = nf90_put_att(ncid,ncVarID(nProgVars+1),'long_name',trim(bvar_meta(iLookBVAR%routingRunoffFuture)%vardesc)); call netcdf_err(err,message) +err = nf90_put_att(ncid,ncVarID(nProgVars+1),'units' ,trim(bvar_meta(iLookBVAR%routingRunoffFuture)%varunit)); call netcdf_err(err,message) + +! define index variables - snow +err = nf90_def_var(ncid,trim(indx_meta(iLookIndex%nSnow)%varName),nf90_int,(/hruDimID/),ncSnowID); call netcdf_err(err,message) +err = nf90_put_att(ncid,ncSnowID,'long_name',trim(indx_meta(iLookIndex%nSnow)%vardesc)); call netcdf_err(err,message) +err = nf90_put_att(ncid,ncSnowID,'units' ,trim(indx_meta(iLookIndex%nSnow)%varunit)); call netcdf_err(err,message) + +! define index variables - soil +err = nf90_def_var(ncid,trim(indx_meta(iLookIndex%nSoil)%varName),nf90_int,(/hruDimID/),ncSoilID); call netcdf_err(err,message) +err = nf90_put_att(ncid,ncSoilID,'long_name',trim(indx_meta(iLookIndex%nSoil)%vardesc)); call netcdf_err(err,message) +err = nf90_put_att(ncid,ncSoilID,'units' ,trim(indx_meta(iLookIndex%nSoil)%varunit)); call netcdf_err(err,message) + +! end definition phase +err = nf90_enddef(ncid); call netcdf_err(err,message); if (err/=0) return + +! write variables +do iGRU = 1,nGRU +do iHRU = 1,gru_struc(iGRU)%hruCount +cHRU = gru_struc(iGRU)%hruInfo(iHRU)%hru_ix +do iVar = 1,size(prog_meta) + +! excape if this variable is not used +if (prog_meta(iVar)%varType==iLookvarType%unknown) cycle + +! actual number of layers +nSnow = gru_struc(iGRU)%hruInfo(iHRU)%nSnow +nSoil = gru_struc(iGRU)%hruInfo(iHRU)%nSoil +nLayers = nSoil + nSnow + +! check size +! NOTE: this may take time that we do not wish to use +okLength=.true. +select case (prog_meta(iVar)%varType) +case(iLookVarType%scalarv); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nScalar ) +case(iLookVarType%wlength); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSpectral) +case(iLookVarType%midSoil); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSoil ) +case(iLookVarType%midToto); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nLayers ) +case(iLookVarType%ifcSoil); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSoil+1 ) +case(iLookVarType%ifcToto); okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nLayers+1) +case(iLookVarType%midSnow); if (nSnow>0) okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSnow ) +case(iLookVarType%ifcSnow); if (nSnow>0) okLength = (size(prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat) == nSnow+1 ) +case default; err=20; message=trim(message)//'unknown var type'; return +end select + +! error check +if(.not.okLength)then +message=trim(message)//'bad vector length for variable '//trim(prog_meta(iVar)%varname) +err=20; return +endif + +! write data +select case (prog_meta(iVar)%varType) +case(iLookVarType%scalarv); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nScalar /)) +case(iLookVarType%wlength); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSpectral/)) +case(iLookVarType%midSoil); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSoil /)) +case(iLookVarType%midToto); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nLayers /)) +case(iLookVarType%ifcSoil); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSoil+1 /)) +case(iLookVarType%ifcToto); err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nLayers+1/)) +case(iLookVarType%midSnow); if (nSnow>0) err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSnow /)) +case(iLookVarType%ifcSnow); if (nSnow>0) err=nf90_put_var(ncid,ncVarID(iVar),(/prog_data%gru(iGRU)%hru(iHRU)%var(iVar)%dat/),start=(/cHRU,1/),count=(/1,nSnow+1 /)) +case default; err=20; message=trim(message)//'unknown var type'; return +end select + +! error check +if (err.ne.0) message=trim(message)//'writing variable:'//trim(prog_meta(iVar)%varName) +call netcdf_err(err,message); if (err/=0) return +err=0; message='writeRestart/' + +end do ! iVar loop + +! write index variables +err=nf90_put_var(ncid,ncSnowID,(/indx_data%gru(iGRU)%hru(iHRU)%var(iLookIndex%nSnow)%dat/),start=(/cHRU/),count=(/1/)) +err=nf90_put_var(ncid,ncSoilID,(/indx_data%gru(iGRU)%hru(iHRU)%var(iLookIndex%nSoil)%dat/),start=(/cHRU/),count=(/1/)) + +end do ! iHRU loop + +! write selected basin variables +err=nf90_put_var(ncid,ncVarID(nProgVars+1),(/bvar_data%gru(iGRU)%var(iLookBVAR%routingRunoffFuture)%dat/), start=(/iGRU/),count=(/1,nTimeDelay/)) + +end do ! iGRU loop + +! close file +call nc_file_close(ncid,err,cmessage) +if(err/=0)then;message=trim(message)//trim(cmessage);return;end if + +! cleanup +deallocate(ncVarID) + +end subroutine writeRestart \ No newline at end of file diff --git a/build/summa_actors.def b/build/summa_actors.def new file mode 100644 index 0000000000000000000000000000000000000000..e016b25b5d5f8481b68708cfd6a42f28c5762b31 --- /dev/null +++ b/build/summa_actors.def @@ -0,0 +1,35 @@ +Bootstrap: docker +From: ubuntu:20.04 + +%post + apt-get update + # need to install locales and set to en_CA.UTF-8 + # this causes issues if not done + apt-get install locales + locale-gen en_CA.UTF-8 + apt-get upgrade -y && \ + DEBIAN_FRONTEND="noninteractive" apt-get install -y software-properties-common \ + libnetcdf-dev \ + libnetcdff-dev \ + liblapack-dev \ + libopenblas-dev \ + cmake \ + g++ \ + git \ + libssl-dev \ + make \ + gfortran \ + python3-pip \ + gdb &&\ + apt-get autoclean + + pip3 install xarray + pip3 install netcdf4 + cd /opt + git clone https://github.com/actor-framework/actor-framework.git + cd actor-framework + ./configure + cd build + make + make test + make install diff --git a/utils/Summa_Actors_Settings_backup.json b/utils/Summa_Actors_Settings_backup.json new file mode 100644 index 0000000000000000000000000000000000000000..b6f659b78b9656388f1096c34e198aaeb978a2ce --- /dev/null +++ b/utils/Summa_Actors_Settings_backup.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": true, + "host": "simlab03", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100, + "num_hru_per_batch": 20 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 20 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/gladwell/SummaActorsSettings/fileManager.txt", + "outputCSV": false, + "csvPath": "" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 500 + } + } \ No newline at end of file diff --git a/utils/containers/apptainer/summa-actors.def b/utils/containers/apptainer/summa-actors.def new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/utils/containers/docker/Dockerfile b/utils/containers/docker/Dockerfile new file mode 100755 index 0000000000000000000000000000000000000000..5e8d61e0841e70583d6d6975c917288ec2f1b46d --- /dev/null +++ b/utils/containers/docker/Dockerfile @@ -0,0 +1,42 @@ +FROM ubuntu:20.04 + +WORKDIR /code + +# Get library dependencies +RUN apt-get update -y && \ + apt-get upgrade -y && \ + DEBIAN_FRONTEND="noninteractive" apt-get install -y software-properties-common \ + libnetcdf-dev \ + libnetcdff-dev \ + liblapack-dev \ + libopenblas-dev \ + cmake \ + g++ \ + git \ + libssl-dev \ + make \ + gfortran \ + python3-pip \ + gdb &&\ + apt-get autoclean + +RUN pip3 install xarray +RUN pip3 install netcdf4 + + +# Install the C++ Actor Framework From Git +RUN git clone https://github.com/actor-framework/actor-framework.git +WORKDIR /code/actor-framework +RUN ./configure +WORKDIR /code/actor-framework/build +RUN make +RUN make test +RUN make install +# Change workdir for when we attach to this container +WORKDIR /Summa-Actors +ENV LD_LIBRARY_PATH=/Summa-Actors/bin:/usr/local/lib + + + + + diff --git a/utils/containers/docker/build_docker_container.sh b/utils/containers/docker/build_docker_container.sh new file mode 100755 index 0000000000000000000000000000000000000000..1c462c678037556d8ecd856dad64c2fd4c3cc7eb --- /dev/null +++ b/utils/containers/docker/build_docker_container.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +docker build -t summa-actors . \ No newline at end of file diff --git a/utils/containers/docker/launch_docker_container.sh b/utils/containers/docker/launch_docker_container.sh new file mode 100755 index 0000000000000000000000000000000000000000..0bf72c7c341e6d854dc6fd4c2e26e67a8b87269e --- /dev/null +++ b/utils/containers/docker/launch_docker_container.sh @@ -0,0 +1,9 @@ +#! /bin/bash + +export PROJECT_DIR=/Users/kyleklenk/SUMMA-Projects/Summa-Actors +export NA_TEST=/home/local/kck540/NA_Summa_Test +export SUMMA=/Users/kyleklenk/SUMMA-Projects/summa +docker run -d -it --name SUMMA-Actors --mount type=bind,source=${PROJECT_DIR},target=/Summa-Actors \ + --mount type=bind,source=${SUMMA},target=/SUMMA summa-actors:latest + # --mount type=bind,source=${NA_TEST},target=/NA_Test \ + # \ \ No newline at end of file diff --git a/utils/docker/Dockerfile b/utils/docker/Dockerfile deleted file mode 100644 index d417ca554bf8cf04790b332c572036f34b164588..0000000000000000000000000000000000000000 --- a/utils/docker/Dockerfile +++ /dev/null @@ -1,48 +0,0 @@ -#FROM ubuntu:20.04 -FROM linuxbrew/brew:latest - - -# This dockerfile creates the environement for compiling and -# running SUMMA4CHM. Once started cd into /code/build/source/cppwrap. -# make lib -# make -# export LD_LIBRARY_PATH=/code/build/source/cppwrap:D_LIBRARY_PATH -# ./program - -WORKDIR /code - -RUN apt-get update && \ - DEBIAN_FRONTEND="noninteractive" apt-get install -y software-properties-common \ - libnetcdf-dev \ - libnetcdff-dev \ - liblapack-dev - -RUN add-apt-repository ppa:ubuntu-toolchain-r/test -y \ - && apt-get update \ - && apt-get install -y gfortran-7 - -RUN apt update -y \ - && apt upgrade -y \ - && DEBIAN_FRONTEND="noninteractive" apt install -y \ - cmake \ - g++ \ - git \ - libssl-dev \ - make \ - gfortran \ - gdb \ - && apt-get autoclean - -RUN brew install caf - -ADD . /code - -ENV LD_LIBRARY_PATH=/code/build:/home/linuxbrew/.linuxbrew/Cellar/caf/0.18.5/lib/ - -# RUN cp -r /home/linuxbrew/.linuxbrew/Cellar/caf/0.18.5/lib/* /usr/local/lib/ -# RUN cp -r /home/linuxbrew/.linuxbrew/Cellar/caf/0.18.*/include/caf /usr/local/include/ -# RUN cp -f /usr/local/lib/libcaf_core.so.0.18.* /code/build/source/cppwrap/ - - - - diff --git a/utils/docker/docker-compose.yml b/utils/docker/docker-compose.yml deleted file mode 100644 index 0fac1fa456d7f099627b7a1991f23204f0262973..0000000000000000000000000000000000000000 --- a/utils/docker/docker-compose.yml +++ /dev/null @@ -1,34 +0,0 @@ -version: '3.8' -services: - summa_client: - build: ./ - tty: true - container_name: summa_server - volumes: - - ./:/code:Z - ports: - - 4444:4444 - summa_client2: - build: ./ - tty: true - container_name: summa_client - volumes: - - ./:/code:Z - ports: - - 4445:4445 - # summa_client3: - # build: ./ - # tty: true - # container_name: summa_client3 - # volumes: - # - ./:/code:Z - # ports: - # - 4446:4446 - # summa_client4: - # build: ./ - # tty: true - # container_name: summa_client4 - # volumes: - # - ./:/code:Z - # ports: - # - 4447:4447 diff --git a/utils/laugh_tests/celia1990/config/Summa_Actors_Settings.json b/utils/laugh_tests/celia1990/config/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..78a0b82e249572607220643589ddf2a103dac174 --- /dev/null +++ b/utils/laugh_tests/celia1990/config/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/celia1990/settings/summa_fileManager_celia1990.txt", + "outputCSV": false, + "csvPath": "/Summa-Actors/utils/laugh_tests/celia1990/output/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} diff --git a/utils/laugh_tests/celia1990/forcing_data/celia1990_forcing.nc b/utils/laugh_tests/celia1990/forcing_data/celia1990_forcing.nc new file mode 100644 index 0000000000000000000000000000000000000000..c57e86d96e831e474f8f0166db7b8c16fa6b3719 Binary files /dev/null and b/utils/laugh_tests/celia1990/forcing_data/celia1990_forcing.nc differ diff --git a/utils/laugh_tests/celia1990/output/runinfo.txt b/utils/laugh_tests/celia1990/output/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..d695d143ce23a6957570f7b48b290a5708dfe5dd --- /dev/null +++ b/utils/laugh_tests/celia1990/output/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=15 - hh=21 - mi=12 - ss=09.199 diff --git a/utils/laugh_tests/celia1990/output/summa-actors_celia1990GRU1-1_timestep.nc b/utils/laugh_tests/celia1990/output/summa-actors_celia1990GRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..d173a6235ac81f1f920965a1ab7d4091db3dcb0a Binary files /dev/null and b/utils/laugh_tests/celia1990/output/summa-actors_celia1990GRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/celia1990/plot_lt_celia1990.ipynb b/utils/laugh_tests/celia1990/plot_lt_celia1990.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..fa005fa31ded1a6e16223235dd0879656e6cf243 --- /dev/null +++ b/utils/laugh_tests/celia1990/plot_lt_celia1990.ipynb @@ -0,0 +1,155 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "# modules\n", + "from pathlib import Path\n", + "from datetime import datetime\n", + "import xarray as xr # note, also needs netcdf4 library installed\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "# Specify the data locations relative to the notebook\n", + "sim_path = Path(\"/home/local/kck540/SUMMA-Projects/Summa-Actors/utils/laugh_tests/celia1990/output\")\n", + "sim_name = \"summa-actors_celia1990GRU1-1_timestep.nc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "# Specify plotting dimensions\n", + "timesteps = [10,32,49]\n", + "midToto = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "# Specify the base time\n", + "time_ref = datetime.strptime('2000-01-01 0:00:00', '%Y-%m-%d %H:%M:%S')" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# Load the data\n", + "ds = xr.open_dataset( sim_path / sim_name ).isel(hru=0, gru=0).load()" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "# Remove the mising data layers\n", + "ds = ds.where(ds['mLayerDepth'] != -9999, drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "# Ensure that we can actually read the figure labels\n", + "font = {'weight' : 'normal',\n", + " 'size' : 18}\n", + "\n", + "plt.rc('font', **font)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKsAAAKeCAYAAABqGZisAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAxOAAAMTgF/d4wjAADQhklEQVR4nOzdeXSU5d3/8ffMZF9IIBC2ACEbq4CiIAGRRXGprUutdRehVJQKiG1tax9R+7O1VsEFRBRwt26oKFpEIexCQBRBhJBAgCBrCJA9M/d9//6YZEggZE8my+d1Tk6ue50rMc9zDp9e1/drsyzLQkREREREREREpBGwe3sCIiIiIiIiIiIiJRRWiYiIiIiIiIhIo6GwSkREREREREREGg2FVSIiIiIiIiIi0mgorBIRERERERERkUZDYZWIiIiIiIiIiDQaCqtERERERERERKTR8PH2BBozf39/2rVr5+1piIiIiIiIiIg0G0ePHqWwsPCc1xVWVaBdu3ZkZGR4exoiIiIiIiIiIs1GVFRUhde1DVBERERERERERBoNhVUiIiIiIiIiItJoKKwSEREREREREZFGQ2GViIiIiIiIiIg0GgqrRERERERERESk0VBYJSIiIiIiIiIijYbCKhERERERERERaTR8vD2B5sayLM+XSGVsNpvnS0REREREREQUVtWZ/Px8MjMzycnJUVAl1WKz2QgJCSEiIoLAwEBvT0dERERERETEqxRW1YH8/Hz27dtHeHg40dHR+Pr6entK0oQ4nU5OnjzJvn376Nq1qwIrERERERERadEUVtWBzMxMwsPDad++vbenIk2Qw+EgICAAcP8tRUVFeXlGIiIiIiIiIt6jAuu1ZFkWOTk5hIWFeXsq0sSFhYVpG6mIiIiIiIi0eAqraqmkmLq2/klt+fr6qji/iIiIiIiItHgKq2pJwYLUNf1NiYiIiIiISEumsEpERERERERERBoNhVUiIiIiIiIiItJoNKqwKiMjg3HjxtGpUyf8/f2Jjo5m6tSpZGVlVes9x48fZ+rUqURHR+Pv70+nTp0YN24cGRkZ9TRzERERERERERGpC40mrEpLS2PgwIG8+uqrDBo0iAceeICYmBiee+45hgwZQmZmZpXek5mZyZAhQ3juueeIjY3lgQceYNCgQbz66qsMHDiQ3bt31/NP0nJ9+OGH3H///VxyySW0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rYkV0d+SiIiIiIiInOnhV3/N57adGDYbPpbFNbae/OOuD709rVpRWFULCqukIelvSURERERERM5089zz+THA5TnuU+DDu/d858UZ1V5leUujqVklIiIiIiIiIiJldbFH4yheZ+SrboAiIiIiIiIiIuJNQwfOoHeeu273JVZXdQMUERERERERERHvMEyLRd//jGVzr6xq3yoQh93m5VnVP4VVIiIiIiIiIiKN0JwVqRhZT/BToPv4w+ydLPhigncn1QAUVomIiIiIiIiINELr0jLJC/oZw+ZeTeW02diQtd3Ls6p/CqtERERERERERBqhxNgIAvM6YS9VYH1w695enlX9U1glIiIiIiIiItII3Tsijh9zJtGjwATg9rDzGHf1K16eVf1TWCUiIiIiIiIi0gg57DYKDQcxhi8Ad175Ag4fPy/Pqv4prBIRERERERERaYRO5jvJLyok1acIgLeXTMZwFXl5VvVPYZWIiIiIiIiISCP03NcpDG07l13+DgDeOPGDugGKiIiIiIiIiIh3bNh9nPzgnzGLuwEW2dUNUEREREREREREvKRLm0ACc093A/Qz1Q1QRERERERERES8pGfHVqw9dg/dnU4Aft/mAnUDFBERERERERGRhmeYFst3HAEsTADLwublOTUUhVVSp6Kjo7HZbOV+dejQ4az7s7Ozefjhh+nZsycBAQG0bt2aK664gmXLllXp844dO0bHjh2x2WwMGzbsnPdlZGQwbtw4OnXqhL+/P9HR0UydOpWsrKxzPrN9+3ZuuukmIiMjCQgIoEePHkyfPp38/PwqzU1ERERERESkpuasSGXbgZNc0vYl0n19wWZj7vHNLaLAuo+3JyDNT1hYGFOnTj3rfEhISJnjrKwshg0bxvbt2+nTpw8TJ04kJyeHRYsWcdlllzFv3jzGjx9f4Wfdc8895OTkVHhPWloaiYmJHDlyhGuvvZaePXuSnJzMc889x5IlS1i7di0RERFlntmwYQOjRo3C6XRy44030qVLF5YvX87jjz/OsmXLWLZsGf7+/lX7hYiIiIiIiIhU07q0TEwL8oIPYp1RYL25x1UKq6TOhYeH8+ijj1Z636OPPsr27du54YYbeO+99/Dxcf85/vOf/+TCCy/k/vvv54orriAqKqrc59944w0++ugjXnzxRe67775zfs59993HkSNHeP7557n//vs956dNm8bMmTN5+OGHeemllzznDcPg7rvvJi8vj0WLFvGrX/0KANM0uemmm1i4cCEzZ87kL3/5S1V+HSIiIiIiIiLVlhgbwbq0TFrlRmILdAdWfqbF4AgVWBepNx9//DEAjz/+uCeoAoiMjGTatGnk5+ezYMGCcp/dt28fkydPZvz48Vx11VXn/Iy0tDSWLl1KdHQ0kyZNKnPtscceIzg4mDfffJPc3FzP+ZUrV/LTTz8xfPhwT1AFYLfbeeqppwB46aWXsIq7MQAUFRXx/PPPc8EFF9C6dWuCgoKIjo7m2muv5euvv67Gb0VEREREREQEbru4GwDH82+jo8uFj2UxMWKgCqyL1ERhYSFvvfUW//znP3nuuedISkrCMIyz7jt06BAAMTExZ10rOVde7SrLshg7dixhYWHMmDGjwrkkJSUBMGbMGOz2sn/uoaGhDB06lLy8PNavX+85v3z5cgCuvPLKcueVkJDA3r172b17t+f82LFjmTJlCk6nkzvvvJPJkyczfPhwtm7dypIlSyqco4iIiIiIiMiZjpwqBOC6fu1pZ5i08Qliwq9ex+Hj5+WZ1T9tA2xKTAPWzIQ9q6D7cBj2ANgd3p7VWQ4dOsQdd9xR5lz37t159dVXufTSSz3n2rZty8GDB9mzZw+9e5ddxlgSBO3cufOs9z/77LOsWLGCpUuX0qpVK44fP37OuZQ8n5CQUO71+Ph4li5dSkpKCqNHj67yMykpKaSkpBAbG8vJkyd59913GThwIBs2bMDhKPvfJDMz85zzExERERERETmTYVrMXZkGQMbhIxz0cXDClc/Li+5k/C/mNfvASmFVfXvnZsjaUzfvyj0GeZmA5Q6s1s+B4La1f2/r7nDru7V/D3D33XdzySWX0KdPH0JDQ9m9ezezZs3i5Zdf5qqrruKbb76hf//+APziF79g3rx5TJ8+nXfffdcT8hw9epSZM2cCnNWtb/v27fztb39j4sSJXHbZZZXO5+TJk4C76Ht5Ss6fOHGixs/YbDYsy8Lf3/+s1VvAWcXbRURERERERCoyZ0Uqn275GYBD2Qs4GuHAssHc45uxfTGBCb963cszrF/aBtiUOPOAkjpJVvFx4zJ9+nRGjRpF+/btCQoKom/fvrz00kueGlSlC68//vjjdOnShQ8//JABAwYwdepUJkyYQJ8+fWjTpg1AmfDH6XRyxx130LFjR0/tqMagVatW/PKXv2TdunUMGDCAxx9/nKSkJPLyGt9/HxEREREREWn81qVl4jLd//4/GnT8rG6AzZ1WVtW3OlqxBMCqp2HVU+AqBB9/uOSPMPzBunt/PZo4cSLPPPMMq1at8pzr2LEjGzdu5B//+AeLFy/mxRdfpG3btvz2t79lypQpxMfHExkZ6bn/X//6F9999x1JSUmEhIRU6XNLVkGVrJY6U8n58PDwWj3z3nvv8e9//5t33nmH6dOnAxAQEMCNN97I008/Tfv27as0XxEREREREZHE2AjW787EtKBjfhg/Bp4AdQOURmnYAzD8Ieh+qfv7sKnenlGVtWvXDqBM1z2A9u3bM2vWLNLT0ykqKuLnn3/mhRdeYN++fQBcdNFFnns3b96MZVmMGDECm83m+erevTsAa9euxWazlQmRevToAUBKSkq589q1axdQtj5VTZ4JDAzk0UcfJSUlhX379vHWW28xbNgw3nrrLW688cZKfjsiIiIiIiIip907Io72oQH4OmyM6XgjoaZJkEWL6QaolVVNid3hXknVRFZTlVbSba+8zn/leeONNwC49dZbPecuv/xy2rY9u0ZXTk4O7733Hu3bt+eaa64hKCjIc23kyJEALF26FNM0y2wrzM7OZu3atQQFBXHxxRd7zo8aNYonnniCJUuW8Ne//rXMZ+3evZuUlBS6det2zp+lS5cu3Hbbbdxyyy306NGDNWvWkJmZqdpVIiIiIiIiUiUOuw2naXFe5zCu6tmWpzdbdAjt2uxrVZVQWCV15qeffqJr164EBweXOZ+ens4f/vAHAG6//XbPedM0ycvLO2tL35tvvskbb7xBYmIi1113nef8pEmTyv3c9PR03nvvPeLi4pg3b16Za7GxsYwZM4alS5cye/Zs7r//fs+16dOnk5ubyz333FNmzpdeeim9evVi1apVfPrpp/zqV7/yzPehhx4C3NsabcV7ho8ePcqhQ4c477zzynx2bm4uOTk5+Pj44OfXvDs1iIiIiIiISN3JLXRxLKcQu+Vi1+p3yQ61k59zgJe3zGX8eb/DYXdU/pImTGGV1Jn33nuPZ555huHDh9OtWzdCQ0NJS0vj888/p6CggKuvvpo//vGPnvvz8vJo3749l19+ObGxsdjtdtauXcs333xDr169+OCDD8rtrlddL774IomJiUyePJlly5bRq1cvNmzYQFJSEgkJCTzxxBNl7nc4HLz66quMGjWKG2+8kRtvvJGuXbuybNkyNm3axNChQ3nggQc89x84cIDzzz+f8847j379+tGlSxdOnTrF4sWLOXToEJMnTyY0NLTWP4eIiIiIiIi0DM8s3QnAjQULWRb8A/m2VoDB3O/nYLPZmdBvgncnWM8UVkmdGTlyJDt37uS7775j7dq15ObmEh4ezrBhw7jjjju44447PKuRAPz9/bn55ptZs2YNX331FQDx8fE88cQTTJ06tcx2vtqIjY1l06ZNPPLIIyxZsoQvvviCjh07MmXKFKZPn07r1q3Pembw4MFs3LiR6dOns3TpUrKzs+nWrRuPPPIIf/nLX/D39/fcGx0dzWOPPcaKFStISkri2LFjtGnThh49evDkk09y880318nPISIiIiIiIi3DN7szAUi0/8hrQX5Q0g0Qgw0HNzT7sMpmWZbl7Uk0VlFRUWRkZFR4j2EYpKSkkJCQgMPRvJfhSf3S35KIiIiIiIgAjHttI8t3HOE+xye0iviS2W1aubsB4mDi+ZOafFhVWd6iboAiIiIiIiIiIo1Itwj3TqONne7kF1ZXAFrb/Jg44F7G9R3nzak1CIVVIiIiIiIiIiKNhGFarEo5CsDwhLZEhtjBZsNms9FStsYprBIRERERERERaSTmrEhl99FcAJyrZjI/Lx2A42Yhc7+fw4JtC7w4u4ahsEpEREREREREpJFYl5bpWUE1iG1sDDzd4KukwHpzp7BKRERERERERKSR6BcV5hkn05cBBYWeYz8cDO442BvTalAKq0REREREREREGokRCZEAREcEETByGjfb3OFVpCOoxRRY9/H2BERERERERERExG1fVh4AD/+iN5f3bs+htDbAccYk3MCE/vd4d3INRCurREREREREREQaAcO0WPhtBgDrUo9huFwUnvoZgGUpH/PylrkYpuHNKTYIrawSEREREREREWkE5qxIZWP6cQDeSd7HmONvsdqnCAjgoJHL3O/nYLPZmdBvgncnWs+0skpEREREREREpBFYl5aJWdwKsNBlEvrzOr4PUDdAERERERERERHxgiExEZ6xv4+d7E6J9ClUN0AREREREREREfGC6y/oDECHVv5MHh3HoNse5xe5+QB09QltMd0AFVaJiIiIiIiIiHiZYVo8//UuAHp3bMXES+NwWC6c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d32/J02a5HZu8eLFhiRj6NChbsfnzJljSDJ+9atfGQUFBW7nSv95vP76627H9+7dW+m97Xa7cd999xmSjO+++87t3HXXXefxPgsXLnTVO2fOnDN+PsOo/vtvGGXf6759+xonT550HU9LSzMCAwON6OhoIz4+3sjIyHCdO3nypNGsWTOjefPmhtVqrfa+AACg7rENEAAA1ItJkyZp0qRJevrpp3X77bfrhhtukGEYGjdunC688EK3ax966CH17t3b7djx48f1wQcfqG/fvvrTn/7kdi4kJEQvv/yyDMPQ/Pnz3c4FBgYqICCgUj3NmzevdCw0NLTSsZiYGJnNtfNXpsmTJ1d636+++kppaWl6/PHHddVVV7mda9Omjf70pz/p8OHDWrZsWY3f58ILL9Rf//pXt2PXX3+9LrjgAiUnJ7sdnzp1qiwWi2bPnl3p8z/zzDNq1qyZPvzwQ7fjCQkJld7TbDZr7NixkqRvvvnGdTwjI0NLly5V+/bt9dhjj7m9ZtiwYZU+c2156aWXFB0d7XreoUMHDRo0SNnZ2XrmmWfUtm1b17no6GjdcsstOnbsmA4ePFgn9QAAgJpjGyAAAKgXzz33nCTnlr/o6GhdccUVGj16tEaMGFHp2sTExErHNm3aJLvd7rEnlCRXX6mffvrJdeyee+7RG2+8oYsuukh33HGHrrrqKg0YMEBRUVFur73zzjs1depUDR8+XLfffruuvfZaXX755R5DmfPh6XNt2LBBknPrnqfPlZqaKsn5uWq6FbBXr14eA7p27dq53k9y9v/avn27mjdvrtdff93jvYKDg92+p5IzOPznP/+pRYsWad++fcrPz3c7Xz7w2bZtmyRp0KBBHmtKSkrSqlWravS5zkbfvn0rHWvTpo0kqU+fPpXOlYZXGRkZlcJTAABQvwirAABAvTBO96eqidatW1c6dvz4cUnO0Kq6puN5eXmux6+99po6dOigOXPm6KWXXtJLL70ki8WiG2+8Ua+++qo6duwoyRkirVmzRi+88II++eQTV8+lLl26aOLEifrtb39b49rP9XN9/PHH1b62/Oc6k/IrisqzWCxuTcRPnjwpwzB09OhRV5h4JtnZ2brsssuUnp6uxMRE3XfffWratKksFouys7M1depUt6bspf3GWrVq5fF+nr4ntaFiICnJ1XerunPlm+kDAADvIKwCAAA+p2LDdaksYHjyySc1ZcqUGt0nICBA48aN07hx45SVlaW1a9fq3//+tz7++GPt3LlTO3fuVHBwsCRpwIAB+vLLL1VcXKwtW7Zo8eLFeuONN3T33XerRYsWuvbaayXJtSXQZrNVer/s7Oxz/lyff/65br311hp9rtpS+t69e/fW1q1ba/Sad999V+np6Zo4cWKllWAbNmzQ1KlTPb7HkSNHPN7v8OHDZ1k1AADwd/SsAgAADUJiYqLMZrPWrFlzTq9v2bKlbrvtNv3nP//R1VdfrbS0NKWkpFS6Ljg4WAMHDtTzzz+vadOmSXIGSaViYmIkSb/88kul127evPms6+rfv78knfPnOh8RERG6+OKLtXPnTp04caJGr9m7d68k52TDijxt5yvtPbZ27VrZ7fZK51euXHkWFQMAgMaAsAoAADQILVu21D333KPNmzdr8uTJHoOPtLQ0paenS5KKi4u1bt26StdYrVZXMBMWFiZJWr9+vQoLCytdW7oaqPQ6qazv1DvvvON27Q8//FBpVVFNDBs2TAkJCZo+fboWLVrk8ZoNGzaooKDgrO9dE+PHj1dJSYlGjRrlcWXYyZMn3VZdxcfHS6ocMm3btk0vvvhipdfHxcXpuuuuU3p6ut588023c59//nmd9KsCAAANG9sAAQBAg/Hmm28qNTVVzz77rObNm6dBgwapVatWOnTokH766Sdt2rRJH330kdq3b6/CwkINGjRIHTt2VJ8+fXThhReqqKhIS5cu1U8//aRbb71V3bp1kyT94x//0PLly3XFFVeoffv2ioiI0M6dO/X1118rJiZGDz30kKuGYcOGqVOnTvroo4+UkZGhfv366eeff9bnn3+uYcOG6T//+c9ZfabAwEB9+umnuv7663XTTTdp4MCB6tWrl8LCwvTLL79o06ZN2rdvnzIzM91Cs9oyatQobdmyRTNmzFBCQoJrauCJEyeUnp6u1atXa+TIkZo5c6Yk6b777tM///lPjRs3TitWrFCnTp2UmpqqL7/8UrfddpsWLFhQ6T2mT5+uAQMGaNy4cVqyZIl69uypvXv36rPPPtMtt9yiL774otY/FwAAaLgIqwAAQIPRpEkTrVq1Sm+//bbmz5+v//73vyoqKlKrVq3UqVMnvfbaa7ruuuskSeHh4Xr55Ze1YsUKrV+/XgsXLlRkZKQSEhL0r3/9S6NGjXLd95FHHlFMTIw2btyotWvXymazKS4uTo888oj+8Ic/uE2HCwkJ0bJly/TUU09p6dKl2rRpky655BLNnz9fTZs2PeuwSpJ69Oih7du3a8qUKfryyy81Z84cmc1mxcbGqnfv3nruuefUvHnz8/8GVmH69OkaOnSoZs6cqW+//VbZ2dlq2rSpLrjgAv3xj390m9jYpk0brVmzRn/5y1+0du1affPNN+ratatmzJiha6+91mNY1alTJ3333Xf6y1/+om+//VYrV65Ujx49tHDhQh09epSwCgAAuDEZZzOaBwAAAPCiBx54QO+9957S09NdWxLrQ1JSklatWnVWUy0BAMC5oWcVAAAAGpz27dvLZDLppZdeqrP3OHbsmEwmk0wmE721AACoR2wDBAAAQIMxfPhwtxVVgwYNqrP3CgsL08SJE+vs/gAAwDO2AQIAAAAAAMBnsA0QAAAAAAAAPoOwCgAAAAAAAD6DsAoAAAAAAAA+g7AKAAAAAAAAPoOwCgAAAAAAAD6DsAoAAAAAAAA+g7AKAAAAAAAAPuP/AbJu9nMtNP2PAAAAAElFTkSuQmCC", + "text/plain": [ + "<Figure size 1440x800 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Open a figure\n", + "fig = plt.figure(figsize=(18, 10), dpi= 80, facecolor='w', edgecolor='k');\n", + "\n", + "# Plot the data\n", + "for time in timesteps:\n", + " \n", + " # legend label\n", + " time_cur = ds['time'][time].dt.round('s') # Extract time @ timestep, rounded to the nearest second\n", + " time_dif = pd.to_datetime(time_cur.data) - time_ref # time_cur is a datetime64 object, needs to be datetime\n", + " lbl = str(round(time_dif.total_seconds())) + 's' # round() gets rid of the decimal 0 that's added by default\n", + " \n", + " # data\n", + " plt.plot(ds['mLayerMatricHead'].isel(time=time,midToto=midToto), ds['mLayerHeight'].isel(time=time), \\\n", + " marker='.', label=lbl);\n", + "\n", + "# Make sure that increasing depth points downward\n", + "plt.gca().invert_yaxis()\n", + "\n", + "# Labels\n", + "plt.xlabel('Pressure head [m]'); # note, ';' supresses output from the Text object that is created for the labels\n", + "plt.ylabel('Depth [m]');\n", + "plt.legend();\n", + "\n", + "# Save the figure\n", + "plt.savefig('summa-actors-lt1_celia1990.png');" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.8.10 64-bit", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/utils/laugh_tests/celia1990/run_test_summa.sh b/utils/laugh_tests/celia1990/run_test_summa.sh new file mode 100755 index 0000000000000000000000000000000000000000..640d339d8efb3825199c6c2350bd85b757d7fec5 --- /dev/null +++ b/utils/laugh_tests/celia1990/run_test_summa.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/celia1990/settings/summa_fileManager_verify_celia1990.txt \ No newline at end of file diff --git a/utils/laugh_tests/celia1990/run_test_summa_actors.sh b/utils/laugh_tests/celia1990/run_test_summa_actors.sh new file mode 100755 index 0000000000000000000000000000000000000000..e35394c5c6070ada3e8277323ff715126d038326 --- /dev/null +++ b/utils/laugh_tests/celia1990/run_test_summa_actors.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/celia1990/config \ No newline at end of file diff --git a/utils/laugh_tests/celia1990/settings/GENPARM.TBL b/utils/laugh_tests/celia1990/settings/GENPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..17fc9172ba276dffbbb9dfa90cdcbc4eecc1070c --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/GENPARM.TBL @@ -0,0 +1,36 @@ +General Parameters +SLOPE_DATA +9 +0.1 +0.6 +1.0 +0.35 +0.55 +0.8 +0.63 +0.0 +0.0 +SBETA_DATA +-2.0 +FXEXP_DATA +2.0 +CSOIL_DATA +2.00E+6 +SALP_DATA +2.6 +REFDK_DATA +2.0E-6 +REFKDT_DATA +3.0 +FRZK_DATA +0.15 +ZBOT_DATA +-8.0 +CZIL_DATA +0.1 +SMLOW_DATA +0.5 +SMHIGH_DATA +3.0 +LVCOEF_DATA +0.5 diff --git a/utils/laugh_tests/celia1990/settings/MPTABLE.TBL b/utils/laugh_tests/celia1990/settings/MPTABLE.TBL new file mode 100644 index 0000000000000000000000000000000000000000..0f0c59c02cc2f03d2a168b8523ffa793773861a7 --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/MPTABLE.TBL @@ -0,0 +1,284 @@ +&noah_mp_usgs_veg_categories + VEG_DATASET_DESCRIPTION = "USGS" + NVEG = 27 +/ +&noah_mp_usgs_parameters + ! NVEG = 27 + ! 1: Urban and Built-Up Land + ! 2: Dryland Cropland and Pasture + ! 3: Irrigated Cropland and Pasture + ! 4: Mixed Dryland/Irrigated Cropland and Pasture + ! 5: Cropland/Grassland Mosaic + ! 6: Cropland/Woodland Mosaic + ! 7: Grassland + ! 8: Shrubland + ! 9: Mixed Shrubland/Grassland + ! 10: Savanna + ! 11: Deciduous Broadleaf Forest + ! 12: Deciduous Needleleaf Forest + ! 13: Evergreen Broadleaf Forest + ! 14: Evergreen Needleleaf Forest + ! 15: Mixed Forest + ! 16: Water Bodies + ! 17: Herbaceous Wetland + ! 18: Wooded Wetland + ! 19: Barren or Sparsely Vegetated + ! 20: Herbaceous Tundra + ! 21: Wooded Tundra + ! 22: Mixed Tundra + ! 23: Bare Ground Tundra + ! 24: Snow or Ice + ! 25: Playa + ! 26: Lava + ! 27: White Sand + + ISURBAN = 1 + ISWATER = 16 + ISBARREN = 19 + ISSNOW = 24 + EBLFOREST = 13 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.00, 0.06, 0.06, 0.06, 0.06, 0.15, 0.06, 0.06, 0.06, 0.86, 0.80, 0.85, 1.10, 1.09, 0.80, 0.00, 0.06, 0.05, 0.00, 0.04, 0.06, 0.06, 0.03, 0.00, 0.01, 0.00, 0.00, + HVT = 15.0, 0.50, 0.50, 0.50, 0.50, 1.25, 0.50, 0.50, 0.50, 16.0, 16.0, 18.0, 20.0, 20.0, 16.0, 0.00, 0.50, 0.80, 0.00, 0.50, 0.80, 0.80, 0.50, 0.00, 0.10, 0.00, 0.00, + HVB = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 3.00, 3.50, 3.00, 4.00, 3.50, 3.00, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + DEN = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, + RC = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.00, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.07, 0.10, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.00, 0.11, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.35, 0.45, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.00, 0.58, 0.45, 0.00, 0.45, 0.45, 0.45, 0.45, 0.00, 0.45, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.00, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.00, 0.36, 0.16, 0.00, 0.16, 0.16, 0.16, 0.16, 0.00, 0.16, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.00, 0.58, 0.39, 0.00, 0.39, 0.39, 0.39, 0.39, 0.00, 0.39, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.00, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.07, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, + 0.00, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.10, 0.10, 0.25, 0.25, 0.10, 0.25, 0.10, 0.25, 0.00, 0.25, 0.25, 0.00, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.000, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.220, 0.001, 0.000, 0.220, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + 0.000, 0.380, 0.380, 0.380, 0.380, 0.380, 0.380, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.380, 0.001, 0.000, 0.380, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + + XL = 0.000, -0.30, -0.30, -0.30, -0.30, -0.30, -0.30, 0.010, 0.250, 0.010, 0.250, 0.010, 0.010, 0.010, 0.250, 0.000, -0.30, 0.250, 0.000, -0.30, 0.250, 0.250, 0.250, 0.000, 0.250, 0.000, 0.000, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.0, 1.6, 1.8, 1.2, 1.2, 1.30, 0.50, 0.65, 0.70, 0.65, 0.55, 0.2, 0.55, 0.5, 0.5, 0.0, 1.4, 1.4, 0.0, 1.2, 1.3, 1.4, 1.0, 0.0, 1.0, 0.0, 0.0, + DILEFC= 0.00, 0.50, 0.50, 0.50, 0.35, 0.20, 0.20, 0.20, 0.50, 0.50, 0.60, 1.80, 0.50, 1.20, 0.80, 0.00, 0.40, 0.40, 0.00, 0.40, 0.30, 0.40, 0.30, 0.00, 0.30, 0.00, 0.00, + DILEFW= 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.20, 0.50, 0.20, 0.20, 4.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.20, 0.20, 0.00, 0.20, 0.00, 0.00, + RMF25 = 0.00, 1.00, 1.40, 1.45, 1.45, 1.45, 1.80, 0.26, 0.26, 0.80, 3.00, 4.00, 0.65, 3.00, 3.00, 0.00, 3.20, 3.20, 0.00, 3.20, 3.00, 3.00, 3.00, 0.00, 3.00, 0.00, 0.00, + SLA = 60, 80, 80, 80, 80, 80, 60, 60, 60, 50, 80, 80, 80, 80, 80, 0, 80, 80, 0, 80, 80, 80, 80, 0, 80, 0, 0, + FRAGR = 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + TMIN = 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 268, 273, 265, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + VCMX25= 0.00, 80.0, 80.0, 80.0, 60.0, 70.0, 40.0, 40.0, 40.0, 40.0, 60.0, 60.0, 60.0, 50.0, 55.0, 0.00, 50.0, 50.0, 0.00, 50.0, 50.0, 50.0, 50.0, 0.00, 50.0, 0.00, 0.00, + TDLEF = 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 268, 278, 278, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + BP = 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 1.E15, + MP = 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0., 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.00, + RMS25 = 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.32, 0.10, 0.64, 0.30, 0.90, 0.80, 0.00, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, + RMR25 = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.20, 0.00, 0.00, 0.01, 0.01, 0.05, 0.05, 0.36, 0.03, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 0.00, + WDPOOL= 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, + WRRAT = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 30.0, 30.0, 30.0, 30.0, 30.0, 0.00, 0.00, 30.0, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, + MRP = 0.00, 0.23, 0.23, 0.23, 0.23, 0.23, 0.17, 0.19, 0.19, 0.40, 0.40, 0.37, 0.23, 0.37, 0.30, 0.00, 0.17, 0.40, 0.00, 0.17, 0.23, 0.20, 0.00, 0.00, 0.20, 0.00, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.3, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.4, 0.2, 0.3, 0.1, 0.4, 0.7, 0.5, 0.5, 0.4, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.3, 0.3, 0.8, 0.2, 0.5, 0.1, 0.9, 1.3, 0.5, 0.5, 0.4, 0.0, 0.4, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.5, 0.2, 1.3, 0.1, 0.8, 0.1, 1.2, 1.2, 0.5, 0.6, 0.5, 0.0, 0.6, 0.6, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.4, 0.1, 1.1, 0.1, 0.5, 0.1, 1.6, 1.0, 0.5, 0.6, 0.5, 0.0, 0.5, 0.5, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.4, 0.1, 0.2, 0.1, 1.4, 0.8, 0.5, 0.7, 0.6, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.6, 0.6, 0.5, 0.6, 0.5, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.4, 0.5, 0.5, 0.5, 0.3, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + + LAIM = 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.5, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 0.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.0, 3.5, 1.6, 1.0, 0.0, 0.6, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.7, 0.7, 0.7, 0.5, 0.7, 1.0, 1.5, 1.0, 1.2, 0.6, 3.5, 1.6, 1.0, 0.0, 0.7, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 1.2, 1.2, 1.2, 1.5, 1.2, 1.0, 2.0, 1.0, 3.0, 1.2, 3.5, 5.3, 2.3, 0.0, 1.2, 0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.0, 3.0, 3.0, 3.0, 2.5, 3.0, 1.0, 2.5, 1.0, 4.7, 2.0, 3.5, 5.5, 3.5, 0.0, 3.0, 0.7, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 3.5, 3.5, 3.5, 3.5, 3.5, 1.0, 3.0, 1.0, 4.5, 2.6, 3.5, 5.3, 4.3, 0.0, 3.5, 1.7, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 1.5, 1.5, 1.5, 3.5, 1.5, 1.0, 2.5, 1.0, 3.4, 1.7, 3.5, 5.3, 3.3, 0.0, 1.5, 3.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.5, 0.7, 0.7, 0.7, 2.0, 0.7, 1.0, 1.5, 1.0, 1.2, 1.0, 3.5, 4.2, 2.2, 0.0, 0.7, 2.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 1.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.5, 3.5, 2.2, 1.2, 0.0, 0.6, 1.6, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.2, 3.5, 2.2, 1.2, 0.0, 0.5, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 2.2, 1.2, 0.0, 0.4, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + SLAREA=0.0228,0.0200,0.0200,0.0295,0.0223,0.0277,0.0060,0.0227,0.0188,0.0236,0.0258,0.0200,0.0200,0.0090,0.0223,0.0422,0.0390, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 41.87, 0.00, 0.00, 2.52, 0.04, 17.11, 0.02, 21.62, 0.11, 22.80, 46.86, 0.00, 0.00, 0.46, 30.98, 2.31, 1.63, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.98, 0.00, 0.00, 0.16, 0.09, 0.28, 0.05, 0.92, 0.22, 0.59, 0.38, 0.00, 0.00, 3.34, 0.96, 1.47, 1.07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.82, 0.00, 0.00, 0.23, 0.05, 0.81, 0.03, 1.73, 1.26, 1.37, 1.84, 0.00, 0.00, 1.85, 1.84, 1.70, 1.21, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ + + +&noah_mp_modis_veg_categories + VEG_DATASET_DESCRIPTION = "modified igbp modis noah" + NVEG = 20 +/ + +&noah_mp_modis_parameters +! 1 'Evergreen Needleleaf Forest' -> USGS 14 +! 2, 'Evergreen Broadleaf Forest' -> USGS 13 +! 3, 'Deciduous Needleleaf Forest' -> USGS 12 +! 4, 'Deciduous Broadleaf Forest' -> USGS 11 +! 5, 'Mixed Forests' -> USGS 15 +! 6, 'Closed Shrublands' -> USGS 8 "shrubland" +! 7, 'Open Shrublands' -> USGS 9 "shrubland/grassland" +! 8, 'Woody Savannas' -> USGS 8 "shrubland" +! 9, 'Savannas' -> USGS 10 +! 10, 'Grasslands' -> USGS 7 +! 11 'Permanent wetlands' -> avg of USGS 17 and 18 (herb. wooded wetland) +! 12, 'Croplands' -> USGS 2 "dryland cropland" +! 13, 'Urban and Built-Up' -> USGS 1 +! 14 'cropland/natural vegetation mosaic' -> USGS 5 "cropland/grassland" +! 15, 'Snow and Ice' -> USGS 24 +! 16, 'Barren or Sparsely Vegetated' -> USGS 19 +! 17, 'Water' -> USGS 16 +! 18, 'Wooded Tundra' -> USGS 21 +! 19, 'Mixed Tundra' -> USGS 22 +! 20, 'Barren Tundra' -> USGS 23 + + ISURBAN = 13 + ISWATER = 17 + ISBARREN = 16 + ISSNOW = 15 + EBLFOREST = 2 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.09, 1.10, 0.85, 0.80, 0.80, 0.06, 0.06, 0.06, 0.86, 0.06, 0.055, 0.06, 1.00, 0.06, 0.00, 0.00, 0.00, 0.06, 0.06, 0.03, +! Z0MVT = 0.50, 0.50, 0.50, 0.50, 0.50, 0.05, 0.06, 0.05, 0.15, 0.12, 0.30, 0.15, 0.80, 0.14, 0.00, 0.01, 0.00, 0.30, 0.15, 0.10, + HVT = 20.0, 20.0, 18.0, 16.0, 16.0, 0.50, 0.50, 0.50, 16.0, 0.50, 0.65, 0.50, 15.0, 0.50, 0.00, 0.00, 0.00, 0.80, 0.80, 0.50, + HVB = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 5.00, 0.05, 0.075, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + DEN = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, + RC = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + 0.35, 0.45, 0.35, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.58, 0.515, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.45, 0.45, 0.45, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, 0.00, 0.36, 0.00, 0.00, 0.00, 0.16, 0.16, 0.16, + 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.58, 0.485, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.39, 0.39, 0.39, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, 0.00, 0.07, 0.00, 0.00, 0.00, 0.05, 0.05, 0.05, + 0.10, 0.25, 0.10, 0.25, 0.25, 0.10, 0.10, 0.10, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, 0.00, 0.25, 0.25, 0.25, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.220, 0.1105, 0.220, 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.380, 0.1905, 0.380, 0.000, 0.380, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + + XL = 0.010, 0.010, 0.010, 0.250, 0.250, 0.010, 0.250, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, +! CWPVT = 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, 0.70, 0.65, 0.65, 0.50, 1.4, 1.6, 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, 1.4, 1.0, + DILEFC= 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, 0.50, 0.20, 0.50, 0.20, 0.4, 0.50, 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, 0.40, 0.30, + DILEFW= 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, 0.20, 0.20, + RMF25 = 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, + SLA = 80, 80, 80, 80, 80, 60, 60, 60, 50, 60, 80, 80, 60, 80, 0, 0, 0, 80, 80, 80, + FRAGR = 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, 0.10, 0.10, + TMIN = 265, 273, 268, 273, 268, 273, 273, 273, 273, 273, 268, 273, 0, 273, 0, 0, 0, 268, 268, 268, + VCMX25= 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, 50.0, 50.0, + TDLEF = 278, 278, 268, 278, 268, 278, 278, 278, 278, 278, 268, 278, 278, 278, 0, 0, 0, 268, 268, 268, + BP = 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, + MP = 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, 0.06, 0.06, + RMS25 = 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.00, + RMR25 = 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, 1.5, 1.5, + WDPOOL= 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, + WRRAT = 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, + MRP = 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, 0.19, 0.19, 0.40, 0.17, 0.285, 0.23, 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, 0.20, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.3, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.5, 0.5, 0.7, 0.4, 0.4, 0.2, 0.3, 0.2, 0.1, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 1.3, 0.9, 0.4, 0.2, 0.5, 0.2, 0.1, 0.8, 0.4, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 1.2, 1.2, 0.5, 0.1, 0.8, 0.1, 0.1, 1.3, 0.6, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.6, 0.5, 1.0, 1.6, 0.5, 0.1, 0.5, 0.1, 0.1, 1.1, 0.5, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.7, 0.5, 0.8, 1.4, 0.6, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 0.6, 0.6, 0.5, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 0.5, 0.4, 0.3, 0.1, 0.2, 0.1, 0.1, 0.4, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + + LAIM = 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.4, 0.3, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.45, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.3, 1.0, 1.0, 1.0, 1.0, 1.0, 0.6, 0.5, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.6, 1.2, 1.0, 1.0, 1.5, 1.0, 1.0, 0.7, 0.55, 0.0, 0.0, 0.7, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 5.3, 4.5, 1.2, 3.0, 2.3, 1.0, 2.0, 1.0, 1.0, 1.2, 0.85, 1.0, 0.0, 1.2, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 5.5, 4.5, 2.0, 4.7, 3.5, 1.0, 2.5, 1.0, 1.0, 3.0, 1.85, 2.0, 0.0, 3.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 5.3, 4.5, 2.6, 4.5, 4.3, 1.0, 3.0, 1.0, 1.0, 3.5, 2.6, 3.0, 0.0, 3.5, 0.0, 0.0, 0.0, 2.0, 2.0, 0.0, + 5.3, 4.5, 1.7, 3.4, 3.3, 1.0, 2.5, 1.0, 1.0, 1.5, 2.25, 3.0, 0.0, 1.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 4.2, 4.5, 1.0, 1.2, 2.2, 1.0, 1.5, 1.0, 1.0, 0.7, 1.6, 1.5, 0.0, 0.7, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 2.2, 4.5, 0.5, 0.3, 1.2, 1.0, 1.0, 1.0, 1.0, 0.6, 1.1, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 2.2, 4.5, 0.2, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.5, 0.65, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2.2, 4.5, 0.0, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.4, 0.4, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + +! LAIM = 5.1, 3.3, 0.0, 1.9, 3.0, 1.0, 0.8, 0.5, 0.5, 0.7, 0.3, 1.8, 0.0, 2.4, 0.0, 0.0, 0.0, 0.6, 0.7, 0.0, +! 5.0, 3.6, 0.0, 1.9, 2.9, 1.0, 0.6, 1.0, 1.0, 0.7, 0.45, 1.9, 0.0, 2.6, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.1, 4.4, 0.0, 2.1, 3.3, 1.0, 0.8, 1.8, 1.7, 1.1, 0.5, 2.6, 0.0, 2.9, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.3, 5.4, 0.6, 2.5, 4.0, 1.0, 0.9, 2.6, 2.9, 1.7, 0.55, 3.9, 0.0, 3.4, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.9, 6.2, 1.2, 3.1, 5.0, 1.0, 1.5, 3.4, 3.6, 2.5, 0.85, 5.2, 0.0, 4.0, 0.0, 0.0, 0.0, 0.8, 1.0, 0.0, +! 6.3, 6.4, 2.0, 3.3, 5.4, 1.0, 2.1, 3.6, 3.5, 2.7, 1.85, 5.6, 0.0, 4.2, 0.0, 0.0, 0.0, 2.0, 2.3, 0.0, +! 6.4, 5.9, 2.6, 3.3, 5.4, 1.0, 2.6, 3.4, 2.9, 2.8, 2.6, 5.3, 0.0, 4.1, 0.0, 0.0, 0.0, 3.3, 3.3, 0.0, +! 6.1, 5.6, 1.7, 3.1, 5.0, 1.0, 2.4, 3.2, 2.7, 2.4, 2.25, 4.5, 0.0, 3.8, 0.0, 0.0, 0.0, 3.3, 3.0, 0.0, +! 6.0, 5.3, 1.0, 2.9, 4.8, 1.0, 2.2, 2.9, 2.4, 2.1, 1.6, 4.1, 0.0, 3.7, 0.0, 0.0, 0.0, 2.8, 3.0, 0.0, +! 5.5, 4.7, 0.5, 2.6, 4.1, 1.0, 1.6, 2.3, 1.8, 1.7, 1.1, 3.2, 0.0, 3.2, 0.0, 0.0, 0.0, 1.4, 1.4, 0.0, +! 5.2, 4.0, 0.2, 2.2, 3.4, 1.0, 1.0, 1.5, 1.4, 1.3, 0.65, 2.3, 0.0, 2.7, 0.0, 0.0, 0.0, 0.5, 0.7, 0.0, +! 5.1, 3.2, 0.0, 1.9, 3.0, 1.0, 0.9, 0.7, 0.7, 0.8, 0.4, 1.7, 0.0, 2.4, 0.0, 0.0, 0.0, 0.8, 0.7, 0.0, + + SLAREA=0.0090, 0.0200, 0.0200, 0.0258, 0.0223, 0.0227, 0.0188, 0.0227, 0.0236, 0.0060, 0.0295, 0.0200, 0.0228, 0.0223, 0.02, 0.02, 0.0422, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 0.46, 0.00, 0.00, 46.86, 30.98, 21.62, 0.11, 21.62, 22.80, 0.02, 0.815, 0.00, 41.87, 0.04, 0.0, 0.0, 2.31, 0.0, 0.0, 0.0, + 3.34, 0.00, 0.00, 0.38, 0.96, 0.92, 0.22, 0.92, 0.59, 0.05, 0.535, 0.00, 0.98, 0.09, 0.0, 0.0, 1.47, 0.0, 0.0, 0.0, + 1.85, 0.00, 0.00, 1.84, 1.84, 1.73, 1.26, 1.73, 1.37, 0.03, 0.605, 0.00, 1.82, 0.05, 0.0, 0.0, 1.70, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ diff --git a/utils/laugh_tests/celia1990/settings/Model_Output.txt b/utils/laugh_tests/celia1990/settings/Model_Output.txt new file mode 100644 index 0000000000000000000000000000000000000000..19ed37469f9d3860b3414756a551cb850ab9955b --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/Model_Output.txt @@ -0,0 +1,34 @@ +! --------- +! model variables +! --------- +time | 1 +nSnow | 1 +nSoil | 1 +nLayers | 1 +mLayerHeight | 1 +iLayerLiqFluxSoil | 1 +mLayerDepth | 1 +mLayerVolFracIce | 1 +mLayerVolFracLiq | 1 +mLayerMatricHead | 1 +mLayerTranspire | 1 +mLayerBaseflow | 1 +mLayerCompress | 1 +iLayerNrgFlux | 1 +basin__TotalArea | 1 +scalarGroundEvaporation | 1 +scalarSoilBaseflow | 1 +scalarSoilDrainage | 1 +scalarInfiltration | 1 +scalarSnowDrainage | 1 +scalarSnowSublimation | 1 +scalarThroughfallRain | 1 +scalarThroughfallSnow | 1 +scalarRainfall | 1 +scalarSnowfall | 1 +scalarRainPlusMelt | 1 +fieldCapacity | 1 +pptrate | 1 +averageRoutedRunoff | 1 +scalarSWE | 1 +fieldCapacity | 1 diff --git a/utils/laugh_tests/celia1990/settings/SOILPARM.TBL b/utils/laugh_tests/celia1990/settings/SOILPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..b87d1bae502460279b1e6389ff34c2d3ce842510 --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/SOILPARM.TBL @@ -0,0 +1,59 @@ +Soil Parameters +STAS +19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 2.79, 0.010, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.010, 0.92, 'SAND' +2, 4.26, 0.028, -1.044, 0.421, 0.383, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.82, 'LOAMY SAND' +3, 4.74, 0.047, -0.569, 0.434, 0.383, 0.141, 5.23E-6, 0.805E-5, 0.047, 0.60, 'SANDY LOAM' +4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.25, 'SILT LOAM' +5, 5.33, 0.084, 0.162, 0.476, 0.383, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.10, 'SILT' +6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.40, 'LOAM' +7, 6.66, 0.067, -1.491, 0.404, 0.314, 0.135, 4.45E-6, 0.990E-5, 0.067, 0.60, 'SANDY CLAY LOAM' +8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.04E-6, 0.237E-4, 0.120, 0.10, 'SILTY CLAY LOAM' +9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 0.113E-4, 0.103, 0.35, 'CLAY LOAM' +10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 0.187E-4, 0.100, 0.52, 'SANDY CLAY' +11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 0.964E-5, 0.126, 0.10, 'SILTY CLAY' +12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 0.112E-4, 0.138, 0.25, 'CLAY' +13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 'WATER' +15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.07, 'BEDROCK' +16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.25, 'OTHER(land-ice)' +17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 'LAVA' +19, 2.79, 0.01, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.01, 0.92, 'WHITE SAND' +Soil Parameters +STAS-RUC +19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 4.05, 0.045, 1.47, 0.395, 0.236, 0.121, 1.76E-4, 0.608E-6, 0.068, 0.92, 'SAND' +2, 4.38, 0.057, 1.41, 0.410, 0.383, 0.090, 1.56E-4, 0.514E-5, 0.075, 0.82, 'LOAMY SAND' +3, 4.90, 0.065, 1.34, 0.435, 0.383, 0.218, 3.47E-5, 0.805E-5, 0.114, 0.60, 'SANDY LOAM' +4, 5.30, 0.067, 1.27, 0.485, 0.360, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.25, 'SILT LOAM' +5, 5.30, 0.034, 1.27, 0.485, 0.383, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.10, 'SILT' +6, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.40, 'LOAM' +7, 7.12, 0.100, 1.18, 0.420, 0.314, 0.299, 6.30E-6, 0.990E-5, 0.175, 0.60, 'SANDY CLAY LOAM' +8, 7.75, 0.089, 1.32, 0.477, 0.387, 0.356, 1.70E-6, 0.237E-4, 0.218, 0.10, 'SILTY CLAY LOAM' +9, 8.52, 0.095, 1.23, 0.476, 0.382, 0.630, 2.45E-6, 0.113E-4, 0.250, 0.35, 'CLAY LOAM' +10, 10.40, 0.100, 1.18, 0.426, 0.338, 0.153, 2.17E-6, 0.187E-4, 0.219, 0.52, 'SANDY CLAY' +11, 10.40, 0.070, 1.15, 0.492, 0.404, 0.490, 1.03E-6, 0.964E-5, 0.283, 0.10, 'SILTY CLAY' +12, 11.40, 0.068, 1.09, 0.482, 0.412, 0.405, 1.28E-6, 0.112E-4, 0.286, 0.25, 'CLAY' +13, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 'WATER' +15, 4.05, 0.004, 2.03, 0.200, 0.17, 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 'BEDROCK' +16, 4.90, 0.065, 2.10, 0.435, 0.283, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 'OTHER(land-ice)' +17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.060, 0.52, 'LAVA' +19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 'WHITE SAND' +Soil Parameters +ROSETTA +12,1 'theta_res theta_sat vGn_alpha vGn_n k_soil BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1 0.098 0.459 -1.496 1.253 1.70799e-06 1.40 0.068 1.09 0.482 0.412 0.405 1.28E-6 0.112E-4 0.286 0.25 'CLAY' +2 0.079 0.442 -1.581 1.416 9.47297e-07 8.52 0.095 1.23 0.476 0.382 0.630 2.45E-6 0.113E-4 0.250 0.35 'CLAY LOAM' +3 0.061 0.399 -1.112 1.472 1.39472e-06 5.39 0.078 1.21 0.451 0.329 0.478 6.95E-6 0.143E-4 0.155 0.40 'LOAM' +4 0.049 0.390 -3.475 1.746 1.21755e-05 4.38 0.057 1.41 0.410 0.383 0.090 1.56E-4 0.514E-5 0.075 0.82 'LOAMY SAND' +5 0.053 0.375 -3.524 3.177 7.43852e-05 4.05 0.045 1.47 0.395 0.236 0.121 1.76E-4 0.608E-6 0.068 0.92 'SAND' +6 0.117 0.385 -3.342 1.208 1.31367e-06 0.40 0.100 1.18 0.426 0.338 0.153 2.17E-6 0.187E-4 0.219 0.52 'SANDY CLAY' +7 0.063 0.384 -2.109 1.330 1.52576e-06 7.12 0.100 1.18 0.420 0.314 0.299 6.30E-6 0.990E-5 0.175 0.60 'SANDY CLAY LOAM' +8 0.039 0.387 -2.667 1.449 4.43084e-06 4.90 0.065 1.34 0.435 0.383 0.218 3.47E-5 0.805E-5 0.114 0.60 'SANDY LOAM' +9 0.050 0.489 -0.658 1.679 5.06391e-06 5.30 0.034 1.27 0.485 0.383 0.786 7.20E-6 0.239E-4 0.179 0.10 'SILT' +10 0.111 0.481 -1.622 1.321 1.11298e-06 0.40 0.070 1.15 0.492 0.404 0.490 1.03E-6 0.964E-5 0.283 0.10 'SILTY CLAY' +11 0.090 0.482 -0.839 1.521 1.28673e-06 7.75 0.089 1.32 0.477 0.387 0.356 1.70E-6 0.237E-4 0.218 0.10 'SILTY CLAY LOAM' +12 0.065 0.439 -0.506 1.663 2.11099e-06 5.30 0.067 1.27 0.485 0.360 0.786 7.20E-6 0.239E-4 0.179 0.25 'SILT LOAM' diff --git a/utils/laugh_tests/celia1990/settings/VEGPARM.TBL b/utils/laugh_tests/celia1990/settings/VEGPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..be03224ef59386e2503e147729ffeaef9aa12553 --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/VEGPARM.TBL @@ -0,0 +1,119 @@ +Vegetation Parameters +USGS +27,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ' +1, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up Land' +2, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Dryland Cropland and Pasture' +3, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 'Irrigated Cropland and Pasture' +4, .80, 3, 40., 100., 36.25, 0.04, 66., 1.00, 4.50, .920, .985, .18, .23, .05, .15, 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'Cropland/Grassland Mosaic' +6, .80, 3, 70., 65., 44.14, 0.04, 60., 2.00, 4.00, .930, .985, .16, .20, .20, .20, 'Cropland/Woodland Mosaic' +7, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grassland' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Shrubland' +9, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Mixed Shrubland/Grassland' +10, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savanna' +11, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +12, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +13, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +14, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +15, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forest' +16, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water Bodies' +17, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 'Herbaceous Wetland' +18, .60, 2, 100., 30., 51.93, 0.02, 50., 2.00, 5.80, .950, .950, .14, .14, .40, .40, 'Wooded Wetland' +19, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +20, .60, 3, 150., 100., 42.00, 0.025, 68., 0.41, 3.35, .920, .920, .15, .20, .10, .10, 'Herbaceous Tundra' +21, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +22, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +23, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Bare Ground Tundra' +24, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow or Ice' +25, .50, 1, 40., 100., 36.25, 0.02, 75., 0.01, 0.01, .890, .890, .30, .30, .01, .01, 'Playa' +26, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .880, .880, .16, .16, .15, .15, 'Lava' +27, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .830, .830, .60, .60, .01, .01, 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 +Vegetation Parameters +MODIFIED_IGBP_MODIS_NOAH +20,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX' +1 .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forests' +6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Closed Shrublands' +7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Open Shrublands' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Woody Savannas' +9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savannas' +10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grasslands' +11 .60, 2, 70., 65., 55.97 0.015 59., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 'Permanent wetlands' +12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Croplands' +13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up' +14 .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'cropland/natural vegetation mosaic' +15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow and Ice' +16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water' +18, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +19, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +20, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Barren Tundra' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +16 +NATURAL +14 +Vegetation Parameters +USGS-RUC +27,1, 'ALBEDO Z0 LEMI PC SHDFAC NROOT RS RGL HS SNUP LAI MAXALB' +1, .18, .50, .88, .40, .10, 1, 200., 999., 999.0, 0.04, 4.0, 40., 'Urban and Built-Up Land' +2, .17, .06, .92, .30, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Dryland Cropland and Pasture' +3, .18, .075, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Irrigated Cropland and Pasture' +4, .18, .065, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .18, .05, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Cropland/Grassland Mosaic' +6, .16, .20, .93, .40, .80, 3, 70., 65., 44.14, 0.04, 4.0, 60., 'Cropland/Woodland Mosaic' +7, .19, .075 .92, .40, .80, 3, 40., 100., 36.35, 0.04, 4.0, 64., 'Grassland' +8, .22, .10, .88, .40, .70, 3, 300., 100., 42.00, 0.03, 4.0, 69., 'Shrubland' +9, .20, .11, .90, .40, .70, 3, 170., 100., 39.18, 0.035, 4.0, 67., 'Mixed Shrubland/Grassland' +10, .20, .15, .92, .40, .50, 3, 70., 65., 54.53, 0.04, 4.0, 45., 'Savanna' +11, .16, .50, .93, .55, .80, 4, 100., 30., 54.53, 0.08, 4.0, 58., 'Deciduous Broadleaf Forest' +12, .14, .50, .94, .55, .70, 4, 150., 30., 47.35, 0.08, 4.0, 54., 'Deciduous Needleleaf Forest' +13, .12, .50, .95, .55, .95, 4, 150., 30., 41.69, 0.08, 4.0, 32., 'Evergreen Broadleaf Forest' +14, .12, .50, .95, .55, .70, 4, 125., 30., 47.35, 0.08, 4.0, 52., 'Evergreen Needleleaf Forest' +15, .13, .50, .94, .55, .80, 4, 125., 30., 51.93, 0.08, 4.0, 53., 'Mixed Forest' +16, .08, .0001, .98, .00, .00, 0, 100., 30., 51.75, 0.01, 4.0, 70., 'Water Bodies' +17, .14, .20, .95, .55, .60, 2, 40., 100., 60.00, 0.01, 4.0, 35., 'Herbaceous Wetland' +18, .14, .40, .95, .55, .60, 2, 100., 30., 51.93, 0.02, 4.0, 30., 'Wooded Wetland' +19, .25, .05, .85, .30, .01, 1, 999., 999., 999.0, 0.02, 4.0, 69., 'Barren or Sparsely Vegetated' +20, .15, .10, .92, .30, .60, 3, 150., 100., 42.00, 0.025, 4.0, 58., 'Herbaceous Tundra' +21, .15, .15, .93, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Wooded Tundra' +22, .15, .10, .92, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Mixed Tundra' +23, .25, .065 .85, .30, .30, 2, 200., 100., 42.00, 0.02, 4.0, 65., 'Bare Ground Tundra' +24, .55, .05, .95, .00, .00, 1, 999., 999., 999.0, 0.02, 4.0, 75., 'Snow or Ice' +25, .30, .01, .85, .30, .50, 1, 40., 100., 36.25, 0.02, 4.0, 69., 'Playa' +26, .16, .15, .85, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'Lava' +27, .60, .01, .90, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 diff --git a/utils/laugh_tests/celia1990/settings/summa_fileManager_celia1990.txt b/utils/laugh_tests/celia1990/settings/summa_fileManager_celia1990.txt new file mode 100644 index 0000000000000000000000000000000000000000..d2d4772244827a66b572b8996bb5933c8a1de4e5 --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/summa_fileManager_celia1990.txt @@ -0,0 +1,22 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:30' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/celia1990/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/celia1990/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/celia1990/output/' ! +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '2000-01-01' +decisionsFile 'summa_zDecisions_celia1990.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_celia1990.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_celia1990.nc' ! initial_cond +outFilePrefix 'summa-actors_celia1990' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! \ No newline at end of file diff --git a/utils/laugh_tests/celia1990/settings/summa_fileManager_verify_celia1990.txt b/utils/laugh_tests/celia1990/settings/summa_fileManager_verify_celia1990.txt new file mode 100644 index 0000000000000000000000000000000000000000..a874ea822564327fc92160bbf1601cdde2b6d0a2 --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/summa_fileManager_verify_celia1990.txt @@ -0,0 +1,20 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:30' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/celia1990/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/celia1990/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/celia1990/verification_data/' ! +decisionsFile 'summa_zDecisions_celia1990.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_celia1990.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_celia1990.nc' ! initial_cond +outFilePrefix 'summa_celia1990' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! \ No newline at end of file diff --git a/utils/laugh_tests/celia1990/settings/summa_zBasinParamInfo.txt b/utils/laugh_tests/celia1990/settings/summa_zBasinParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..1926fd71fbc6ce90cd4180f652ae414885e4b611 --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/summa_zBasinParamInfo.txt @@ -0,0 +1,35 @@ +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! ***** DEFINITION OF BASIN PARAMETERS ********************************************************************************** +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! *********************************************************************************************************************** +! DEFINE BASIN MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a1), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! *********************************************************************************************************************** +! +! ******************************************************************** +! define format string for parameter descriptions +! ******************************************************************** +'(a25,1x,a1,1x,3(f12.4,1x,a1,1x))' ! format string for parameter descriptions (must be in single quotes) +! ******************************************************************** +! baseflow +! ******************************************************************** +basin__aquiferHydCond | 0.0100 | 0.0001 | 10.0000 +basin__aquiferScaleFactor | 3.5000 | 0.1000 | 100.0000 +basin__aquiferBaseflowExp | 5.0000 | 1.0000 | 10.0000 +! ******************************************************************** +! within-grid routing +! ******************************************************************** +routingGammaShape | 2.5000 | 2.0000 | 3.0000 +routingGammaScale | 20000.0000 | 1.0000 | 5000000.0000 +! ******************************************************************** diff --git a/utils/laugh_tests/celia1990/settings/summa_zDecisions_celia1990.txt b/utils/laugh_tests/celia1990/settings/summa_zDecisions_celia1990.txt new file mode 100644 index 0000000000000000000000000000000000000000..92822de7e65f51e81711c5c982a52914eee16fe8 --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/summa_zDecisions_celia1990.txt @@ -0,0 +1,168 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE MODEL DECISIONS +! *********************************************************************************************************************** +! This file defines the modeling decisions used. +! NOTES: +! (1) lines starting with ! are treated as comment lines -- there is no limit on the number of comment lines +! (2) the name of the decision is followed by the character string defining the decision +! (3) the simulation start/end times must be within single quotes +! *********************************************************************************************************************** +! *********************************************************************************************************************** +soilCatTbl ROSETTA ! (03) soil-category dateset +vegeParTbl USGS ! (04) vegetation category dataset +soilStress NoahType ! (05) choice of function for the soil moisture control on stomatal resistance +stomResist BallBerry ! (06) choice of function for stomatal resistance +! *********************************************************************************************************************** +num_method itertive ! (07) choice of numerical method +fDerivMeth analytic ! (08) method used to calculate flux derivatives +LAI_method monTable ! (09) method used to determine LAI and SAI +f_Richards mixdform ! (10) form of Richard's equation +groundwatr noXplict ! (11) choice of groundwater parameterization +hc_profile constant ! (12) choice of hydraulic conductivity profile +bcUpprTdyn zeroFlux ! (13) type of upper boundary condition for thermodynamics +bcLowrTdyn zeroFlux ! (14) type of lower boundary condition for thermodynamics +bcUpprSoiH presHead ! (15) type of upper boundary condition for soil hydrology +bcLowrSoiH presHead ! (16) type of lower boundary condition for soil hydrology +veg_traits CM_QJRMS1988 ! (17) choice of parameterization for vegetation roughness length and displacement height +canopyEmis difTrans ! (18) choice of parameterization for canopy emissivity +snowIncept lightSnow ! (19) choice of parameterization for snow interception +windPrfile logBelowCanopy ! (20) choice of wind profile through the canopy +astability louisinv ! (21) choice of stability function +canopySrad CLM_2stream ! (22) choice of canopy shortwave radiation method +alb_method varDecay ! (23) choice of albedo representation +compaction anderson ! (24) choice of compaction routine +snowLayers CLM_2010 ! (25) choice of method to combine and sub-divide snow layers +thCondSnow jrdn1991 ! (26) choice of thermal conductivity representation for snow +thCondSoil mixConstit ! (27) choice of thermal conductivity representation for soil +spatial_gw localColumn ! (28) choice of method for the spatial representation of groundwater +subRouting timeDlay ! (29) choice of method for sub-grid routing +! *********************************************************************************************** +! ***** description of the options available -- nothing below this point is read **************** +! *********************************************************************************************** +! ----------------------------------------------------------------------------------------------- +! (01) simulation start time +! (02) simulation end time +! ----------------------------------------------------------------------------------------------- +! (03) soil-category dateset +! STAS ! STATSGO dataset +! STAS-RUC ! ?? +! ROSETTA ! merged Rosetta table with STAS-RUC +! ----------------------------------------------------------------------------------------------- +! (04) vegetation category dataset +! USGS ! USGS 24/27 category dataset +! MODIFIED_IGBP_MODIS_NOAH ! MODIS 20-category dataset +! ----------------------------------------------------------------------------------------------- +! (05) choice of function for the soil moisture control on stomatal resistance +! NoahType ! thresholded linear function of volumetric liquid water content +! CLM_Type ! thresholded linear function of matric head +! SiB_Type ! exponential of the log of matric head +! ----------------------------------------------------------------------------------------------- +! (06) choice of function for stomatal resistance +! BallBerry ! Ball-Berry +! Jarvis ! Jarvis +! ----------------------------------------------------------------------------------------------- +! (07) choice of numerical method +! itertive ! iterative +! non_iter ! non-iterative +! itersurf ! iterate only on the surface energy balance +! ----------------------------------------------------------------------------------------------- +! (08) method used to calculate flux derivatives +! numericl ! numerical derivatives +! analytic ! analytical derivatives +! ----------------------------------------------------------------------------------------------- +! (09) method used to determine LAI and SAI +! monTable ! LAI/SAI taken directly from a monthly table for different vegetation classes +! specified ! LAI/SAI computed from green vegetation fraction and winterSAI and summerLAI parameters +! ----------------------------------------------------------------------------------------------- +! (10) form of Richards' equation +! moisture ! moisture-based form of Richards' equation +! mixdform ! mixed form of Richards' equation +! ----------------------------------------------------------------------------------------------- +! (11) choice of groundwater parameterization +! qTopmodl ! topmodel parameterization +! bigBuckt ! a big bucket (lumped aquifer model) +! noXplict ! no explicit groundwater parameterization +! ----------------------------------------------------------------------------------------------- +! (12) choice of hydraulic conductivity profile +! constant ! constant hydraulic conductivity with depth +! pow_prof ! power-law profile +! ----------------------------------------------------------------------------------------------- +! (13) choice of upper boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! nrg_flux ! energy flux +! ----------------------------------------------------------------------------------------------- +! (14) choice of lower boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (15) choice of upper boundary conditions for soil hydrology +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! liq_flux ! liquid water flux +! ----------------------------------------------------------------------------------------------- +! (16) choice of lower boundary conditions for soil hydrology +! drainage ! free draining +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! bottmPsi ! function of matric head in the lower-most layer +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (17) choice of parameterization for vegetation roughness length and displacement height +! Raupach_BLM1994 ! Raupach (BLM 1994) "Simplified expressions..." +! CM_QJRMS1988 ! Choudhury and Monteith (QJRMS 1998) "A four layer model for the heat budget..." +! vegTypeTable ! constant parameters dependent on the vegetation type +! ----------------------------------------------------------------------------------------------- +! (18) choice of parameterization for canopy emissivity +! simplExp ! simple exponential function +! difTrans ! parameterized as a function of diffuse transmissivity +! ----------------------------------------------------------------------------------------------- +! (19) choice of parameterization for snow interception +! stickySnow ! maximum interception capacity an increasing function of temerature +! lightSnow ! maximum interception capacity an inverse function of new snow density +! ----------------------------------------------------------------------------------------------- +! (20) choice of wind profile +! exponential ! exponential wind profile extends to the surface +! logBelowCanopy ! logarithmic profile below the vegetation canopy +! ----------------------------------------------------------------------------------------------- +! (21) choice of stability function +! standard ! standard MO similarity, a la Anderson (1979) +! louisinv ! Louis (1979) inverse power function +! mahrtexp ! Mahrt (1987) exponential function +! ----------------------------------------------------------------------------------------------- +! (22) choice of canopy shortwave radiation method +! noah_mp ! full Noah-MP implementation (including albedo) +! CLM_2stream ! CLM 2-stream model (see CLM documentation) +! UEB_2stream ! UEB 2-stream model (Mahat and Tarboton, WRR 2011) +! NL_scatter ! Simplified method Nijssen and Lettenmaier (JGR 1999) +! BeersLaw ! Beer's Law (as implemented in VIC) +! ----------------------------------------------------------------------------------------------- +! (23) choice of albedo representation +! conDecay ! constant decay rate (e.g., VIC, CLASS) +! varDecay ! variable decay rate (e.g., BATS approach, with destructive metamorphism + soot content) +! ----------------------------------------------------------------------------------------------- +! (24) choice of compaction routine +! consettl ! constant settlement rate +! anderson ! semi-empirical method of Anderson (1976) +! ----------------------------------------------------------------------------------------------- +! (25) choice of method to combine and sub-divide snow layers +! CLM_2010 ! CLM option: combination/sub-dividion rules depend on layer index +! jrdn1991 ! SNTHERM option: same combination/sub-dividion rules applied to all layers +! ----------------------------------------------------------------------------------------------- +! (26) choice of thermal conductivity representation for snow +! tyen1965 ! Yen (1965) +! melr1977 ! Mellor (1977) +! jrdn1991 ! Jordan (1991) +! smnv2000 ! Smirnova et al. (2000) +! ----------------------------------------------------------------------------------------------- +! (27) choice of thermal conductivity representation for soil +! funcSoilWet ! function of soil wetness +! mixConstit ! mixture of constituents +! hanssonVZJ ! test case for the mizoguchi lab experiment, Hansson et al. VZJ 2004 +! ----------------------------------------------------------------------------------------------- +! (28) choice of method for the spatial representation of groundwater +! localColumn ! separate groundwater representation in each local soil column +! singleBasin ! single groundwater store over the entire basin +! ----------------------------------------------------------------------------------------------- +! (29) choice of method for sub-grid routing +! timeDlay ! time-delay histogram +! qInstant ! instantaneous routing +! *********************************************************************************************** +! history Mon Jul 20 16:08:18 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/celia1990/summa_fileManager_celia1990.txt diff --git a/utils/laugh_tests/celia1990/settings/summa_zForcingFileList.txt b/utils/laugh_tests/celia1990/settings/summa_zForcingFileList.txt new file mode 100644 index 0000000000000000000000000000000000000000..d124336ff86e442997850472484b0554eedcc58b --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/summa_zForcingFileList.txt @@ -0,0 +1,8 @@ +! **************************************************************************************************** +! List of forcing data files used +! +! This file includes one "word" per line: +! (1) The name of a forcing file +! --> filename must be in single quotes +! **************************************************************************************************** + 'celia1990_forcing.nc' diff --git a/utils/laugh_tests/celia1990/settings/summa_zForcingInfo_celia1990.txt b/utils/laugh_tests/celia1990/settings/summa_zForcingInfo_celia1990.txt new file mode 100644 index 0000000000000000000000000000000000000000..6163dd00baaa63551343468719b645529ad92479 --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/summa_zForcingInfo_celia1990.txt @@ -0,0 +1,29 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE FORCING FILE +! *********************************************************************************************************************** +! This file defines the name of the forcing data file, the number of columns in the file, the column index for each data +! variable, the start index of the simulation period, the length of the simulation period, +! and the length of the data time step +! *********************************************************************************************************************** +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "|" must be present (format a1), as these are used to check the integrety of the file +! *********************************************************************************************************************** +'(a15,a1,1x,a)' +filenmData | celia1990_forcing.txt ! name of the forcing data file (must be in single quotes) +ncols | 13 ! number of columns in the forcing file +iyyy | 1 ! year +im | 2 ! month +id | 3 ! day +ih | 4 ! hour +imin | 5 ! minute +pptrate | 7 ! precipitation rate (kg m-2 s-1) +SWRadAtm | 8 ! downwelling shortwave radiaiton (W m-2) +LWRadAtm | 9 ! downwelling longwave radiation (W m-2) +airtemp | 10 ! air temperature (K) +windspd | 11 ! windspeed (m/s) +airpres | 12 ! pressure (Pa) +spechum | 13 ! specific humidity (g/g) +data_step | 1800 ! length of time step (seconds) diff --git a/utils/laugh_tests/celia1990/settings/summa_zInitialCond_celia1990.nc b/utils/laugh_tests/celia1990/settings/summa_zInitialCond_celia1990.nc new file mode 100644 index 0000000000000000000000000000000000000000..0dbc2e3ec3eeaa5b94ccde92cc300f96a04dba50 Binary files /dev/null and b/utils/laugh_tests/celia1990/settings/summa_zInitialCond_celia1990.nc differ diff --git a/utils/laugh_tests/celia1990/settings/summa_zLocalAttributes.nc b/utils/laugh_tests/celia1990/settings/summa_zLocalAttributes.nc new file mode 100644 index 0000000000000000000000000000000000000000..6d6d398ea65ee01cae90ce82c2e6f33dd8e845cf Binary files /dev/null and b/utils/laugh_tests/celia1990/settings/summa_zLocalAttributes.nc differ diff --git a/utils/laugh_tests/celia1990/settings/summa_zLocalParamInfo.txt b/utils/laugh_tests/celia1990/settings/summa_zLocalParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..92bbfe8d80a1d20f699af4c2f62abbbd670533e2 --- /dev/null +++ b/utils/laugh_tests/celia1990/settings/summa_zLocalParamInfo.txt @@ -0,0 +1,226 @@ +! ======================================================================================================================= +! ======================================================================================================================= +! ===== DEFINITION OF MODEL PARAMETERS ================================================================================== +! ======================================================================================================================= +! ======================================================================================================================= +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! ======================================================================================================================= +! DEFINE SITE MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! ======================================================================================================================= +! +! ==================================================================== +! define format string for parameter descriptions +! ==================================================================== +'(a25,1x,3(a1,1x,f12.4,1x))' ! format string (must be in single quotes) +! ==================================================================== +! boundary conditions +! ==================================================================== +upperBoundHead | -0.7500 | -100.0000 | -0.0100 +lowerBoundHead | -10.0000 | -100.0000 | -0.0100 +upperBoundTheta | 0.2004 | 0.1020 | 0.3680 +lowerBoundTheta | 0.1100 | 0.1020 | 0.3680 +upperBoundTemp | 272.1600 | 270.1600 | 280.1600 +lowerBoundTemp | 274.1600 | 270.1600 | 280.1600 +! ==================================================================== +! precipitation partitioning +! ==================================================================== +tempCritRain | 273.1600 | 272.1600 | 274.1600 +tempRangeTimestep | 2.0000 | 0.5000 | 5.0000 +frozenPrecipMultip | 1.0000 | 0.5000 | 1.5000 +! ==================================================================== +! snow properties +! ==================================================================== +snowfrz_scale | 50.0000 | 10.0000 | 1000.0000 +fixedThermalCond_snow | 0.3500 | 0.1000 | 1.0000 +! ==================================================================== +! snow albedo +! ==================================================================== +albedoMax | 0.8400 | 0.7000 | 0.9500 +albedoMinWinter | 0.5500 | 0.6000 | 1.0000 +albedoMinSpring | 0.5500 | 0.3000 | 1.0000 +albedoMaxVisible | 0.9500 | 0.7000 | 0.9500 +albedoMinVisible | 0.7500 | 0.5000 | 0.7500 +albedoMaxNearIR | 0.6500 | 0.5000 | 0.7500 +albedoMinNearIR | 0.3000 | 0.1500 | 0.4500 +albedoDecayRate | 1.0d+6 | 0.1d+6 | 5.0d+6 +albedoSootLoad | 0.3000 | 0.1000 | 0.5000 +albedoRefresh | 1.0000 | 1.0000 | 10.0000 +! ==================================================================== +! radiation transfer within snow +! ==================================================================== +radExt_snow | 20.0000 | 20.0000 | 20.0000 +directScale | 0.0900 | 0.0000 | 0.5000 +Frad_direct | 0.7000 | 0.0000 | 1.0000 +Frad_vis | 0.5000 | 0.0000 | 1.0000 +! ==================================================================== +! new snow density +! ==================================================================== +newSnowDenMin | 100.0000 | 50.0000 | 100.0000 +newSnowDenMult | 100.0000 | 25.0000 | 75.0000 +newSnowDenScal | 5.0000 | 1.0000 | 5.0000 +constSnowDen | 100.0000 | 50.0000 | 250.0000 +newSnowDenAdd | 109.0000 | 80.0000 | 120.0000 +newSnowDenMultTemp | 6.0000 | 1.0000 | 12.0000 +newSnowDenMultWind | 26.0000 | 16.0000 | 36.0000 +newSnowDenMultAnd | 1.0000 | 1.0000 | 3.0000 +newSnowDenBase | 0.0000 | 0.0000 | 0.0000 +! ==================================================================== +! snow compaction +! ==================================================================== +densScalGrowth | 0.0460 | 0.0230 | 0.0920 +tempScalGrowth | 0.0400 | 0.0200 | 0.0600 +grainGrowthRate | 2.7d-6 | 1.0d-6 | 5.0d-6 +densScalOvrbdn | 0.0230 | 0.0115 | 0.0460 +tempScalOvrbdn | 0.0800 | 0.6000 | 1.0000 +baseViscosity | 9.0d+5 | 5.0d+5 | 1.5d+6 +! ==================================================================== +! water flow through snow +! ==================================================================== +Fcapil | 0.0600 | 0.0100 | 0.1000 +k_snow | 0.0150 | 0.0050 | 0.0500 +mw_exp | 3.0000 | 1.0000 | 5.0000 +! ==================================================================== +! turbulent heat fluxes +! ==================================================================== +z0Snow | 0.0010 | 0.0010 | 10.0000 +z0Soil | 0.0100 | 0.0010 | 10.0000 +z0Canopy | 0.1000 | 0.0010 | 10.0000 +zpdFraction | 0.6500 | 0.5000 | 0.8500 +critRichNumber | 0.2000 | 0.1000 | 1.0000 +Louis79_bparam | 9.4000 | 9.2000 | 9.6000 +Louis79_cStar | 5.3000 | 5.1000 | 5.5000 +Mahrt87_eScale | 1.0000 | 0.5000 | 2.0000 +leafExchangeCoeff | 0.0100 | 0.0010 | 0.1000 +windReductionParam | 0.2800 | 0.0000 | 1.0000 +! ==================================================================== +! stomatal conductance +! ==================================================================== +Kc25 | 296.0770 | 296.0770 | 296.0770 +Ko25 | 0.2961 | 0.2961 | 0.2961 +Kc_qFac | 2.1000 | 2.1000 | 2.1000 +Ko_qFac | 1.2000 | 1.2000 | 1.2000 +kc_Ha | 79430.0000 | 79430.0000 | 79430.0000 +ko_Ha | 36380.0000 | 36380.0000 | 36380.0000 +vcmax25_canopyTop | 40.0000 | 20.0000 | 100.0000 +vcmax_qFac | 2.4000 | 2.4000 | 2.4000 +vcmax_Ha | 65330.0000 | 65330.0000 | 65330.0000 +vcmax_Hd | 220000.0000 | 149250.0000 | 149250.0000 +vcmax_Sv | 710.0000 | 485.0000 | 485.0000 +vcmax_Kn | 0.6000 | 0.0000 | 1.2000 +jmax25_scale | 2.0000 | 2.0000 | 2.0000 +jmax_Ha | 43540.0000 | 43540.0000 | 43540.0000 +jmax_Hd | 152040.0000 | 152040.0000 | 152040.0000 +jmax_Sv | 495.0000 | 495.0000 | 495.0000 +fractionJ | 0.1500 | 0.1500 | 0.1500 +quantamYield | 0.0500 | 0.0500 | 0.0500 +vpScaleFactor | 1500.0000 | 1500.0000 | 1500.0000 +cond2photo_slope | 9.0000 | 1.0000 | 10.0000 +minStomatalConductance | 2000.0000 | 2000.0000 | 2000.0000 +! ==================================================================== +! vegetation properties +! ==================================================================== +winterSAI | 1.0000 | 0.0100 | 3.0000 +summerLAI | 3.0000 | 0.0100 | 10.0000 +rootScaleFactor1 | 2.0000 | 1.0000 | 10.0000 +rootScaleFactor2 | 5.0000 | 1.0000 | 10.0000 +rootingDepth | 0.5000 | 0.0100 | 10.0000 +rootDistExp | 1.0000 | 0.0100 | 1.0000 +plantWiltPsi | -150.0000 | -500.0000 | 0.0000 +soilStressParam | 5.8000 | 4.3600 | 6.3700 +critSoilWilting | 0.0750 | 0.0000 | 1.0000 +critSoilTranspire | 0.1750 | 0.0000 | 1.0000 +critAquiferTranspire | 0.2000 | 0.1000 | 10.0000 +minStomatalResistance | 50.0000 | 10.0000 | 200.0000 +leafDimension | 0.0400 | 0.0100 | 0.1000 +heightCanopyTop | 20.0000 | 0.0500 | 100.0000 +heightCanopyBottom | 2.0000 | 0.0000 | 5.0000 +specificHeatVeg | 874.0000 | 500.0000 | 1500.0000 +maxMassVegetation | 25.0000 | 1.0000 | 50.0000 +throughfallScaleSnow | 0.5000 | 0.1000 | 0.9000 +throughfallScaleRain | 0.5000 | 0.1000 | 0.9000 +refInterceptCapSnow | 6.6000 | 1.0000 | 10.0000 +refInterceptCapRain | 1.0000 | 0.0100 | 1.0000 +snowUnloadingCoeff | 0.0000 | 0.0000 | 1.5d-6 +canopyDrainageCoeff | 0.0050 | 0.0010 | 0.0100 +ratioDrip2Unloading | 0.4000 | 0.0000 | 1.0000 +canopyWettingFactor | 0.7000 | 0.0000 | 1.0000 +canopyWettingExp | 1.0000 | 0.0000 | 1.0000 +! ==================================================================== +! soil properties +! ==================================================================== +soil_dens_intr | 2700.0000 | 500.0000 | 4000.0000 +thCond_soil | 5.5000 | 2.9000 | 8.4000 +frac_sand | 0.1600 | 0.0000 | 1.0000 +frac_silt | 0.2800 | 0.0000 | 1.0000 +frac_clay | 0.5600 | 0.0000 | 1.0000 +fieldCapacity | 0.2000 | 0.0000 | 1.0000 +wettingFrontSuction | 0.3000 | 0.1000 | 1.5000 +theta_mp | 0.4010 | 0.3000 | 0.6000 +theta_sat | 0.5500 | 0.3000 | 0.6000 +theta_res | 0.1390 | 0.0010 | 0.1000 +vGn_alpha | -0.8400 | -1.0000 | -0.0100 +vGn_n | 1.3000 | 1.0000 | 3.0000 +mpExp | 5.0000 | 1.0000 | 10.0000 +k_soil | 7.5d-06 | 1.d-07 | 100.d-07 +k_macropore | 1.0d-03 | 1.d-07 | 100.d-07 +kAnisotropic | 1.0000 | 0.0001 | 10.0000 +zScale_TOPMODEL | 2.5000 | 0.1000 | 100.0000 +compactedDepth | 1.0000 | 0.0000 | 1.0000 +aquiferScaleFactor | 0.3500 | 0.1000 | 100.0000 +aquiferBaseflowExp | 2.0000 | 1.0000 | 10.0000 +aquiferBaseflowRate | 2.0000 | 1.0000 | 10.0000 +qSurfScale | 50.0000 | 1.0000 | 100.0000 +specificYield | 0.2000 | 0.1000 | 0.3000 +specificStorage | 1.d-09 | 1.d-05 | 1.d-07 +f_impede | 2.0000 | 1.0000 | 10.0000 +soilIceScale | 0.1300 | 0.0001 | 1.0000 +soilIceCV | 0.4500 | 0.1000 | 5.0000 +! ==================================================================== +! algorithmic control parameters +! ==================================================================== +minwind | 0.1000 | 0.0010 | 1.0000 +minstep | 1.0000 | 1.0000 | 1800.0000 +maxstep | 3600.0000 | 60.0000 | 1800.0000 +wimplicit | 0.0000 | 0.0000 | 1.0000 +maxiter | 100.0000 | 1.0000 | 100.0000 +relConvTol_liquid | 1.0d-3 | 1.0d-5 | 1.0d-1 +absConvTol_liquid | 1.0d-5 | 1.0d-8 | 1.0d-3 +relConvTol_matric | 1.0d-6 | 1.0d-5 | 1.0d-1 +absConvTol_matric | 1.0d-6 | 1.0d-8 | 1.0d-3 +relConvTol_energy | 1.0d-2 | 1.0d-5 | 1.0d-1 +absConvTol_energy | 1.0d-0 | 1.0d-2 | 1.0d+1 +relConvTol_aquifr | 1.0d-0 | 1.0d-2 | 1.0d+1 +absConvTol_aquifr | 1.0d-5 | 1.0d-5 | 1.0d-1 +zmin | 0.0100 | 0.0050 | 0.1000 +zmax | 0.0500 | 0.0100 | 0.5000 +! --- +zminLayer1 | 0.0075 | 0.0075 | 0.0075 +zminLayer2 | 0.0100 | 0.0100 | 0.0100 +zminLayer3 | 0.0500 | 0.0500 | 0.0500 +zminLayer4 | 0.1000 | 0.1000 | 0.1000 +zminLayer5 | 0.2500 | 0.2500 | 0.2500 +! --- +zmaxLayer1_lower | 0.0500 | 0.0500 | 0.0500 +zmaxLayer2_lower | 0.2000 | 0.2000 | 0.2000 +zmaxLayer3_lower | 0.5000 | 0.5000 | 0.5000 +zmaxLayer4_lower | 1.0000 | 1.0000 | 1.0000 +! --- +zmaxLayer1_upper | 0.0300 | 0.0300 | 0.0300 +zmaxLayer2_upper | 0.1500 | 0.1500 | 0.1500 +zmaxLayer3_upper | 0.3000 | 0.3000 | 0.3000 +zmaxLayer4_upper | 0.7500 | 0.7500 | 0.7500 +! ==================================================================== +minTempUnloading | 270.16 | 260.16 | 273.16 +minWindUnloading | 0.0000 | 0.0000 | 10.000 +rateTempUnloading | 1.87d+5 | 1.0d+5 | 3.0d+5 +rateWindUnloading | 1.56d+5 | 1.0d+5 | 3.0d+5 +! history Mon Jul 20 16:08:18 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/celia1990/summa_fileManager_celia1990.txt \ No newline at end of file diff --git a/utils/laugh_tests/celia1990/settings/summa_zParamTrial_celia1990.nc b/utils/laugh_tests/celia1990/settings/summa_zParamTrial_celia1990.nc new file mode 100644 index 0000000000000000000000000000000000000000..8c8f7337f8fc90652058803b2880fa642da87f87 Binary files /dev/null and b/utils/laugh_tests/celia1990/settings/summa_zParamTrial_celia1990.nc differ diff --git a/utils/laugh_tests/celia1990/verification_data/runinfo.txt b/utils/laugh_tests/celia1990/verification_data/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..a4397e2edc523fc1a3bb76f702aaaa11af1ddba9 --- /dev/null +++ b/utils/laugh_tests/celia1990/verification_data/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=15 - hh=02 - mi=49 - ss=51.739 diff --git a/utils/laugh_tests/celia1990/verification_data/summa_celia1990_G1-1_timestep.nc b/utils/laugh_tests/celia1990/verification_data/summa_celia1990_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..e1319892d362595775ea3f6668ad8dd00667cf1e Binary files /dev/null and b/utils/laugh_tests/celia1990/verification_data/summa_celia1990_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/celia1990/verify_celia.py b/utils/laugh_tests/celia1990/verify_celia.py new file mode 100644 index 0000000000000000000000000000000000000000..227b7a1f1f0a9e6fa120efe14cc04e4824b13856 --- /dev/null +++ b/utils/laugh_tests/celia1990/verify_celia.py @@ -0,0 +1,111 @@ +from os import listdir +from os.path import isfile, join +from pathlib import Path +import xarray as xr +import numpy as np + +numHRU = 1 + +time = "time" +nSnow = "nSnow" +nSoil = "nSoil" +nLayers = "nLayers" +mLayerHeight = "mLayerHeight" +iLayerLiqFluxSoil = "iLayerLiqFluxSoil" +mLayerDepth = "mLayerDepth" +mLayerVolFracIce = "mLayerVolFracIce" +mLayerVolFracLiq = "mLayerVolFracLiq" +mLayerMatricHead = "mLayerMatricHead" +mLayerTranspire = "mLayerTranspire" +mLayerBaseflow = "mLayerBaseflow" +mLayerCompress = "mLayerCompress" +iLayerNrgFlux = "iLayerNrgFlux" +basin__TotalArea = "basin__TotalArea" +scalarGroundEvaporation = "scalarGroundEvaporation" +scalarSoilBaseflow = "scalarSoilBaseflow" +scalarSoilDrainage = "scalarSoilDrainage" +scalarInfiltration = "scalarInfiltration" +scalarSnowDrainage = "scalarSnowDrainage" +scalarSnowSublimation = "scalarSnowSublimation" +scalarThroughfallRain = "scalarThroughfallRain" +scalarThroughfallSnow = "scalarThroughfallSnow" +scalarRainfall = "scalarRainfall" +scalarSnowfall = "scalarSnowfall" +scalarRainPlusMelt = "scalarRainPlusMelt" +pptrate = "pptrate" +averageRoutedRunoff = "averageRoutedRunoff" +scalarSWE = "scalarSWE" +fieldCapacity = "fieldCapacity" + +output_variables = [time, nSnow, nSoil, nLayers, mLayerHeight, iLayerLiqFluxSoil, \ + mLayerDepth, mLayerVolFracIce, mLayerVolFracLiq, mLayerMatricHead, mLayerTranspire, \ + mLayerBaseflow, mLayerCompress, iLayerNrgFlux, basin__TotalArea, scalarGroundEvaporation, \ + scalarSoilBaseflow, scalarSoilDrainage, scalarInfiltration, scalarSnowDrainage, \ + scalarSnowSublimation, scalarThroughfallRain, scalarThroughfallSnow, scalarRainfall, \ + scalarSnowfall, scalarRainPlusMelt, pptrate, averageRoutedRunoff, \ + scalarSWE, fieldCapacity] + +# find the output files +verified_data_path = Path("./verification_data/summa_celia1990_G1-1_timestep.nc") +data_to_compare_path = Path("./output/summa-actors_celia1990GRU1-1_timestep.nc") + +try: + verified_dataset = xr.open_dataset(verified_data_path) + to_compare_dataset = xr.open_dataset(data_to_compare_path) +except FileNotFoundError: + print("Check the variables \'verified_data_path\' and \'data_to_compare_path\'. They may not point to the correct output files or the output filenames may have changed.") + exit() + +# Get the HRUs from the dataset into a list +for iHRU in range(0, numHRU): + verified_hru = verified_dataset.isel(hru=iHRU).copy() + hru_to_compare = to_compare_dataset.isel(hru=iHRU).copy() + + for var in output_variables: + try: + if len(verified_hru[var].values) != len(hru_to_compare[var].values): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_hru[var].values)) + print(" hru_to_compare = ", len(hru_to_compare[var].values)) + + verified_data = [] + to_verify_data = [] + if (verified_hru[var].values.ndim > 1): + # 2D output case + for list in verified_hru[var].values: + for data in list: + verified_data.append(data) + + for list in hru_to_compare[var].values: + for data in list: + to_verify_data.append(data) + + else: + # 1D output case + for data in verified_hru[var].values: + verified_data.append(data) + + for data in hru_to_compare[var].values: + to_verify_data.append(data) + + + # check length + if len(verified_data) != len(to_verify_data): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_data)) + print(" hru_to_compare = ", len(to_verify_data)) + + # check values + for elem in range(0, len(verified_data)): + if verified_data[elem] != to_verify_data[elem]: + print("variable -",var, "has different values at", elem) + print(" verified_hru = ", verified_data[elem]) + print(" hru_to_compare = ", to_verify_data[elem]) + break + + except TypeError: + print("variable - ", var, "Cannot be compared with len") + print(" verified_hru = ",verified_hru[var].values) + print(" hru_to_compare = ", hru_to_compare[var].values) + + diff --git a/utils/laugh_tests/colbeck1976/config/exp1/Summa_Actors_Settings.json b/utils/laugh_tests/colbeck1976/config/exp1/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..4471c5d259c64404a349f32844b54fcd779504df --- /dev/null +++ b/utils/laugh_tests/colbeck1976/config/exp1/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp1.txt", + "outputCSV": false, + "csvPath": "/Summa-Actors/utils/laugh_tests/colbeck1976/output/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} diff --git a/utils/laugh_tests/colbeck1976/config/exp2/Summa_Actors_Settings.json b/utils/laugh_tests/colbeck1976/config/exp2/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..c463fa224e7fbe6e12b5e007df55857c3c601765 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/config/exp2/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp2.txt", + "outputCSV": false, + "csvPath": "/Summa-Actors/utils/laugh_tests/colbeck1976/output/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} diff --git a/utils/laugh_tests/colbeck1976/config/exp3/Summa_Actors_Settings.json b/utils/laugh_tests/colbeck1976/config/exp3/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..c18a9282d9c2368603b94073b26dd4a4d6463897 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/config/exp3/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp3.txt", + "outputCSV": false, + "csvPath": "/Summa-Actors/utils/laugh_tests/colbeck1976/output/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} diff --git a/utils/laugh_tests/colbeck1976/forcing_data/colbeck1976_forcing.nc b/utils/laugh_tests/colbeck1976/forcing_data/colbeck1976_forcing.nc new file mode 100644 index 0000000000000000000000000000000000000000..76f6957b734adcc58ae1956fc67d0d7a621f2e30 Binary files /dev/null and b/utils/laugh_tests/colbeck1976/forcing_data/colbeck1976_forcing.nc differ diff --git a/utils/laugh_tests/colbeck1976/forcing_data/colbeck_forcing.pro b/utils/laugh_tests/colbeck1976/forcing_data/colbeck_forcing.pro new file mode 100644 index 0000000000000000000000000000000000000000..bf5fd7f8823c8bc9da07422b6351c07c9412b3d7 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/forcing_data/colbeck_forcing.pro @@ -0,0 +1,159 @@ +pro colbeck_forcing + +; define constants +Tfreeze = 273.16d + +; define parameters +dt = 60.d ; (time step) + +; define plotting parameters +window, 0, xs=1000, ys=1000, retain=2 +device, decomposed=0 +LOADCT, 39 +!P.BACKGROUND=255 +!P.CHARSIZE=2.5 +!P.COLOR=0 +erase, color=255 +!P.MULTI=[0,1,4] + +; define the number of days +ndays = 3 + +; define the number of time steps per hour +nprhr = 3600.d/dt + +; define the number of steps per day +nprdy = 86400.d/dt + +; define the number of time steps +ntime = ndays*nprdy + +; define time in seconds +stime = (dindgen(ntime)+1.d)*dt + +; define time in hours +htime = stime/3600. + +; define maximum radiation +rdmax = 250.d + +; define the dayln parameter +dayln = -0.1 + +; define radiation index +radix = cos(2.d*!pi * (htime/24.d) + !pi) + dayln + +; define radiation +swrad = replicate(0.d, ntime) ;radix*(rdmax / (1.+dayln)) + +; set negative radiation to zero +ibad = where(swrad le 0.d, nbad) +if (nbad gt 0) then swrad[ibad] = 0.d + +; make a base plot for solar radiation +plot, htime, xrange=[0,ntime/nprhr], yrange=[0,1000], xstyle=9, ystyle=1, $ + ytitle = 'Solar radiation (W m!e-2!n)', xmargin=[10,10], ymargin=[3,2], $ + xticks=6, /nodata +plots, [htime[0],htime[ntime-1]], [ 0, 0] +plots, [htime[0],htime[ntime-1]], [250,250] + +plots, [24,24], [0,250] +plots, [48,48], [0,250] + +oplot, htime, swrad + +; define other forcing variables +lwrad = 275.d +awind = 0.d +atemp = Tfreeze + 10.d +sphum = 1.d-3 +apres = 101325.d + +; define precipitation +aprcp = replicate(0.d, ntime) + +; define time less than 3 hours +aprcp[where(stime le 10800.d)] = 10.d^(-2.d) + +; define time +atime = stime/86400.d + julday(1,1,2000,0,0,0.d) + +; define file +filename = 'colbeck1976_forcing' + +; open NetCDF file for definition +ncid = ncdf_create(filename+'.nc', /clobber) +ncdf_control, ncid + +; define dimensions in the NetCDF file +idHRU = ncdf_dimdef(ncid, 'hru', 1) +idTime = ncdf_dimdef(ncid, 'time', /unlimited) + +; define the hru ID +ivar_id = ncdf_vardef(ncid, 'hruId', [idHRU], /long) + +; define the latitude and longitude +ivar_id = ncdf_vardef(ncid, 'latitude', [idHRU], /double) +ivar_id = ncdf_vardef(ncid, 'longitude', [idHRU], /double) + +; define the data step and time +ivar_id = ncdf_vardef(ncid, 'data_step', /double) +ivar_id = ncdf_vardef(ncid, 'time', [idTime], /double) + +; define the time units +ncdf_attput, ncid, ivar_id, 'units', "seconds since 1990-01-01 00:00:00", /char + +; define forcing variables +cVar = ['LWRadAtm','SWRadAtm','airpres','airtemp','pptrate','spechum','windspd'] +for ivar=0,n_elements(cVar)-1 do begin + ivar_id = ncdf_vardef(ncid, cvar[ivar], [idHRU, idTime], /double) +endfor + +; exit control mode +ncdf_control, ncid, /endef + +; write the metadata +ncdf_varput, ncid, ncdf_varid(ncid,'hruId'), 1001 +ncdf_varput, ncid, ncdf_varid(ncid,'latitude'), 40.d +ncdf_varput, ncid, ncdf_varid(ncid,'longitude'), 250.d +ncdf_varput, ncid, ncdf_varid(ncid,'data_step'), dt + +; make a forcing file +openw, out_unit, filename+'.txt', /get_lun + +; loop through time +for itime=0,ntime-1 do begin + + ; define date + caldat, atime[itime], im, id, iyyy, ih, imi, dsec + + ; write time to the NetCDF file + ncdf_varput, ncid, ncdf_varid(ncid,'time'), stime[itime], offset=itime, count=1 + + ; print synthetic "data" to the netCDF file + for ivar=0,n_elements(cVar)-1 do begin + ivar_id = ncdf_varid(ncid,cvar[ivar]) + case cvar[ivar] of + 'pptrate': ncdf_varput, ncid, ivar_id, aprcp[itime], offset=[0,itime], count=[1,1] + 'airtemp': ncdf_varput, ncid, ivar_id, atemp, offset=[0,itime], count=[1,1] + 'airpres': ncdf_varput, ncid, ivar_id, apres, offset=[0,itime], count=[1,1] + 'spechum': ncdf_varput, ncid, ivar_id, sphum, offset=[0,itime], count=[1,1] + 'windspd': ncdf_varput, ncid, ivar_id, awind, offset=[0,itime], count=[1,1] + 'SWRadAtm': ncdf_varput, ncid, ivar_id, swrad[itime], offset=[0,itime], count=[1,1] + 'LWRadAtm': ncdf_varput, ncid, ivar_id, lwrad, offset=[0,itime], count=[1,1] + else: stop, 'unable to identify variable' + endcase + endfor ; looping through variables + + ; print synthetic "data" to the ASCII file + printf, out_unit, iyyy, im, id, ih, imi, dsec, aprcp[itime], swrad[itime], lwrad, atemp, awind, apres, sphum, $ + format='(i4,1x,4(i2,1x),f6.1,1x,e14.4,1x,5(f10.3,1x),e12.3)' + +endfor ; looping through time + +; free up file unit +free_lun, out_unit +ncdf_close, ncid + +stop +end diff --git a/utils/laugh_tests/colbeck1976/output/colbeck1976-exp1GRU1-1_timestep.nc b/utils/laugh_tests/colbeck1976/output/colbeck1976-exp1GRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..5c4b9adb2d00c716208b87546a6e3806fe85208f Binary files /dev/null and b/utils/laugh_tests/colbeck1976/output/colbeck1976-exp1GRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/colbeck1976/output/colbeck1976-exp2GRU1-1_timestep.nc b/utils/laugh_tests/colbeck1976/output/colbeck1976-exp2GRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..ce00720f1b5a90c8340bd4de76367f035f977b60 Binary files /dev/null and b/utils/laugh_tests/colbeck1976/output/colbeck1976-exp2GRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/colbeck1976/output/colbeck1976-exp3GRU1-1_timestep.nc b/utils/laugh_tests/colbeck1976/output/colbeck1976-exp3GRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..cee21d14a88c0a1c36adf2d91b369fcf84eea934 Binary files /dev/null and b/utils/laugh_tests/colbeck1976/output/colbeck1976-exp3GRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/colbeck1976/output/runinfo.txt b/utils/laugh_tests/colbeck1976/output/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..df17fe35ae4f6704e4a41a3a097c2cc85a370e85 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/output/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=15 - hh=21 - mi=52 - ss=43.015 diff --git a/utils/laugh_tests/colbeck1976/run_test_summa.sh b/utils/laugh_tests/colbeck1976/run_test_summa.sh new file mode 100755 index 0000000000000000000000000000000000000000..f4ed0cce1905d174b2e7642ff4a20f24c8d04444 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/run_test_summa.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1976-exp1.txt +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1976-exp2.txt +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1976-exp3.txt \ No newline at end of file diff --git a/utils/laugh_tests/colbeck1976/run_test_summa_actors.sh b/utils/laugh_tests/colbeck1976/run_test_summa_actors.sh new file mode 100755 index 0000000000000000000000000000000000000000..27be92c0c34b633daae21832d34cf17d39bf416b --- /dev/null +++ b/utils/laugh_tests/colbeck1976/run_test_summa_actors.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/colbeck1976/config/exp1 +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/colbeck1976/config/exp2 +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/colbeck1976/config/exp3 diff --git a/utils/laugh_tests/colbeck1976/settings/GENPARM.TBL b/utils/laugh_tests/colbeck1976/settings/GENPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..17fc9172ba276dffbbb9dfa90cdcbc4eecc1070c --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/GENPARM.TBL @@ -0,0 +1,36 @@ +General Parameters +SLOPE_DATA +9 +0.1 +0.6 +1.0 +0.35 +0.55 +0.8 +0.63 +0.0 +0.0 +SBETA_DATA +-2.0 +FXEXP_DATA +2.0 +CSOIL_DATA +2.00E+6 +SALP_DATA +2.6 +REFDK_DATA +2.0E-6 +REFKDT_DATA +3.0 +FRZK_DATA +0.15 +ZBOT_DATA +-8.0 +CZIL_DATA +0.1 +SMLOW_DATA +0.5 +SMHIGH_DATA +3.0 +LVCOEF_DATA +0.5 diff --git a/utils/laugh_tests/colbeck1976/settings/MPTABLE.TBL b/utils/laugh_tests/colbeck1976/settings/MPTABLE.TBL new file mode 100644 index 0000000000000000000000000000000000000000..0f0c59c02cc2f03d2a168b8523ffa793773861a7 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/MPTABLE.TBL @@ -0,0 +1,284 @@ +&noah_mp_usgs_veg_categories + VEG_DATASET_DESCRIPTION = "USGS" + NVEG = 27 +/ +&noah_mp_usgs_parameters + ! NVEG = 27 + ! 1: Urban and Built-Up Land + ! 2: Dryland Cropland and Pasture + ! 3: Irrigated Cropland and Pasture + ! 4: Mixed Dryland/Irrigated Cropland and Pasture + ! 5: Cropland/Grassland Mosaic + ! 6: Cropland/Woodland Mosaic + ! 7: Grassland + ! 8: Shrubland + ! 9: Mixed Shrubland/Grassland + ! 10: Savanna + ! 11: Deciduous Broadleaf Forest + ! 12: Deciduous Needleleaf Forest + ! 13: Evergreen Broadleaf Forest + ! 14: Evergreen Needleleaf Forest + ! 15: Mixed Forest + ! 16: Water Bodies + ! 17: Herbaceous Wetland + ! 18: Wooded Wetland + ! 19: Barren or Sparsely Vegetated + ! 20: Herbaceous Tundra + ! 21: Wooded Tundra + ! 22: Mixed Tundra + ! 23: Bare Ground Tundra + ! 24: Snow or Ice + ! 25: Playa + ! 26: Lava + ! 27: White Sand + + ISURBAN = 1 + ISWATER = 16 + ISBARREN = 19 + ISSNOW = 24 + EBLFOREST = 13 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.00, 0.06, 0.06, 0.06, 0.06, 0.15, 0.06, 0.06, 0.06, 0.86, 0.80, 0.85, 1.10, 1.09, 0.80, 0.00, 0.06, 0.05, 0.00, 0.04, 0.06, 0.06, 0.03, 0.00, 0.01, 0.00, 0.00, + HVT = 15.0, 0.50, 0.50, 0.50, 0.50, 1.25, 0.50, 0.50, 0.50, 16.0, 16.0, 18.0, 20.0, 20.0, 16.0, 0.00, 0.50, 0.80, 0.00, 0.50, 0.80, 0.80, 0.50, 0.00, 0.10, 0.00, 0.00, + HVB = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 3.00, 3.50, 3.00, 4.00, 3.50, 3.00, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + DEN = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, + RC = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.00, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.07, 0.10, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.00, 0.11, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.35, 0.45, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.00, 0.58, 0.45, 0.00, 0.45, 0.45, 0.45, 0.45, 0.00, 0.45, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.00, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.00, 0.36, 0.16, 0.00, 0.16, 0.16, 0.16, 0.16, 0.00, 0.16, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.00, 0.58, 0.39, 0.00, 0.39, 0.39, 0.39, 0.39, 0.00, 0.39, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.00, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.07, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, + 0.00, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.10, 0.10, 0.25, 0.25, 0.10, 0.25, 0.10, 0.25, 0.00, 0.25, 0.25, 0.00, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.000, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.220, 0.001, 0.000, 0.220, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + 0.000, 0.380, 0.380, 0.380, 0.380, 0.380, 0.380, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.380, 0.001, 0.000, 0.380, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + + XL = 0.000, -0.30, -0.30, -0.30, -0.30, -0.30, -0.30, 0.010, 0.250, 0.010, 0.250, 0.010, 0.010, 0.010, 0.250, 0.000, -0.30, 0.250, 0.000, -0.30, 0.250, 0.250, 0.250, 0.000, 0.250, 0.000, 0.000, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.0, 1.6, 1.8, 1.2, 1.2, 1.30, 0.50, 0.65, 0.70, 0.65, 0.55, 0.2, 0.55, 0.5, 0.5, 0.0, 1.4, 1.4, 0.0, 1.2, 1.3, 1.4, 1.0, 0.0, 1.0, 0.0, 0.0, + DILEFC= 0.00, 0.50, 0.50, 0.50, 0.35, 0.20, 0.20, 0.20, 0.50, 0.50, 0.60, 1.80, 0.50, 1.20, 0.80, 0.00, 0.40, 0.40, 0.00, 0.40, 0.30, 0.40, 0.30, 0.00, 0.30, 0.00, 0.00, + DILEFW= 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.20, 0.50, 0.20, 0.20, 4.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.20, 0.20, 0.00, 0.20, 0.00, 0.00, + RMF25 = 0.00, 1.00, 1.40, 1.45, 1.45, 1.45, 1.80, 0.26, 0.26, 0.80, 3.00, 4.00, 0.65, 3.00, 3.00, 0.00, 3.20, 3.20, 0.00, 3.20, 3.00, 3.00, 3.00, 0.00, 3.00, 0.00, 0.00, + SLA = 60, 80, 80, 80, 80, 80, 60, 60, 60, 50, 80, 80, 80, 80, 80, 0, 80, 80, 0, 80, 80, 80, 80, 0, 80, 0, 0, + FRAGR = 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + TMIN = 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 268, 273, 265, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + VCMX25= 0.00, 80.0, 80.0, 80.0, 60.0, 70.0, 40.0, 40.0, 40.0, 40.0, 60.0, 60.0, 60.0, 50.0, 55.0, 0.00, 50.0, 50.0, 0.00, 50.0, 50.0, 50.0, 50.0, 0.00, 50.0, 0.00, 0.00, + TDLEF = 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 268, 278, 278, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + BP = 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 1.E15, + MP = 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0., 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.00, + RMS25 = 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.32, 0.10, 0.64, 0.30, 0.90, 0.80, 0.00, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, + RMR25 = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.20, 0.00, 0.00, 0.01, 0.01, 0.05, 0.05, 0.36, 0.03, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 0.00, + WDPOOL= 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, + WRRAT = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 30.0, 30.0, 30.0, 30.0, 30.0, 0.00, 0.00, 30.0, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, + MRP = 0.00, 0.23, 0.23, 0.23, 0.23, 0.23, 0.17, 0.19, 0.19, 0.40, 0.40, 0.37, 0.23, 0.37, 0.30, 0.00, 0.17, 0.40, 0.00, 0.17, 0.23, 0.20, 0.00, 0.00, 0.20, 0.00, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.3, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.4, 0.2, 0.3, 0.1, 0.4, 0.7, 0.5, 0.5, 0.4, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.3, 0.3, 0.8, 0.2, 0.5, 0.1, 0.9, 1.3, 0.5, 0.5, 0.4, 0.0, 0.4, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.5, 0.2, 1.3, 0.1, 0.8, 0.1, 1.2, 1.2, 0.5, 0.6, 0.5, 0.0, 0.6, 0.6, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.4, 0.1, 1.1, 0.1, 0.5, 0.1, 1.6, 1.0, 0.5, 0.6, 0.5, 0.0, 0.5, 0.5, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.4, 0.1, 0.2, 0.1, 1.4, 0.8, 0.5, 0.7, 0.6, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.6, 0.6, 0.5, 0.6, 0.5, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.4, 0.5, 0.5, 0.5, 0.3, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + + LAIM = 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.5, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 0.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.0, 3.5, 1.6, 1.0, 0.0, 0.6, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.7, 0.7, 0.7, 0.5, 0.7, 1.0, 1.5, 1.0, 1.2, 0.6, 3.5, 1.6, 1.0, 0.0, 0.7, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 1.2, 1.2, 1.2, 1.5, 1.2, 1.0, 2.0, 1.0, 3.0, 1.2, 3.5, 5.3, 2.3, 0.0, 1.2, 0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.0, 3.0, 3.0, 3.0, 2.5, 3.0, 1.0, 2.5, 1.0, 4.7, 2.0, 3.5, 5.5, 3.5, 0.0, 3.0, 0.7, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 3.5, 3.5, 3.5, 3.5, 3.5, 1.0, 3.0, 1.0, 4.5, 2.6, 3.5, 5.3, 4.3, 0.0, 3.5, 1.7, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 1.5, 1.5, 1.5, 3.5, 1.5, 1.0, 2.5, 1.0, 3.4, 1.7, 3.5, 5.3, 3.3, 0.0, 1.5, 3.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.5, 0.7, 0.7, 0.7, 2.0, 0.7, 1.0, 1.5, 1.0, 1.2, 1.0, 3.5, 4.2, 2.2, 0.0, 0.7, 2.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 1.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.5, 3.5, 2.2, 1.2, 0.0, 0.6, 1.6, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.2, 3.5, 2.2, 1.2, 0.0, 0.5, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 2.2, 1.2, 0.0, 0.4, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + SLAREA=0.0228,0.0200,0.0200,0.0295,0.0223,0.0277,0.0060,0.0227,0.0188,0.0236,0.0258,0.0200,0.0200,0.0090,0.0223,0.0422,0.0390, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 41.87, 0.00, 0.00, 2.52, 0.04, 17.11, 0.02, 21.62, 0.11, 22.80, 46.86, 0.00, 0.00, 0.46, 30.98, 2.31, 1.63, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.98, 0.00, 0.00, 0.16, 0.09, 0.28, 0.05, 0.92, 0.22, 0.59, 0.38, 0.00, 0.00, 3.34, 0.96, 1.47, 1.07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.82, 0.00, 0.00, 0.23, 0.05, 0.81, 0.03, 1.73, 1.26, 1.37, 1.84, 0.00, 0.00, 1.85, 1.84, 1.70, 1.21, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ + + +&noah_mp_modis_veg_categories + VEG_DATASET_DESCRIPTION = "modified igbp modis noah" + NVEG = 20 +/ + +&noah_mp_modis_parameters +! 1 'Evergreen Needleleaf Forest' -> USGS 14 +! 2, 'Evergreen Broadleaf Forest' -> USGS 13 +! 3, 'Deciduous Needleleaf Forest' -> USGS 12 +! 4, 'Deciduous Broadleaf Forest' -> USGS 11 +! 5, 'Mixed Forests' -> USGS 15 +! 6, 'Closed Shrublands' -> USGS 8 "shrubland" +! 7, 'Open Shrublands' -> USGS 9 "shrubland/grassland" +! 8, 'Woody Savannas' -> USGS 8 "shrubland" +! 9, 'Savannas' -> USGS 10 +! 10, 'Grasslands' -> USGS 7 +! 11 'Permanent wetlands' -> avg of USGS 17 and 18 (herb. wooded wetland) +! 12, 'Croplands' -> USGS 2 "dryland cropland" +! 13, 'Urban and Built-Up' -> USGS 1 +! 14 'cropland/natural vegetation mosaic' -> USGS 5 "cropland/grassland" +! 15, 'Snow and Ice' -> USGS 24 +! 16, 'Barren or Sparsely Vegetated' -> USGS 19 +! 17, 'Water' -> USGS 16 +! 18, 'Wooded Tundra' -> USGS 21 +! 19, 'Mixed Tundra' -> USGS 22 +! 20, 'Barren Tundra' -> USGS 23 + + ISURBAN = 13 + ISWATER = 17 + ISBARREN = 16 + ISSNOW = 15 + EBLFOREST = 2 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.09, 1.10, 0.85, 0.80, 0.80, 0.06, 0.06, 0.06, 0.86, 0.06, 0.055, 0.06, 1.00, 0.06, 0.00, 0.00, 0.00, 0.06, 0.06, 0.03, +! Z0MVT = 0.50, 0.50, 0.50, 0.50, 0.50, 0.05, 0.06, 0.05, 0.15, 0.12, 0.30, 0.15, 0.80, 0.14, 0.00, 0.01, 0.00, 0.30, 0.15, 0.10, + HVT = 20.0, 20.0, 18.0, 16.0, 16.0, 0.50, 0.50, 0.50, 16.0, 0.50, 0.65, 0.50, 15.0, 0.50, 0.00, 0.00, 0.00, 0.80, 0.80, 0.50, + HVB = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 5.00, 0.05, 0.075, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + DEN = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, + RC = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + 0.35, 0.45, 0.35, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.58, 0.515, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.45, 0.45, 0.45, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, 0.00, 0.36, 0.00, 0.00, 0.00, 0.16, 0.16, 0.16, + 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.58, 0.485, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.39, 0.39, 0.39, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, 0.00, 0.07, 0.00, 0.00, 0.00, 0.05, 0.05, 0.05, + 0.10, 0.25, 0.10, 0.25, 0.25, 0.10, 0.10, 0.10, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, 0.00, 0.25, 0.25, 0.25, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.220, 0.1105, 0.220, 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.380, 0.1905, 0.380, 0.000, 0.380, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + + XL = 0.010, 0.010, 0.010, 0.250, 0.250, 0.010, 0.250, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, +! CWPVT = 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, 0.70, 0.65, 0.65, 0.50, 1.4, 1.6, 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, 1.4, 1.0, + DILEFC= 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, 0.50, 0.20, 0.50, 0.20, 0.4, 0.50, 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, 0.40, 0.30, + DILEFW= 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, 0.20, 0.20, + RMF25 = 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, + SLA = 80, 80, 80, 80, 80, 60, 60, 60, 50, 60, 80, 80, 60, 80, 0, 0, 0, 80, 80, 80, + FRAGR = 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, 0.10, 0.10, + TMIN = 265, 273, 268, 273, 268, 273, 273, 273, 273, 273, 268, 273, 0, 273, 0, 0, 0, 268, 268, 268, + VCMX25= 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, 50.0, 50.0, + TDLEF = 278, 278, 268, 278, 268, 278, 278, 278, 278, 278, 268, 278, 278, 278, 0, 0, 0, 268, 268, 268, + BP = 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, + MP = 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, 0.06, 0.06, + RMS25 = 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.00, + RMR25 = 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, 1.5, 1.5, + WDPOOL= 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, + WRRAT = 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, + MRP = 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, 0.19, 0.19, 0.40, 0.17, 0.285, 0.23, 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, 0.20, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.3, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.5, 0.5, 0.7, 0.4, 0.4, 0.2, 0.3, 0.2, 0.1, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 1.3, 0.9, 0.4, 0.2, 0.5, 0.2, 0.1, 0.8, 0.4, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 1.2, 1.2, 0.5, 0.1, 0.8, 0.1, 0.1, 1.3, 0.6, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.6, 0.5, 1.0, 1.6, 0.5, 0.1, 0.5, 0.1, 0.1, 1.1, 0.5, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.7, 0.5, 0.8, 1.4, 0.6, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 0.6, 0.6, 0.5, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 0.5, 0.4, 0.3, 0.1, 0.2, 0.1, 0.1, 0.4, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + + LAIM = 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.4, 0.3, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.45, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.3, 1.0, 1.0, 1.0, 1.0, 1.0, 0.6, 0.5, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.6, 1.2, 1.0, 1.0, 1.5, 1.0, 1.0, 0.7, 0.55, 0.0, 0.0, 0.7, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 5.3, 4.5, 1.2, 3.0, 2.3, 1.0, 2.0, 1.0, 1.0, 1.2, 0.85, 1.0, 0.0, 1.2, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 5.5, 4.5, 2.0, 4.7, 3.5, 1.0, 2.5, 1.0, 1.0, 3.0, 1.85, 2.0, 0.0, 3.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 5.3, 4.5, 2.6, 4.5, 4.3, 1.0, 3.0, 1.0, 1.0, 3.5, 2.6, 3.0, 0.0, 3.5, 0.0, 0.0, 0.0, 2.0, 2.0, 0.0, + 5.3, 4.5, 1.7, 3.4, 3.3, 1.0, 2.5, 1.0, 1.0, 1.5, 2.25, 3.0, 0.0, 1.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 4.2, 4.5, 1.0, 1.2, 2.2, 1.0, 1.5, 1.0, 1.0, 0.7, 1.6, 1.5, 0.0, 0.7, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 2.2, 4.5, 0.5, 0.3, 1.2, 1.0, 1.0, 1.0, 1.0, 0.6, 1.1, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 2.2, 4.5, 0.2, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.5, 0.65, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2.2, 4.5, 0.0, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.4, 0.4, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + +! LAIM = 5.1, 3.3, 0.0, 1.9, 3.0, 1.0, 0.8, 0.5, 0.5, 0.7, 0.3, 1.8, 0.0, 2.4, 0.0, 0.0, 0.0, 0.6, 0.7, 0.0, +! 5.0, 3.6, 0.0, 1.9, 2.9, 1.0, 0.6, 1.0, 1.0, 0.7, 0.45, 1.9, 0.0, 2.6, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.1, 4.4, 0.0, 2.1, 3.3, 1.0, 0.8, 1.8, 1.7, 1.1, 0.5, 2.6, 0.0, 2.9, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.3, 5.4, 0.6, 2.5, 4.0, 1.0, 0.9, 2.6, 2.9, 1.7, 0.55, 3.9, 0.0, 3.4, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.9, 6.2, 1.2, 3.1, 5.0, 1.0, 1.5, 3.4, 3.6, 2.5, 0.85, 5.2, 0.0, 4.0, 0.0, 0.0, 0.0, 0.8, 1.0, 0.0, +! 6.3, 6.4, 2.0, 3.3, 5.4, 1.0, 2.1, 3.6, 3.5, 2.7, 1.85, 5.6, 0.0, 4.2, 0.0, 0.0, 0.0, 2.0, 2.3, 0.0, +! 6.4, 5.9, 2.6, 3.3, 5.4, 1.0, 2.6, 3.4, 2.9, 2.8, 2.6, 5.3, 0.0, 4.1, 0.0, 0.0, 0.0, 3.3, 3.3, 0.0, +! 6.1, 5.6, 1.7, 3.1, 5.0, 1.0, 2.4, 3.2, 2.7, 2.4, 2.25, 4.5, 0.0, 3.8, 0.0, 0.0, 0.0, 3.3, 3.0, 0.0, +! 6.0, 5.3, 1.0, 2.9, 4.8, 1.0, 2.2, 2.9, 2.4, 2.1, 1.6, 4.1, 0.0, 3.7, 0.0, 0.0, 0.0, 2.8, 3.0, 0.0, +! 5.5, 4.7, 0.5, 2.6, 4.1, 1.0, 1.6, 2.3, 1.8, 1.7, 1.1, 3.2, 0.0, 3.2, 0.0, 0.0, 0.0, 1.4, 1.4, 0.0, +! 5.2, 4.0, 0.2, 2.2, 3.4, 1.0, 1.0, 1.5, 1.4, 1.3, 0.65, 2.3, 0.0, 2.7, 0.0, 0.0, 0.0, 0.5, 0.7, 0.0, +! 5.1, 3.2, 0.0, 1.9, 3.0, 1.0, 0.9, 0.7, 0.7, 0.8, 0.4, 1.7, 0.0, 2.4, 0.0, 0.0, 0.0, 0.8, 0.7, 0.0, + + SLAREA=0.0090, 0.0200, 0.0200, 0.0258, 0.0223, 0.0227, 0.0188, 0.0227, 0.0236, 0.0060, 0.0295, 0.0200, 0.0228, 0.0223, 0.02, 0.02, 0.0422, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 0.46, 0.00, 0.00, 46.86, 30.98, 21.62, 0.11, 21.62, 22.80, 0.02, 0.815, 0.00, 41.87, 0.04, 0.0, 0.0, 2.31, 0.0, 0.0, 0.0, + 3.34, 0.00, 0.00, 0.38, 0.96, 0.92, 0.22, 0.92, 0.59, 0.05, 0.535, 0.00, 0.98, 0.09, 0.0, 0.0, 1.47, 0.0, 0.0, 0.0, + 1.85, 0.00, 0.00, 1.84, 1.84, 1.73, 1.26, 1.73, 1.37, 0.03, 0.605, 0.00, 1.82, 0.05, 0.0, 0.0, 1.70, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ diff --git a/utils/laugh_tests/colbeck1976/settings/SOILPARM.TBL b/utils/laugh_tests/colbeck1976/settings/SOILPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..b87d1bae502460279b1e6389ff34c2d3ce842510 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/SOILPARM.TBL @@ -0,0 +1,59 @@ +Soil Parameters +STAS +19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 2.79, 0.010, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.010, 0.92, 'SAND' +2, 4.26, 0.028, -1.044, 0.421, 0.383, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.82, 'LOAMY SAND' +3, 4.74, 0.047, -0.569, 0.434, 0.383, 0.141, 5.23E-6, 0.805E-5, 0.047, 0.60, 'SANDY LOAM' +4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.25, 'SILT LOAM' +5, 5.33, 0.084, 0.162, 0.476, 0.383, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.10, 'SILT' +6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.40, 'LOAM' +7, 6.66, 0.067, -1.491, 0.404, 0.314, 0.135, 4.45E-6, 0.990E-5, 0.067, 0.60, 'SANDY CLAY LOAM' +8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.04E-6, 0.237E-4, 0.120, 0.10, 'SILTY CLAY LOAM' +9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 0.113E-4, 0.103, 0.35, 'CLAY LOAM' +10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 0.187E-4, 0.100, 0.52, 'SANDY CLAY' +11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 0.964E-5, 0.126, 0.10, 'SILTY CLAY' +12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 0.112E-4, 0.138, 0.25, 'CLAY' +13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 'WATER' +15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.07, 'BEDROCK' +16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.25, 'OTHER(land-ice)' +17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 'LAVA' +19, 2.79, 0.01, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.01, 0.92, 'WHITE SAND' +Soil Parameters +STAS-RUC +19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 4.05, 0.045, 1.47, 0.395, 0.236, 0.121, 1.76E-4, 0.608E-6, 0.068, 0.92, 'SAND' +2, 4.38, 0.057, 1.41, 0.410, 0.383, 0.090, 1.56E-4, 0.514E-5, 0.075, 0.82, 'LOAMY SAND' +3, 4.90, 0.065, 1.34, 0.435, 0.383, 0.218, 3.47E-5, 0.805E-5, 0.114, 0.60, 'SANDY LOAM' +4, 5.30, 0.067, 1.27, 0.485, 0.360, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.25, 'SILT LOAM' +5, 5.30, 0.034, 1.27, 0.485, 0.383, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.10, 'SILT' +6, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.40, 'LOAM' +7, 7.12, 0.100, 1.18, 0.420, 0.314, 0.299, 6.30E-6, 0.990E-5, 0.175, 0.60, 'SANDY CLAY LOAM' +8, 7.75, 0.089, 1.32, 0.477, 0.387, 0.356, 1.70E-6, 0.237E-4, 0.218, 0.10, 'SILTY CLAY LOAM' +9, 8.52, 0.095, 1.23, 0.476, 0.382, 0.630, 2.45E-6, 0.113E-4, 0.250, 0.35, 'CLAY LOAM' +10, 10.40, 0.100, 1.18, 0.426, 0.338, 0.153, 2.17E-6, 0.187E-4, 0.219, 0.52, 'SANDY CLAY' +11, 10.40, 0.070, 1.15, 0.492, 0.404, 0.490, 1.03E-6, 0.964E-5, 0.283, 0.10, 'SILTY CLAY' +12, 11.40, 0.068, 1.09, 0.482, 0.412, 0.405, 1.28E-6, 0.112E-4, 0.286, 0.25, 'CLAY' +13, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 'WATER' +15, 4.05, 0.004, 2.03, 0.200, 0.17, 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 'BEDROCK' +16, 4.90, 0.065, 2.10, 0.435, 0.283, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 'OTHER(land-ice)' +17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.060, 0.52, 'LAVA' +19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 'WHITE SAND' +Soil Parameters +ROSETTA +12,1 'theta_res theta_sat vGn_alpha vGn_n k_soil BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1 0.098 0.459 -1.496 1.253 1.70799e-06 1.40 0.068 1.09 0.482 0.412 0.405 1.28E-6 0.112E-4 0.286 0.25 'CLAY' +2 0.079 0.442 -1.581 1.416 9.47297e-07 8.52 0.095 1.23 0.476 0.382 0.630 2.45E-6 0.113E-4 0.250 0.35 'CLAY LOAM' +3 0.061 0.399 -1.112 1.472 1.39472e-06 5.39 0.078 1.21 0.451 0.329 0.478 6.95E-6 0.143E-4 0.155 0.40 'LOAM' +4 0.049 0.390 -3.475 1.746 1.21755e-05 4.38 0.057 1.41 0.410 0.383 0.090 1.56E-4 0.514E-5 0.075 0.82 'LOAMY SAND' +5 0.053 0.375 -3.524 3.177 7.43852e-05 4.05 0.045 1.47 0.395 0.236 0.121 1.76E-4 0.608E-6 0.068 0.92 'SAND' +6 0.117 0.385 -3.342 1.208 1.31367e-06 0.40 0.100 1.18 0.426 0.338 0.153 2.17E-6 0.187E-4 0.219 0.52 'SANDY CLAY' +7 0.063 0.384 -2.109 1.330 1.52576e-06 7.12 0.100 1.18 0.420 0.314 0.299 6.30E-6 0.990E-5 0.175 0.60 'SANDY CLAY LOAM' +8 0.039 0.387 -2.667 1.449 4.43084e-06 4.90 0.065 1.34 0.435 0.383 0.218 3.47E-5 0.805E-5 0.114 0.60 'SANDY LOAM' +9 0.050 0.489 -0.658 1.679 5.06391e-06 5.30 0.034 1.27 0.485 0.383 0.786 7.20E-6 0.239E-4 0.179 0.10 'SILT' +10 0.111 0.481 -1.622 1.321 1.11298e-06 0.40 0.070 1.15 0.492 0.404 0.490 1.03E-6 0.964E-5 0.283 0.10 'SILTY CLAY' +11 0.090 0.482 -0.839 1.521 1.28673e-06 7.75 0.089 1.32 0.477 0.387 0.356 1.70E-6 0.237E-4 0.218 0.10 'SILTY CLAY LOAM' +12 0.065 0.439 -0.506 1.663 2.11099e-06 5.30 0.067 1.27 0.485 0.360 0.786 7.20E-6 0.239E-4 0.179 0.25 'SILT LOAM' diff --git a/utils/laugh_tests/colbeck1976/settings/VEGPARM.TBL b/utils/laugh_tests/colbeck1976/settings/VEGPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..be03224ef59386e2503e147729ffeaef9aa12553 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/VEGPARM.TBL @@ -0,0 +1,119 @@ +Vegetation Parameters +USGS +27,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ' +1, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up Land' +2, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Dryland Cropland and Pasture' +3, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 'Irrigated Cropland and Pasture' +4, .80, 3, 40., 100., 36.25, 0.04, 66., 1.00, 4.50, .920, .985, .18, .23, .05, .15, 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'Cropland/Grassland Mosaic' +6, .80, 3, 70., 65., 44.14, 0.04, 60., 2.00, 4.00, .930, .985, .16, .20, .20, .20, 'Cropland/Woodland Mosaic' +7, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grassland' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Shrubland' +9, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Mixed Shrubland/Grassland' +10, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savanna' +11, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +12, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +13, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +14, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +15, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forest' +16, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water Bodies' +17, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 'Herbaceous Wetland' +18, .60, 2, 100., 30., 51.93, 0.02, 50., 2.00, 5.80, .950, .950, .14, .14, .40, .40, 'Wooded Wetland' +19, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +20, .60, 3, 150., 100., 42.00, 0.025, 68., 0.41, 3.35, .920, .920, .15, .20, .10, .10, 'Herbaceous Tundra' +21, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +22, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +23, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Bare Ground Tundra' +24, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow or Ice' +25, .50, 1, 40., 100., 36.25, 0.02, 75., 0.01, 0.01, .890, .890, .30, .30, .01, .01, 'Playa' +26, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .880, .880, .16, .16, .15, .15, 'Lava' +27, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .830, .830, .60, .60, .01, .01, 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 +Vegetation Parameters +MODIFIED_IGBP_MODIS_NOAH +20,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX' +1 .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forests' +6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Closed Shrublands' +7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Open Shrublands' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Woody Savannas' +9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savannas' +10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grasslands' +11 .60, 2, 70., 65., 55.97 0.015 59., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 'Permanent wetlands' +12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Croplands' +13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up' +14 .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'cropland/natural vegetation mosaic' +15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow and Ice' +16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water' +18, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +19, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +20, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Barren Tundra' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +16 +NATURAL +14 +Vegetation Parameters +USGS-RUC +27,1, 'ALBEDO Z0 LEMI PC SHDFAC NROOT RS RGL HS SNUP LAI MAXALB' +1, .18, .50, .88, .40, .10, 1, 200., 999., 999.0, 0.04, 4.0, 40., 'Urban and Built-Up Land' +2, .17, .06, .92, .30, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Dryland Cropland and Pasture' +3, .18, .075, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Irrigated Cropland and Pasture' +4, .18, .065, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .18, .05, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Cropland/Grassland Mosaic' +6, .16, .20, .93, .40, .80, 3, 70., 65., 44.14, 0.04, 4.0, 60., 'Cropland/Woodland Mosaic' +7, .19, .075 .92, .40, .80, 3, 40., 100., 36.35, 0.04, 4.0, 64., 'Grassland' +8, .22, .10, .88, .40, .70, 3, 300., 100., 42.00, 0.03, 4.0, 69., 'Shrubland' +9, .20, .11, .90, .40, .70, 3, 170., 100., 39.18, 0.035, 4.0, 67., 'Mixed Shrubland/Grassland' +10, .20, .15, .92, .40, .50, 3, 70., 65., 54.53, 0.04, 4.0, 45., 'Savanna' +11, .16, .50, .93, .55, .80, 4, 100., 30., 54.53, 0.08, 4.0, 58., 'Deciduous Broadleaf Forest' +12, .14, .50, .94, .55, .70, 4, 150., 30., 47.35, 0.08, 4.0, 54., 'Deciduous Needleleaf Forest' +13, .12, .50, .95, .55, .95, 4, 150., 30., 41.69, 0.08, 4.0, 32., 'Evergreen Broadleaf Forest' +14, .12, .50, .95, .55, .70, 4, 125., 30., 47.35, 0.08, 4.0, 52., 'Evergreen Needleleaf Forest' +15, .13, .50, .94, .55, .80, 4, 125., 30., 51.93, 0.08, 4.0, 53., 'Mixed Forest' +16, .08, .0001, .98, .00, .00, 0, 100., 30., 51.75, 0.01, 4.0, 70., 'Water Bodies' +17, .14, .20, .95, .55, .60, 2, 40., 100., 60.00, 0.01, 4.0, 35., 'Herbaceous Wetland' +18, .14, .40, .95, .55, .60, 2, 100., 30., 51.93, 0.02, 4.0, 30., 'Wooded Wetland' +19, .25, .05, .85, .30, .01, 1, 999., 999., 999.0, 0.02, 4.0, 69., 'Barren or Sparsely Vegetated' +20, .15, .10, .92, .30, .60, 3, 150., 100., 42.00, 0.025, 4.0, 58., 'Herbaceous Tundra' +21, .15, .15, .93, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Wooded Tundra' +22, .15, .10, .92, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Mixed Tundra' +23, .25, .065 .85, .30, .30, 2, 200., 100., 42.00, 0.02, 4.0, 65., 'Bare Ground Tundra' +24, .55, .05, .95, .00, .00, 1, 999., 999., 999.0, 0.02, 4.0, 75., 'Snow or Ice' +25, .30, .01, .85, .30, .50, 1, 40., 100., 36.25, 0.02, 4.0, 69., 'Playa' +26, .16, .15, .85, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'Lava' +27, .60, .01, .90, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 diff --git a/utils/laugh_tests/colbeck1976/settings/summa_defineModelOutput.txt b/utils/laugh_tests/colbeck1976/settings/summa_defineModelOutput.txt new file mode 100644 index 0000000000000000000000000000000000000000..bfca6f739507af8bb97caa0bd26997d2c42758e8 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_defineModelOutput.txt @@ -0,0 +1,11 @@ +! --------- +! model variables +! --------- +scalarRainfall | 1 +scalarSnowfall | 1 +scalarRainPlusMelt | 1 +mLayerVolFracLiq | 1 +mLayerVolFracIce | 1 +iLayerNrgFlux | 1 +iLayerHeight | 1 +mLayerDepth | 1 diff --git a/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp1.txt b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp1.txt new file mode 100644 index 0000000000000000000000000000000000000000..cc2ee6efbcf874861630fb567cb1adc13977ddeb --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp1.txt @@ -0,0 +1,23 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! +simStartTime '1990-01-01 00:01' ! +simEndTime '1990-01-01 10:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/colbeck1976/settings/' ! SETNGS_PATH +forcingPath '/Summa-Actors/utils/laugh_tests/colbeck1976/forcing_data/' ! INPUT_PATH +outputPath '/Summa-Actors/utils/laugh_tests/colbeck1976/output/' ! OUTPUT_PATH +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '1990-01-01' +decisionsFile 'summa_zDecisions_colbeck1976.txt' ! M_DECISIONS = definition of model decisions +outputControlFile 'summa_defineModelOutput.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! LOCALPARAM_INFO = default values and constraints for local model parameters +globalGruParamFile 'summa_zBasinParamInfo.txt' ! BASINPARAM_INFO = default values and constraints for basin-average parameters +attributeFile 'summa_zLocalAttributes.nc' ! LOCAL_ATTRIBUTES = local attributes +trialParamFile 'summa_zParamTrial_colbeck1976-exp1.nc' ! PARAMETER_TRIAL = trial values for model parameters +forcingListFile 'summa_zForcingFileList.txt' ! FORCING_FILELIST = list of files used in each HRU +initConditionFile 'summa_zInitialCond_colbeck1976-exp1.nc' ! MODEL_INITCOND = model initial conditions +outFilePrefix 'colbeck1976-exp1' ! OUTPUT_PREFIX = prefix for the output file +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp1.txt \ No newline at end of file diff --git a/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp2.txt b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp2.txt new file mode 100644 index 0000000000000000000000000000000000000000..ede30b91a02e43f1acfad1f741e3b71686fc7321 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp2.txt @@ -0,0 +1,23 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! +simStartTime '1990-01-01 00:01' ! +simEndTime '1990-01-01 10:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/colbeck1976/settings/' ! SETNGS_PATH +forcingPath '/Summa-Actors/utils/laugh_tests/colbeck1976/forcing_data/' ! INPUT_PATH +outputPath '/Summa-Actors/utils/laugh_tests/colbeck1976/output/' ! OUTPUT_PATH +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '1990-01-01' +decisionsFile 'summa_zDecisions_colbeck1976.txt' ! M_DECISIONS = definition of model decisions +outputControlFile 'summa_defineModelOutput.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! LOCALPARAM_INFO = default values and constraints for local model parameters +globalGruParamFile 'summa_zBasinParamInfo.txt' ! BASINPARAM_INFO = default values and constraints for basin-average parameters +attributeFile 'summa_zLocalAttributes.nc' ! LOCAL_ATTRIBUTES = local attributes +trialParamFile 'summa_zParamTrial_colbeck1976-exp2.nc' ! PARAMETER_TRIAL = trial values for model parameters +forcingListFile 'summa_zForcingFileList.txt' ! FORCING_FILELIST = list of files used in each HRU +initConditionFile 'summa_zInitialCond_colbeck1976-exp2.nc' ! MODEL_INITCOND = model initial conditions +outFilePrefix 'colbeck1976-exp2' ! OUTPUT_PREFIX = prefix for the output file +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp2.txt diff --git a/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp3.txt b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp3.txt new file mode 100644 index 0000000000000000000000000000000000000000..5edc0ba40d167ef0d9a16e9678a859636f5f23fe --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_colbeck1976-exp3.txt @@ -0,0 +1,23 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! +simStartTime '1990-01-01 00:01' ! +simEndTime '1990-01-01 10:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/colbeck1976/settings/' ! SETNGS_PATH +forcingPath '/Summa-Actors/utils/laugh_tests/colbeck1976/forcing_data/' ! INPUT_PATH +outputPath '/Summa-Actors/utils/laugh_tests/colbeck1976/output/' ! OUTPUT_PATH +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '1990-01-01' +decisionsFile 'summa_zDecisions_colbeck1976.txt' ! M_DECISIONS = definition of model decisions +outputControlFile 'summa_defineModelOutput.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! LOCALPARAM_INFO = default values and constraints for local model parameters +globalGruParamFile 'summa_zBasinParamInfo.txt' ! BASINPARAM_INFO = default values and constraints for basin-average parameters +attributeFile 'summa_zLocalAttributes.nc' ! LOCAL_ATTRIBUTES = local attributes +trialParamFile 'summa_zParamTrial_colbeck1976-exp3.nc' ! PARAMETER_TRIAL = trial values for model parameters +forcingListFile 'summa_zForcingFileList.txt' ! FORCING_FILELIST = list of files used in each HRU +initConditionFile 'summa_zInitialCond_colbeck1976-exp3.nc' ! MODEL_INITCOND = model initial conditions +outFilePrefix 'colbeck1976-exp3' ! OUTPUT_PREFIX = prefix for the output file +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp3.txt diff --git a/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1976-exp2.txt b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1976-exp2.txt new file mode 100644 index 0000000000000000000000000000000000000000..c649253189665863086c5918ac3eefdecd601cd3 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1976-exp2.txt @@ -0,0 +1,21 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! +simStartTime '1990-01-01 00:01' ! +simEndTime '1990-01-01 10:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/colbeck1976/settings/' ! SETNGS_PATH +forcingPath '/Summa-Actors/utils/laugh_tests/colbeck1976/forcing_data/' ! INPUT_PATH +outputPath '/Summa-Actors/utils/laugh_tests/colbeck1976/verification_data/' ! OUTPUT_PATH +decisionsFile 'summa_zDecisions_colbeck1976.txt' ! M_DECISIONS = definition of model decisions +outputControlFile 'summa_defineModelOutput.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! LOCALPARAM_INFO = default values and constraints for local model parameters +globalGruParamFile 'summa_zBasinParamInfo.txt' ! BASINPARAM_INFO = default values and constraints for basin-average parameters +attributeFile 'summa_zLocalAttributes.nc' ! LOCAL_ATTRIBUTES = local attributes +trialParamFile 'summa_zParamTrial_colbeck1976-exp2.nc' ! PARAMETER_TRIAL = trial values for model parameters +forcingListFile 'summa_zForcingFileList.txt' ! FORCING_FILELIST = list of files used in each HRU +initConditionFile 'summa_zInitialCond_colbeck1976-exp2.nc' ! MODEL_INITCOND = model initial conditions +outFilePrefix 'colbeck1976-exp2' ! OUTPUT_PREFIX = prefix for the output file +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp2.txt diff --git a/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1976-exp3.txt b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1976-exp3.txt new file mode 100644 index 0000000000000000000000000000000000000000..f3fa77602274bdd44da3e7aab80e7e78ae219ccd --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1976-exp3.txt @@ -0,0 +1,21 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! +simStartTime '1990-01-01 00:01' ! +simEndTime '1990-01-01 10:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/colbeck1976/settings/' ! SETNGS_PATH +forcingPath '/Summa-Actors/utils/laugh_tests/colbeck1976/forcing_data/' ! INPUT_PATH +outputPath '/Summa-Actors/utils/laugh_tests/colbeck1976/verification_data/' ! OUTPUT_PATH +decisionsFile 'summa_zDecisions_colbeck1976.txt' ! M_DECISIONS = definition of model decisions +outputControlFile 'summa_defineModelOutput.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! LOCALPARAM_INFO = default values and constraints for local model parameters +globalGruParamFile 'summa_zBasinParamInfo.txt' ! BASINPARAM_INFO = default values and constraints for basin-average parameters +attributeFile 'summa_zLocalAttributes.nc' ! LOCAL_ATTRIBUTES = local attributes +trialParamFile 'summa_zParamTrial_colbeck1976-exp3.nc' ! PARAMETER_TRIAL = trial values for model parameters +forcingListFile 'summa_zForcingFileList.txt' ! FORCING_FILELIST = list of files used in each HRU +initConditionFile 'summa_zInitialCond_colbeck1976-exp3.nc' ! MODEL_INITCOND = model initial conditions +outFilePrefix 'colbeck1976-exp3' ! OUTPUT_PREFIX = prefix for the output file +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp3.txt diff --git a/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1979-exp1.txt b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1979-exp1.txt new file mode 100644 index 0000000000000000000000000000000000000000..f0621c14aca3d7d6616d8173af398aec3a182348 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_fileManager_verify_colbeck1979-exp1.txt @@ -0,0 +1,21 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! +simStartTime '1990-01-01 00:01' ! +simEndTime '1990-01-01 10:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/colbeck1976/settings/' ! SETNGS_PATH +forcingPath '/Summa-Actors/utils/laugh_tests/colbeck1976/forcing_data/' ! INPUT_PATH +outputPath '/Summa-Actors/utils/laugh_tests/colbeck1976/verification_data/' ! OUTPUT_PATH +decisionsFile 'summa_zDecisions_colbeck1976.txt' ! M_DECISIONS = definition of model decisions +outputControlFile 'summa_defineModelOutput.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! LOCALPARAM_INFO = default values and constraints for local model parameters +globalGruParamFile 'summa_zBasinParamInfo.txt' ! BASINPARAM_INFO = default values and constraints for basin-average parameters +attributeFile 'summa_zLocalAttributes.nc' ! LOCAL_ATTRIBUTES = local attributes +trialParamFile 'summa_zParamTrial_colbeck1976-exp1.nc' ! PARAMETER_TRIAL = trial values for model parameters +forcingListFile 'summa_zForcingFileList.txt' ! FORCING_FILELIST = list of files used in each HRU +initConditionFile 'summa_zInitialCond_colbeck1976-exp1.nc' ! MODEL_INITCOND = model initial conditions +outFilePrefix 'colbeck1976-exp1' ! OUTPUT_PREFIX = prefix for the output file +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp1.txt \ No newline at end of file diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zBasinParamInfo.txt b/utils/laugh_tests/colbeck1976/settings/summa_zBasinParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..1926fd71fbc6ce90cd4180f652ae414885e4b611 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_zBasinParamInfo.txt @@ -0,0 +1,35 @@ +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! ***** DEFINITION OF BASIN PARAMETERS ********************************************************************************** +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! *********************************************************************************************************************** +! DEFINE BASIN MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a1), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! *********************************************************************************************************************** +! +! ******************************************************************** +! define format string for parameter descriptions +! ******************************************************************** +'(a25,1x,a1,1x,3(f12.4,1x,a1,1x))' ! format string for parameter descriptions (must be in single quotes) +! ******************************************************************** +! baseflow +! ******************************************************************** +basin__aquiferHydCond | 0.0100 | 0.0001 | 10.0000 +basin__aquiferScaleFactor | 3.5000 | 0.1000 | 100.0000 +basin__aquiferBaseflowExp | 5.0000 | 1.0000 | 10.0000 +! ******************************************************************** +! within-grid routing +! ******************************************************************** +routingGammaShape | 2.5000 | 2.0000 | 3.0000 +routingGammaScale | 20000.0000 | 1.0000 | 5000000.0000 +! ******************************************************************** diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zDecisions_colbeck1976.txt b/utils/laugh_tests/colbeck1976/settings/summa_zDecisions_colbeck1976.txt new file mode 100644 index 0000000000000000000000000000000000000000..f5ac1fa2017c484c54809ff8a92f921a4af24451 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_zDecisions_colbeck1976.txt @@ -0,0 +1,170 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE MODEL DECISIONS +! *********************************************************************************************************************** +! This file defines the modeling decisions used. +! NOTES: +! (1) lines starting with ! are treated as comment lines -- there is no limit on the number of comment lines +! (2) the name of the decision is followed by the character string defining the decision +! (3) the simulation start/end times must be within single quotes +! *********************************************************************************************************************** +! *********************************************************************************************************************** +soilCatTbl ROSETTA ! (03) soil-category dateset +vegeParTbl USGS ! (04) vegetation category dataset +soilStress NoahType ! (05) choice of function for the soil moisture control on stomatal resistance +stomResist BallBerry ! (06) choice of function for stomatal resistance +! *********************************************************************************************************************** +num_method itertive ! (07) choice of numerical method +fDerivMeth analytic ! (08) method used to calculate flux derivatives +LAI_method monTable ! (09) method used to determine LAI and SAI +f_Richards mixdform ! (10) form of Richard's equation +groundwatr noXplict ! (11) choice of groundwater parameterization +hc_profile constant ! (12) choice of hydraulic conductivity profile +bcUpprTdyn zeroFlux ! (13) type of upper boundary condition for thermodynamics +bcLowrTdyn zeroFlux ! (14) type of lower boundary condition for thermodynamics +bcUpprSoiH liq_flux ! (15) type of upper boundary condition for soil hydrology +bcLowrSoiH drainage ! (16) type of lower boundary condition for soil hydrology +veg_traits CM_QJRMS1988 ! (17) choice of parameterization for vegetation roughness length and displacement height +canopyEmis difTrans ! (18) choice of parameterization for canopy emissivity +snowIncept lightSnow ! (19) choice of parameterization for snow interception +windPrfile logBelowCanopy ! (20) choice of wind profile through the canopy +astability louisinv ! (21) choice of stability function +canopySrad CLM_2stream ! (22) choice of canopy shortwave radiation method +alb_method varDecay ! (23) choice of albedo representation +compaction anderson ! (24) choice of compaction routine +snowLayers jrdn1991 ! (25) choice of method to combine and sub-divide snow layers +thCondSnow smnv2000 ! (26) choice of thermal conductivity representation for snow +thCondSoil mixConstit ! (27) choice of thermal conductivity representation for soil +spatial_gw localColumn ! (28) choice of method for the spatial representation of groundwater +subRouting timeDlay ! (29) choice of method for sub-grid routing +! *********************************************************************************************** +! ***** description of the options available -- nothing below this point is read **************** +! *********************************************************************************************** +! ----------------------------------------------------------------------------------------------- +! (01) simulation start time +! (02) simulation end time +! ----------------------------------------------------------------------------------------------- +! (03) soil-category dateset +! STAS ! STATSGO dataset +! STAS-RUC ! ?? +! ROSETTA ! merged Rosetta table with STAS-RUC +! ----------------------------------------------------------------------------------------------- +! (04) vegetation category dataset +! USGS ! USGS 24/27 category dataset +! MODIFIED_IGBP_MODIS_NOAH ! MODIS 20-category dataset +! ----------------------------------------------------------------------------------------------- +! (05) choice of function for the soil moisture control on stomatal resistance +! NoahType ! thresholded linear function of volumetric liquid water content +! CLM_Type ! thresholded linear function of matric head +! SiB_Type ! exponential of the log of matric head +! ----------------------------------------------------------------------------------------------- +! (06) choice of function for stomatal resistance +! BallBerry ! Ball-Berry +! Jarvis ! Jarvis +! ----------------------------------------------------------------------------------------------- +! (07) choice of numerical method +! itertive ! iterative +! non_iter ! non-iterative +! itersurf ! iterate only on the surface energy balance +! ----------------------------------------------------------------------------------------------- +! (08) method used to calculate flux derivatives +! numericl ! numerical derivatives +! analytic ! analytical derivatives +! ----------------------------------------------------------------------------------------------- +! (09) method used to determine LAI and SAI +! monTable ! LAI/SAI taken directly from a monthly table for different vegetation classes +! specified ! LAI/SAI computed from green vegetation fraction and winterSAI and summerLAI parameters +! ----------------------------------------------------------------------------------------------- +! (10) form of Richards' equation +! moisture ! moisture-based form of Richards' equation +! mixdform ! mixed form of Richards' equation +! ----------------------------------------------------------------------------------------------- +! (11) choice of groundwater parameterization +! qTopmodl ! topmodel parameterization +! bigBuckt ! a big bucket (lumped aquifer model) +! noXplict ! no explicit groundwater parameterization +! ----------------------------------------------------------------------------------------------- +! (12) choice of hydraulic conductivity profile +! constant ! constant hydraulic conductivity with depth +! pow_prof ! power-law profile +! ----------------------------------------------------------------------------------------------- +! (13) choice of upper boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! nrg_flux ! energy flux +! ----------------------------------------------------------------------------------------------- +! (14) choice of lower boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (15) choice of upper boundary conditions for soil hydrology +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! liq_flux ! liquid water flux +! ----------------------------------------------------------------------------------------------- +! (16) choice of lower boundary conditions for soil hydrology +! drainage ! free draining +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! bottmPsi ! function of matric head in the lower-most layer +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (17) choice of parameterization for vegetation roughness length and displacement height +! Raupach_BLM1994 ! Raupach (BLM 1994) "Simplified expressions..." +! CM_QJRMS1988 ! Choudhury and Monteith (QJRMS 1998) "A four layer model for the heat budget..." +! vegTypeTable ! constant parameters dependent on the vegetation type +! ----------------------------------------------------------------------------------------------- +! (18) choice of parameterization for canopy emissivity +! simplExp ! simple exponential function +! difTrans ! parameterized as a function of diffuse transmissivity +! ----------------------------------------------------------------------------------------------- +! (19) choice of parameterization for snow interception +! stickySnow ! maximum interception capacity an increasing function of temerature +! lightSnow ! maximum interception capacity an inverse function of new snow density +! ----------------------------------------------------------------------------------------------- +! (20) choice of wind profile +! exponential ! exponential wind profile extends to the surface +! logBelowCanopy ! logarithmic profile below the vegetation canopy +! ----------------------------------------------------------------------------------------------- +! (21) choice of stability function +! standard ! standard MO similarity, a la Anderson (1979) +! louisinv ! Louis (1979) inverse power function +! mahrtexp ! Mahrt (1987) exponential function +! ----------------------------------------------------------------------------------------------- +! (22) choice of canopy shortwave radiation method +! noah_mp ! full Noah-MP implementation (including albedo) +! CLM_2stream ! CLM 2-stream model (see CLM documentation) +! UEB_2stream ! UEB 2-stream model (Mahat and Tarboton, WRR 2011) +! NL_scatter ! Simplified method Nijssen and Lettenmaier (JGR 1999) +! BeersLaw ! Beer's Law (as implemented in VIC) +! ----------------------------------------------------------------------------------------------- +! (23) choice of albedo representation +! conDecay ! constant decay rate (e.g., VIC, CLASS) +! varDecay ! variable decay rate (e.g., BATS approach, with destructive metamorphism + soot content) +! ----------------------------------------------------------------------------------------------- +! (24) choice of compaction routine +! consettl ! constant settlement rate +! anderson ! semi-empirical method of Anderson (1976) +! ----------------------------------------------------------------------------------------------- +! (25) choice of method to combine and sub-divide snow layers +! CLM_2010 ! CLM option: combination/sub-dividion rules depend on layer index +! jrdn1991 ! SNTHERM option: same combination/sub-dividion rules applied to all layers +! ----------------------------------------------------------------------------------------------- +! (26) choice of thermal conductivity representation for snow +! tyen1965 ! Yen (1965) +! melr1977 ! Mellor (1977) +! jrdn1991 ! Jordan (1991) +! smnv2000 ! Smirnova et al. (2000) +! ----------------------------------------------------------------------------------------------- +! (27) choice of thermal conductivity representation for soil +! funcSoilWet ! function of soil wetness +! mixConstit ! mixture of constituents +! hanssonVZJ ! test case for the mizoguchi lab experiment, Hansson et al. VZJ 2004 +! ----------------------------------------------------------------------------------------------- +! (28) choice of method for the spatial representation of groundwater +! localColumn ! separate groundwater representation in each local soil column +! singleBasin ! single groundwater store over the entire basin +! ----------------------------------------------------------------------------------------------- +! (29) choice of method for sub-grid routing +! timeDlay ! time-delay histogram +! qInstant ! instantaneous routing +! *********************************************************************************************** +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp1.txt +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp2.txt +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp3.txt diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zForcingFileList.txt b/utils/laugh_tests/colbeck1976/settings/summa_zForcingFileList.txt new file mode 100644 index 0000000000000000000000000000000000000000..8a3f73ef9c62fd5227b1f204b25f215fd903aded --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_zForcingFileList.txt @@ -0,0 +1,8 @@ +! **************************************************************************************************** +! List of forcing data files used +! +! This file includes one "word" per line: +! (1) The name of a forcing file +! --> filename must be in single quotes +! **************************************************************************************************** + 'colbeck1976_forcing.nc' diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zForcingInfo_colbeck1976.txt b/utils/laugh_tests/colbeck1976/settings/summa_zForcingInfo_colbeck1976.txt new file mode 100644 index 0000000000000000000000000000000000000000..8b6d3f15142165983cc8aa9c2a36608f9ebb77c8 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_zForcingInfo_colbeck1976.txt @@ -0,0 +1,29 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE FORCING FILE +! *********************************************************************************************************************** +! This file defines the name of the forcing data file, the number of columns in the file, the column index for each data +! variable, the start index of the simulation period, the length of the simulation period, +! and the length of the data time step +! *********************************************************************************************************************** +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "|" must be present (format a1), as these are used to check the integrety of the file +! *********************************************************************************************************************** +'(a15,a1,1x,a)' +filenmData | colbeck1976_forcing.txt ! name of the forcing data file (must be in single quotes) +ncols | 13 ! number of columns in the forcing file +iyyy | 1 ! year +im | 2 ! month +id | 3 ! day +ih | 4 ! hour +imin | 5 ! minute +pptrate | 7 ! precipitation rate (kg m-2 s-1) +SWRadAtm | 8 ! downwelling shortwave radiaiton (W m-2) +LWRadAtm | 9 ! downwelling longwave radiation (W m-2) +airtemp | 10 ! air temperature (K) +windspd | 11 ! windspeed (m/s) +airpres | 12 ! pressure (Pa) +spechum | 13 ! specific humidity (g/g) +data_step | 60 ! length of time step (seconds) diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zInitialCond_colbeck1976-exp1.nc b/utils/laugh_tests/colbeck1976/settings/summa_zInitialCond_colbeck1976-exp1.nc new file mode 100644 index 0000000000000000000000000000000000000000..6328ec1c30d23d1b13a6e01c207a86dc273940dc Binary files /dev/null and b/utils/laugh_tests/colbeck1976/settings/summa_zInitialCond_colbeck1976-exp1.nc differ diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zInitialCond_colbeck1976-exp2.nc b/utils/laugh_tests/colbeck1976/settings/summa_zInitialCond_colbeck1976-exp2.nc new file mode 100644 index 0000000000000000000000000000000000000000..9859d7f3847bd47a442074287cac74e3796fd4fd Binary files /dev/null and b/utils/laugh_tests/colbeck1976/settings/summa_zInitialCond_colbeck1976-exp2.nc differ diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zInitialCond_colbeck1976-exp3.nc b/utils/laugh_tests/colbeck1976/settings/summa_zInitialCond_colbeck1976-exp3.nc new file mode 100644 index 0000000000000000000000000000000000000000..9859d7f3847bd47a442074287cac74e3796fd4fd Binary files /dev/null and b/utils/laugh_tests/colbeck1976/settings/summa_zInitialCond_colbeck1976-exp3.nc differ diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zLocalAttributes.nc b/utils/laugh_tests/colbeck1976/settings/summa_zLocalAttributes.nc new file mode 100644 index 0000000000000000000000000000000000000000..010c8d745e57d7a4b3ccba3834bc0869f23e9b81 Binary files /dev/null and b/utils/laugh_tests/colbeck1976/settings/summa_zLocalAttributes.nc differ diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zLocalParamInfo.txt b/utils/laugh_tests/colbeck1976/settings/summa_zLocalParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..a9972fc424d7061cc81eb546548c06f009289d95 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/settings/summa_zLocalParamInfo.txt @@ -0,0 +1,226 @@ +! ======================================================================================================================= +! ======================================================================================================================= +! ===== DEFINITION OF MODEL PARAMETERS ================================================================================== +! ======================================================================================================================= +! ======================================================================================================================= +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! ======================================================================================================================= +! DEFINE SITE MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! ======================================================================================================================= +! +! ==================================================================== +! define format string for parameter descriptions +! ==================================================================== +'(a25,1x,3(a1,1x,f12.4,1x))' ! format string (must be in single quotes) +! ==================================================================== +! boundary conditions +! ==================================================================== +upperBoundHead | -0.7500 | -100.0000 | -0.0100 +lowerBoundHead | -10.0000 | -100.0000 | -0.0100 +upperBoundTheta | 0.2004 | 0.1020 | 0.3680 +lowerBoundTheta | 0.1100 | 0.1020 | 0.3680 +upperBoundTemp | 272.1600 | 270.1600 | 280.1600 +lowerBoundTemp | 274.1600 | 270.1600 | 280.1600 +! ==================================================================== +! precipitation partitioning +! ==================================================================== +tempCritRain | 273.1600 | 272.1600 | 274.1600 +tempRangeTimestep | 2.0000 | 0.5000 | 5.0000 +frozenPrecipMultip | 1.0000 | 0.5000 | 1.5000 +! ==================================================================== +! snow properties +! ==================================================================== +snowfrz_scale | 50.0000 | 10.0000 | 1000.0000 +fixedThermalCond_snow | 0.3500 | 0.1000 | 1.0000 +! ==================================================================== +! snow albedo +! ==================================================================== +albedoMax | 0.8400 | 0.7000 | 0.9500 +albedoMinWinter | 0.5500 | 0.6000 | 1.0000 +albedoMinSpring | 0.5500 | 0.3000 | 1.0000 +albedoMaxVisible | 0.9500 | 0.7000 | 0.9500 +albedoMinVisible | 0.7500 | 0.5000 | 0.7500 +albedoMaxNearIR | 0.6500 | 0.5000 | 0.7500 +albedoMinNearIR | 0.3000 | 0.1500 | 0.4500 +albedoDecayRate | 1.0d+6 | 0.1d+6 | 5.0d+6 +albedoSootLoad | 0.3000 | 0.1000 | 0.5000 +albedoRefresh | 1.0000 | 1.0000 | 10.0000 +! ==================================================================== +! radiation transfer within snow +! ==================================================================== +radExt_snow | 20.0000 | 20.0000 | 20.0000 +directScale | 0.0900 | 0.0000 | 0.5000 +Frad_direct | 0.7000 | 0.0000 | 1.0000 +Frad_vis | 0.5000 | 0.0000 | 1.0000 +! ==================================================================== +! new snow density +! ==================================================================== +newSnowDenMin | 100.0000 | 50.0000 | 100.0000 +newSnowDenMult | 100.0000 | 25.0000 | 75.0000 +newSnowDenScal | 5.0000 | 1.0000 | 5.0000 +constSnowDen | 100.0000 | 50.0000 | 250.0000 +newSnowDenAdd | 109.0000 | 80.0000 | 120.0000 +newSnowDenMultTemp | 6.0000 | 1.0000 | 12.0000 +newSnowDenMultWind | 26.0000 | 16.0000 | 36.0000 +newSnowDenMultAnd | 1.0000 | 1.0000 | 3.0000 +newSnowDenBase | 0.0000 | 0.0000 | 0.0000 +! ==================================================================== +! snow compaction +! ==================================================================== +densScalGrowth | 0.0460 | 0.0230 | 0.0920 +tempScalGrowth | 0.0400 | 0.0200 | 0.0600 +grainGrowthRate | 2.7d-6 | 1.0d-6 | 5.0d-6 +densScalOvrbdn | 0.0230 | 0.0115 | 0.0460 +tempScalOvrbdn | 0.0800 | 0.6000 | 1.0000 +baseViscosity | 9.0d+5 | 5.0d+5 | 1.5d+6 +! ==================================================================== +! water flow through snow +! ==================================================================== +Fcapil | 0.0600 | 0.0100 | 0.1000 +k_snow | 0.0150 | 0.0050 | 0.0500 +mw_exp | 3.0000 | 1.0000 | 5.0000 +! ==================================================================== +! turbulent heat fluxes +! ==================================================================== +z0Snow | 0.0010 | 0.0010 | 10.0000 +z0Soil | 0.0100 | 0.0010 | 10.0000 +z0Canopy | 0.1000 | 0.0010 | 10.0000 +zpdFraction | 0.6500 | 0.5000 | 0.8500 +critRichNumber | 0.2000 | 0.1000 | 1.0000 +Louis79_bparam | 9.4000 | 9.2000 | 9.6000 +Louis79_cStar | 5.3000 | 5.1000 | 5.5000 +Mahrt87_eScale | 1.0000 | 0.5000 | 2.0000 +leafExchangeCoeff | 0.0100 | 0.0010 | 0.1000 +windReductionParam | 0.2800 | 0.0000 | 1.0000 +! ==================================================================== +! stomatal conductance +! ==================================================================== +Kc25 | 296.0770 | 296.0770 | 296.0770 +Ko25 | 0.2961 | 0.2961 | 0.2961 +Kc_qFac | 2.1000 | 2.1000 | 2.1000 +Ko_qFac | 1.2000 | 1.2000 | 1.2000 +kc_Ha | 79430.0000 | 79430.0000 | 79430.0000 +ko_Ha | 36380.0000 | 36380.0000 | 36380.0000 +vcmax25_canopyTop | 40.0000 | 20.0000 | 100.0000 +vcmax_qFac | 2.4000 | 2.4000 | 2.4000 +vcmax_Ha | 65330.0000 | 65330.0000 | 65330.0000 +vcmax_Hd | 220000.0000 | 149250.0000 | 149250.0000 +vcmax_Sv | 710.0000 | 485.0000 | 485.0000 +vcmax_Kn | 0.6000 | 0.0000 | 1.2000 +jmax25_scale | 2.0000 | 2.0000 | 2.0000 +jmax_Ha | 43540.0000 | 43540.0000 | 43540.0000 +jmax_Hd | 152040.0000 | 152040.0000 | 152040.0000 +jmax_Sv | 495.0000 | 495.0000 | 495.0000 +fractionJ | 0.1500 | 0.1500 | 0.1500 +quantamYield | 0.0500 | 0.0500 | 0.0500 +vpScaleFactor | 1500.0000 | 1500.0000 | 1500.0000 +cond2photo_slope | 9.0000 | 1.0000 | 10.0000 +minStomatalConductance | 2000.0000 | 2000.0000 | 2000.0000 +! ==================================================================== +! vegetation properties +! ==================================================================== +winterSAI | 1.0000 | 0.0100 | 3.0000 +summerLAI | 3.0000 | 0.0100 | 10.0000 +rootScaleFactor1 | 2.0000 | 1.0000 | 10.0000 +rootScaleFactor2 | 5.0000 | 1.0000 | 10.0000 +rootingDepth | 0.5000 | 0.0100 | 10.0000 +rootDistExp | 1.0000 | 0.0100 | 1.0000 +plantWiltPsi | -150.0000 | -500.0000 | 0.0000 +soilStressParam | 5.8000 | 4.3600 | 6.3700 +critSoilWilting | 0.0750 | 0.0000 | 1.0000 +critSoilTranspire | 0.1750 | 0.0000 | 1.0000 +critAquiferTranspire | 0.2000 | 0.1000 | 10.0000 +minStomatalResistance | 50.0000 | 10.0000 | 200.0000 +leafDimension | 0.0400 | 0.0100 | 0.1000 +heightCanopyTop | 20.0000 | 0.0500 | 100.0000 +heightCanopyBottom | 2.0000 | 0.0000 | 5.0000 +specificHeatVeg | 874.0000 | 500.0000 | 1500.0000 +maxMassVegetation | 25.0000 | 1.0000 | 50.0000 +throughfallScaleSnow | 0.5000 | 0.1000 | 0.9000 +throughfallScaleRain | 0.5000 | 0.1000 | 0.9000 +refInterceptCapSnow | 6.6000 | 1.0000 | 10.0000 +refInterceptCapRain | 1.0000 | 0.0100 | 1.0000 +snowUnloadingCoeff | 0.0000 | 0.0000 | 1.5d-6 +canopyDrainageCoeff | 0.0050 | 0.0010 | 0.0100 +ratioDrip2Unloading | 0.4000 | 0.0000 | 1.0000 +canopyWettingFactor | 0.7000 | 0.0000 | 1.0000 +canopyWettingExp | 1.0000 | 0.0000 | 1.0000 +! ==================================================================== +! soil properties +! ==================================================================== +soil_dens_intr | 2700.0000 | 500.0000 | 4000.0000 +thCond_soil | 5.5000 | 2.9000 | 8.4000 +frac_sand | 0.1600 | 0.0000 | 1.0000 +frac_silt | 0.2800 | 0.0000 | 1.0000 +frac_clay | 0.5600 | 0.0000 | 1.0000 +fieldCapacity | 0.2000 | 0.0000 | 1.0000 +wettingFrontSuction | 0.3000 | 0.1000 | 1.5000 +theta_mp | 0.4010 | 0.3000 | 0.6000 +theta_sat | 0.5500 | 0.3000 | 0.6000 +theta_res | 0.1390 | 0.0010 | 0.1000 +vGn_alpha | -0.8400 | -1.0000 | -0.0100 +vGn_n | 1.3000 | 1.0000 | 3.0000 +mpExp | 5.0000 | 1.0000 | 10.0000 +k_soil | 7.5d-06 | 1.d-07 | 100.d-07 +k_macropore | 1.0d-03 | 1.d-07 | 100.d-07 +kAnisotropic | 1.0000 | 0.0001 | 10.0000 +zScale_TOPMODEL | 2.5000 | 0.1000 | 100.0000 +compactedDepth | 1.0000 | 0.0000 | 1.0000 +aquiferScaleFactor | 0.3500 | 0.1000 | 100.0000 +aquiferBaseflowExp | 2.0000 | 1.0000 | 10.0000 +aquiferBaseflowRate | 2.0000 | 1.0000 | 10.0000 +qSurfScale | 50.0000 | 1.0000 | 100.0000 +specificYield | 0.2000 | 0.1000 | 0.3000 +specificStorage | 1.d-09 | 1.d-05 | 1.d-07 +f_impede | 2.0000 | 1.0000 | 10.0000 +soilIceScale | 0.1300 | 0.0001 | 1.0000 +soilIceCV | 0.4500 | 0.1000 | 5.0000 +! ==================================================================== +! algorithmic control parameters +! ==================================================================== +minwind | 0.1000 | 0.0010 | 1.0000 +minstep | 1.0000 | 1.0000 | 1800.0000 +maxstep | 3600.0000 | 60.0000 | 1800.0000 +wimplicit | 0.0000 | 0.0000 | 1.0000 +maxiter | 100.0000 | 1.0000 | 100.0000 +relConvTol_liquid | 1.0d-3 | 1.0d-5 | 1.0d-1 +absConvTol_liquid | 1.0d-5 | 1.0d-8 | 1.0d-3 +relConvTol_matric | 1.0d-6 | 1.0d-5 | 1.0d-1 +absConvTol_matric | 1.0d-6 | 1.0d-8 | 1.0d-3 +relConvTol_energy | 1.0d-2 | 1.0d-5 | 1.0d-1 +absConvTol_energy | 1.0d-0 | 1.0d-2 | 1.0d+1 +relConvTol_aquifr | 1.0d-0 | 1.0d-2 | 1.0d+1 +absConvTol_aquifr | 1.0d-5 | 1.0d-5 | 1.0d-1 +zmin | 0.0100 | 0.0050 | 0.1000 +zmax | 0.0500 | 0.0100 | 0.5000 +! --- +zminLayer1 | 0.0075 | 0.0075 | 0.0075 +zminLayer2 | 0.0100 | 0.0100 | 0.0100 +zminLayer3 | 0.0500 | 0.0500 | 0.0500 +zminLayer4 | 0.1000 | 0.1000 | 0.1000 +zminLayer5 | 0.2500 | 0.2500 | 0.2500 +! --- +zmaxLayer1_lower | 0.0500 | 0.0500 | 0.0500 +zmaxLayer2_lower | 0.2000 | 0.2000 | 0.2000 +zmaxLayer3_lower | 0.5000 | 0.5000 | 0.5000 +zmaxLayer4_lower | 1.0000 | 1.0000 | 1.0000 +! --- +zmaxLayer1_upper | 0.0300 | 0.0300 | 0.0300 +zmaxLayer2_upper | 0.1500 | 0.1500 | 0.1500 +zmaxLayer3_upper | 0.3000 | 0.3000 | 0.3000 +zmaxLayer4_upper | 0.7500 | 0.7500 | 0.7500 +! ==================================================================== +minTempUnloading | 270.16 | 260.16 | 273.16 +minWindUnloading | 0.0000 | 0.0000 | 10.000 +rateTempUnloading | 1.87d+5 | 1.0d+5 | 3.0d+5 +rateWindUnloading | 1.56d+5 | 1.0d+5 | 3.0d+5 +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp1.txt! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp2.txt! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/colbeck1976/summa_fileManager_colbeck1976-exp3.txt \ No newline at end of file diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zParamTrial_colbeck1976-exp1.nc b/utils/laugh_tests/colbeck1976/settings/summa_zParamTrial_colbeck1976-exp1.nc new file mode 100644 index 0000000000000000000000000000000000000000..fe66f1b13a4f825edc5398e43ad096e6bd3bee97 Binary files /dev/null and b/utils/laugh_tests/colbeck1976/settings/summa_zParamTrial_colbeck1976-exp1.nc differ diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zParamTrial_colbeck1976-exp2.nc b/utils/laugh_tests/colbeck1976/settings/summa_zParamTrial_colbeck1976-exp2.nc new file mode 100644 index 0000000000000000000000000000000000000000..70ccad244580e69de9da40f2aba6fec61bf7be6d Binary files /dev/null and b/utils/laugh_tests/colbeck1976/settings/summa_zParamTrial_colbeck1976-exp2.nc differ diff --git a/utils/laugh_tests/colbeck1976/settings/summa_zParamTrial_colbeck1976-exp3.nc b/utils/laugh_tests/colbeck1976/settings/summa_zParamTrial_colbeck1976-exp3.nc new file mode 100644 index 0000000000000000000000000000000000000000..80c48dbdbea74010383403f94c4d543020df597f Binary files /dev/null and b/utils/laugh_tests/colbeck1976/settings/summa_zParamTrial_colbeck1976-exp3.nc differ diff --git a/utils/laugh_tests/colbeck1976/verification_data/colbeck1976-exp1_G1-1_timestep.nc b/utils/laugh_tests/colbeck1976/verification_data/colbeck1976-exp1_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..9e6ae158fabce58a11b81c45cffc294b752b523c Binary files /dev/null and b/utils/laugh_tests/colbeck1976/verification_data/colbeck1976-exp1_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/colbeck1976/verification_data/colbeck1976-exp2_G1-1_timestep.nc b/utils/laugh_tests/colbeck1976/verification_data/colbeck1976-exp2_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..fbfcc80186ef1b1a3a3ed88542dfe8e85c07f865 Binary files /dev/null and b/utils/laugh_tests/colbeck1976/verification_data/colbeck1976-exp2_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/colbeck1976/verification_data/colbeck1976-exp3_G1-1_timestep.nc b/utils/laugh_tests/colbeck1976/verification_data/colbeck1976-exp3_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..5244415ba0820a75a87db973f9ef0b05bc6c6627 Binary files /dev/null and b/utils/laugh_tests/colbeck1976/verification_data/colbeck1976-exp3_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/colbeck1976/verification_data/runinfo.txt b/utils/laugh_tests/colbeck1976/verification_data/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..6ffb0dd15662a7bbe474e0cf29bcc9d66997b6c7 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/verification_data/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=15 - hh=21 - mi=53 - ss=23.550 diff --git a/utils/laugh_tests/colbeck1976/verify_colbeck.py b/utils/laugh_tests/colbeck1976/verify_colbeck.py new file mode 100644 index 0000000000000000000000000000000000000000..0394fb583cad070f25de0435eda4477de119be88 --- /dev/null +++ b/utils/laugh_tests/colbeck1976/verify_colbeck.py @@ -0,0 +1,93 @@ +from os import listdir +from os.path import isfile, join +from pathlib import Path +import xarray as xr +import numpy as np + + +def verify(verified_data_path, data_to_compare_path, output_variables, numHRU): + try: + verified_dataset = xr.open_dataset(verified_data_path) + to_compare_dataset = xr.open_dataset(data_to_compare_path) + except FileNotFoundError: + print("Check the variables \'verified_data_path\' and \'data_to_compare_path\'. They may not point to the correct output files or the output filenames may have changed.") + exit() + + # Get the HRUs from the dataset into a list + for iHRU in range(0, numHRU): + verified_hru = verified_dataset.isel(hru=iHRU).copy() + hru_to_compare = to_compare_dataset.isel(hru=iHRU).copy() + + for var in output_variables: + try: + if len(verified_hru[var].values) != len(hru_to_compare[var].values): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_hru[var].values)) + print(" hru_to_compare = ", len(hru_to_compare[var].values)) + + verified_data = [] + to_verify_data = [] + if (verified_hru[var].values.ndim > 1): + # 2D output case + for list in verified_hru[var].values: + for data in list: + verified_data.append(data) + + for list in hru_to_compare[var].values: + for data in list: + to_verify_data.append(data) + + else: + # 1D output case + for data in verified_hru[var].values: + verified_data.append(data) + + for data in hru_to_compare[var].values: + to_verify_data.append(data) + + + # check length + if len(verified_data) != len(to_verify_data): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_data)) + print(" hru_to_compare = ", len(to_verify_data)) + + # check values + for elem in range(0, len(verified_data)): + if verified_data[elem] != to_verify_data[elem]: + print("variable -",var, "has different values at", elem) + print(" verified_hru = ", verified_data[elem]) + print(" hru_to_compare = ", to_verify_data[elem]) + break + + except TypeError: + print("variable - ", var, "Cannot be compared with len") + print(" verified_hru = ",verified_hru[var].values) + print(" hru_to_compare = ", hru_to_compare[var].values) + + +numHRU = 1 + +scalarRainfall = "scalarRainfall" +scalarSnowfall = "scalarSnowfall" +scalarRainPlusMelt = "scalarRainPlusMelt" +mLayerVolFracLiq = "mLayerVolFracLiq" +mLayerVolFracIce = "mLayerVolFracIce" +iLayerNrgFlux = "iLayerNrgFlux" +iLayerHeight = "iLayerHeight" +mLayerDepth = "mLayerDepth" + +output_variables = [scalarRainfall, scalarSnowfall, scalarRainPlusMelt, mLayerVolFracLiq, \ + mLayerVolFracIce, iLayerNrgFlux, iLayerHeight, mLayerDepth] + +verified_data_path = Path("./verification_data/colbeck1976-exp1_G1-1_timestep.nc") +data_to_compare_path = Path("./output/colbeck1976-exp1GRU1-1_timestep.nc") +verify(verified_data_path, data_to_compare_path, output_variables, numHRU) + +verified_data_path = Path("./verification_data/colbeck1976-exp2_G1-1_timestep.nc") +data_to_compare_path = Path("./output/colbeck1976-exp2GRU1-1_timestep.nc") +verify(verified_data_path, data_to_compare_path, output_variables, numHRU) + +verified_data_path = Path("./verification_data/colbeck1976-exp3_G1-1_timestep.nc") +data_to_compare_path = Path("./output/colbeck1976-exp3GRU1-1_timestep.nc") +verify(verified_data_path, data_to_compare_path, output_variables, numHRU) \ No newline at end of file diff --git a/utils/laugh_tests/dir_setup.sh b/utils/laugh_tests/dir_setup.sh new file mode 100755 index 0000000000000000000000000000000000000000..ef701e68a376579da92d834ca23aca6490cd8341 --- /dev/null +++ b/utils/laugh_tests/dir_setup.sh @@ -0,0 +1,10 @@ +#! /bin/bash + +for dir in */; do + mkdir -p $dir/verification_data + # mkdir -p $dir/config + # mkdir -p $dir/forcing_data + # mkdir -p $dir/output + # mkdir -p $dir/settings + # touch $dir/run_test.sh +done diff --git a/utils/laugh_tests/miller1998/config/clay/Summa_Actors_Settings.json b/utils/laugh_tests/miller1998/config/clay/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..ccf6c4ac6c5fedcbd3a2dc028797926fd12ce17c --- /dev/null +++ b/utils/laugh_tests/miller1998/config/clay/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/miller1998/settings/summa_fileManager_millerClay.txt", + "outputCSV": false, + "csvPath": "/scratch/kck540/csv/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} \ No newline at end of file diff --git a/utils/laugh_tests/miller1998/config/loam/Summa_Actors_Settings.json b/utils/laugh_tests/miller1998/config/loam/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..c54ea844cf533f2b955e615f9b7120c5c62a106b --- /dev/null +++ b/utils/laugh_tests/miller1998/config/loam/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/miller1998/settings/summa_fileManager_millerLoam.txt", + "outputCSV": false, + "csvPath": "/scratch/kck540/csv/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} \ No newline at end of file diff --git a/utils/laugh_tests/miller1998/config/sand/Summa_Actors_Settings.json b/utils/laugh_tests/miller1998/config/sand/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..37fc2967464269d2d244021cd734715399748dc5 --- /dev/null +++ b/utils/laugh_tests/miller1998/config/sand/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/miller1998/settings/summa_fileManager_millerSand.txt", + "outputCSV": false, + "csvPath": "/scratch/kck540/csv/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} \ No newline at end of file diff --git a/utils/laugh_tests/miller1998/forcing_data/miller1998_forcing.nc b/utils/laugh_tests/miller1998/forcing_data/miller1998_forcing.nc new file mode 100644 index 0000000000000000000000000000000000000000..07ea45bea8c8763c4a218a788849d3a167006aec Binary files /dev/null and b/utils/laugh_tests/miller1998/forcing_data/miller1998_forcing.nc differ diff --git a/utils/laugh_tests/miller1998/output/millerClayGRU1-1_timestep.nc b/utils/laugh_tests/miller1998/output/millerClayGRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..9d300d43aca06babe931ddc2ad3e57c26be239f5 Binary files /dev/null and b/utils/laugh_tests/miller1998/output/millerClayGRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/miller1998/output/millerLoamGRU1-1_timestep.nc b/utils/laugh_tests/miller1998/output/millerLoamGRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..aa63590c28a5d07dd82904425de6e93e002a85b8 Binary files /dev/null and b/utils/laugh_tests/miller1998/output/millerLoamGRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/miller1998/output/millerSandGRU1-1_timestep.nc b/utils/laugh_tests/miller1998/output/millerSandGRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..c067e467c38ae7ac26e211bdb550c56f12e6d9b7 Binary files /dev/null and b/utils/laugh_tests/miller1998/output/millerSandGRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/miller1998/output/runinfo.txt b/utils/laugh_tests/miller1998/output/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..669c7fc77bb60ce4123c1f6e5f4cde3cffd3eb7c --- /dev/null +++ b/utils/laugh_tests/miller1998/output/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=16 - hh=18 - mi=45 - ss=41.931 diff --git a/utils/laugh_tests/miller1998/run_test_summa.sh b/utils/laugh_tests/miller1998/run_test_summa.sh new file mode 100755 index 0000000000000000000000000000000000000000..afe4927125202154f9eed9373db8c8264c2dc8a8 --- /dev/null +++ b/utils/laugh_tests/miller1998/run_test_summa.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerClay.txt +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerLoam.txt +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerSand.txt \ No newline at end of file diff --git a/utils/laugh_tests/miller1998/run_test_summa_actors.sh b/utils/laugh_tests/miller1998/run_test_summa_actors.sh new file mode 100755 index 0000000000000000000000000000000000000000..864e583b8aa024e5655c409fd77279f2a00b6088 --- /dev/null +++ b/utils/laugh_tests/miller1998/run_test_summa_actors.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/miller1998/config/clay +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/miller1998/config/loam +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/miller1998/config/sand \ No newline at end of file diff --git a/utils/laugh_tests/miller1998/settings/GENPARM.TBL b/utils/laugh_tests/miller1998/settings/GENPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..17fc9172ba276dffbbb9dfa90cdcbc4eecc1070c --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/GENPARM.TBL @@ -0,0 +1,36 @@ +General Parameters +SLOPE_DATA +9 +0.1 +0.6 +1.0 +0.35 +0.55 +0.8 +0.63 +0.0 +0.0 +SBETA_DATA +-2.0 +FXEXP_DATA +2.0 +CSOIL_DATA +2.00E+6 +SALP_DATA +2.6 +REFDK_DATA +2.0E-6 +REFKDT_DATA +3.0 +FRZK_DATA +0.15 +ZBOT_DATA +-8.0 +CZIL_DATA +0.1 +SMLOW_DATA +0.5 +SMHIGH_DATA +3.0 +LVCOEF_DATA +0.5 diff --git a/utils/laugh_tests/miller1998/settings/MPTABLE.TBL b/utils/laugh_tests/miller1998/settings/MPTABLE.TBL new file mode 100644 index 0000000000000000000000000000000000000000..0f0c59c02cc2f03d2a168b8523ffa793773861a7 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/MPTABLE.TBL @@ -0,0 +1,284 @@ +&noah_mp_usgs_veg_categories + VEG_DATASET_DESCRIPTION = "USGS" + NVEG = 27 +/ +&noah_mp_usgs_parameters + ! NVEG = 27 + ! 1: Urban and Built-Up Land + ! 2: Dryland Cropland and Pasture + ! 3: Irrigated Cropland and Pasture + ! 4: Mixed Dryland/Irrigated Cropland and Pasture + ! 5: Cropland/Grassland Mosaic + ! 6: Cropland/Woodland Mosaic + ! 7: Grassland + ! 8: Shrubland + ! 9: Mixed Shrubland/Grassland + ! 10: Savanna + ! 11: Deciduous Broadleaf Forest + ! 12: Deciduous Needleleaf Forest + ! 13: Evergreen Broadleaf Forest + ! 14: Evergreen Needleleaf Forest + ! 15: Mixed Forest + ! 16: Water Bodies + ! 17: Herbaceous Wetland + ! 18: Wooded Wetland + ! 19: Barren or Sparsely Vegetated + ! 20: Herbaceous Tundra + ! 21: Wooded Tundra + ! 22: Mixed Tundra + ! 23: Bare Ground Tundra + ! 24: Snow or Ice + ! 25: Playa + ! 26: Lava + ! 27: White Sand + + ISURBAN = 1 + ISWATER = 16 + ISBARREN = 19 + ISSNOW = 24 + EBLFOREST = 13 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.00, 0.06, 0.06, 0.06, 0.06, 0.15, 0.06, 0.06, 0.06, 0.86, 0.80, 0.85, 1.10, 1.09, 0.80, 0.00, 0.06, 0.05, 0.00, 0.04, 0.06, 0.06, 0.03, 0.00, 0.01, 0.00, 0.00, + HVT = 15.0, 0.50, 0.50, 0.50, 0.50, 1.25, 0.50, 0.50, 0.50, 16.0, 16.0, 18.0, 20.0, 20.0, 16.0, 0.00, 0.50, 0.80, 0.00, 0.50, 0.80, 0.80, 0.50, 0.00, 0.10, 0.00, 0.00, + HVB = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 3.00, 3.50, 3.00, 4.00, 3.50, 3.00, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + DEN = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, + RC = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.00, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.07, 0.10, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.00, 0.11, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.35, 0.45, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.00, 0.58, 0.45, 0.00, 0.45, 0.45, 0.45, 0.45, 0.00, 0.45, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.00, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.00, 0.36, 0.16, 0.00, 0.16, 0.16, 0.16, 0.16, 0.00, 0.16, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.00, 0.58, 0.39, 0.00, 0.39, 0.39, 0.39, 0.39, 0.00, 0.39, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.00, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.07, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, + 0.00, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.10, 0.10, 0.25, 0.25, 0.10, 0.25, 0.10, 0.25, 0.00, 0.25, 0.25, 0.00, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.000, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.220, 0.001, 0.000, 0.220, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + 0.000, 0.380, 0.380, 0.380, 0.380, 0.380, 0.380, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.380, 0.001, 0.000, 0.380, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + + XL = 0.000, -0.30, -0.30, -0.30, -0.30, -0.30, -0.30, 0.010, 0.250, 0.010, 0.250, 0.010, 0.010, 0.010, 0.250, 0.000, -0.30, 0.250, 0.000, -0.30, 0.250, 0.250, 0.250, 0.000, 0.250, 0.000, 0.000, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.0, 1.6, 1.8, 1.2, 1.2, 1.30, 0.50, 0.65, 0.70, 0.65, 0.55, 0.2, 0.55, 0.5, 0.5, 0.0, 1.4, 1.4, 0.0, 1.2, 1.3, 1.4, 1.0, 0.0, 1.0, 0.0, 0.0, + DILEFC= 0.00, 0.50, 0.50, 0.50, 0.35, 0.20, 0.20, 0.20, 0.50, 0.50, 0.60, 1.80, 0.50, 1.20, 0.80, 0.00, 0.40, 0.40, 0.00, 0.40, 0.30, 0.40, 0.30, 0.00, 0.30, 0.00, 0.00, + DILEFW= 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.20, 0.50, 0.20, 0.20, 4.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.20, 0.20, 0.00, 0.20, 0.00, 0.00, + RMF25 = 0.00, 1.00, 1.40, 1.45, 1.45, 1.45, 1.80, 0.26, 0.26, 0.80, 3.00, 4.00, 0.65, 3.00, 3.00, 0.00, 3.20, 3.20, 0.00, 3.20, 3.00, 3.00, 3.00, 0.00, 3.00, 0.00, 0.00, + SLA = 60, 80, 80, 80, 80, 80, 60, 60, 60, 50, 80, 80, 80, 80, 80, 0, 80, 80, 0, 80, 80, 80, 80, 0, 80, 0, 0, + FRAGR = 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + TMIN = 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 268, 273, 265, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + VCMX25= 0.00, 80.0, 80.0, 80.0, 60.0, 70.0, 40.0, 40.0, 40.0, 40.0, 60.0, 60.0, 60.0, 50.0, 55.0, 0.00, 50.0, 50.0, 0.00, 50.0, 50.0, 50.0, 50.0, 0.00, 50.0, 0.00, 0.00, + TDLEF = 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 268, 278, 278, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + BP = 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 1.E15, + MP = 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0., 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.00, + RMS25 = 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.32, 0.10, 0.64, 0.30, 0.90, 0.80, 0.00, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, + RMR25 = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.20, 0.00, 0.00, 0.01, 0.01, 0.05, 0.05, 0.36, 0.03, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 0.00, + WDPOOL= 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, + WRRAT = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 30.0, 30.0, 30.0, 30.0, 30.0, 0.00, 0.00, 30.0, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, + MRP = 0.00, 0.23, 0.23, 0.23, 0.23, 0.23, 0.17, 0.19, 0.19, 0.40, 0.40, 0.37, 0.23, 0.37, 0.30, 0.00, 0.17, 0.40, 0.00, 0.17, 0.23, 0.20, 0.00, 0.00, 0.20, 0.00, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.3, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.4, 0.2, 0.3, 0.1, 0.4, 0.7, 0.5, 0.5, 0.4, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.3, 0.3, 0.8, 0.2, 0.5, 0.1, 0.9, 1.3, 0.5, 0.5, 0.4, 0.0, 0.4, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.5, 0.2, 1.3, 0.1, 0.8, 0.1, 1.2, 1.2, 0.5, 0.6, 0.5, 0.0, 0.6, 0.6, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.4, 0.1, 1.1, 0.1, 0.5, 0.1, 1.6, 1.0, 0.5, 0.6, 0.5, 0.0, 0.5, 0.5, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.4, 0.1, 0.2, 0.1, 1.4, 0.8, 0.5, 0.7, 0.6, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.6, 0.6, 0.5, 0.6, 0.5, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.4, 0.5, 0.5, 0.5, 0.3, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + + LAIM = 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.5, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 0.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.0, 3.5, 1.6, 1.0, 0.0, 0.6, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.7, 0.7, 0.7, 0.5, 0.7, 1.0, 1.5, 1.0, 1.2, 0.6, 3.5, 1.6, 1.0, 0.0, 0.7, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 1.2, 1.2, 1.2, 1.5, 1.2, 1.0, 2.0, 1.0, 3.0, 1.2, 3.5, 5.3, 2.3, 0.0, 1.2, 0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.0, 3.0, 3.0, 3.0, 2.5, 3.0, 1.0, 2.5, 1.0, 4.7, 2.0, 3.5, 5.5, 3.5, 0.0, 3.0, 0.7, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 3.5, 3.5, 3.5, 3.5, 3.5, 1.0, 3.0, 1.0, 4.5, 2.6, 3.5, 5.3, 4.3, 0.0, 3.5, 1.7, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 1.5, 1.5, 1.5, 3.5, 1.5, 1.0, 2.5, 1.0, 3.4, 1.7, 3.5, 5.3, 3.3, 0.0, 1.5, 3.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.5, 0.7, 0.7, 0.7, 2.0, 0.7, 1.0, 1.5, 1.0, 1.2, 1.0, 3.5, 4.2, 2.2, 0.0, 0.7, 2.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 1.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.5, 3.5, 2.2, 1.2, 0.0, 0.6, 1.6, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.2, 3.5, 2.2, 1.2, 0.0, 0.5, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 2.2, 1.2, 0.0, 0.4, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + SLAREA=0.0228,0.0200,0.0200,0.0295,0.0223,0.0277,0.0060,0.0227,0.0188,0.0236,0.0258,0.0200,0.0200,0.0090,0.0223,0.0422,0.0390, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 41.87, 0.00, 0.00, 2.52, 0.04, 17.11, 0.02, 21.62, 0.11, 22.80, 46.86, 0.00, 0.00, 0.46, 30.98, 2.31, 1.63, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.98, 0.00, 0.00, 0.16, 0.09, 0.28, 0.05, 0.92, 0.22, 0.59, 0.38, 0.00, 0.00, 3.34, 0.96, 1.47, 1.07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.82, 0.00, 0.00, 0.23, 0.05, 0.81, 0.03, 1.73, 1.26, 1.37, 1.84, 0.00, 0.00, 1.85, 1.84, 1.70, 1.21, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ + + +&noah_mp_modis_veg_categories + VEG_DATASET_DESCRIPTION = "modified igbp modis noah" + NVEG = 20 +/ + +&noah_mp_modis_parameters +! 1 'Evergreen Needleleaf Forest' -> USGS 14 +! 2, 'Evergreen Broadleaf Forest' -> USGS 13 +! 3, 'Deciduous Needleleaf Forest' -> USGS 12 +! 4, 'Deciduous Broadleaf Forest' -> USGS 11 +! 5, 'Mixed Forests' -> USGS 15 +! 6, 'Closed Shrublands' -> USGS 8 "shrubland" +! 7, 'Open Shrublands' -> USGS 9 "shrubland/grassland" +! 8, 'Woody Savannas' -> USGS 8 "shrubland" +! 9, 'Savannas' -> USGS 10 +! 10, 'Grasslands' -> USGS 7 +! 11 'Permanent wetlands' -> avg of USGS 17 and 18 (herb. wooded wetland) +! 12, 'Croplands' -> USGS 2 "dryland cropland" +! 13, 'Urban and Built-Up' -> USGS 1 +! 14 'cropland/natural vegetation mosaic' -> USGS 5 "cropland/grassland" +! 15, 'Snow and Ice' -> USGS 24 +! 16, 'Barren or Sparsely Vegetated' -> USGS 19 +! 17, 'Water' -> USGS 16 +! 18, 'Wooded Tundra' -> USGS 21 +! 19, 'Mixed Tundra' -> USGS 22 +! 20, 'Barren Tundra' -> USGS 23 + + ISURBAN = 13 + ISWATER = 17 + ISBARREN = 16 + ISSNOW = 15 + EBLFOREST = 2 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.09, 1.10, 0.85, 0.80, 0.80, 0.06, 0.06, 0.06, 0.86, 0.06, 0.055, 0.06, 1.00, 0.06, 0.00, 0.00, 0.00, 0.06, 0.06, 0.03, +! Z0MVT = 0.50, 0.50, 0.50, 0.50, 0.50, 0.05, 0.06, 0.05, 0.15, 0.12, 0.30, 0.15, 0.80, 0.14, 0.00, 0.01, 0.00, 0.30, 0.15, 0.10, + HVT = 20.0, 20.0, 18.0, 16.0, 16.0, 0.50, 0.50, 0.50, 16.0, 0.50, 0.65, 0.50, 15.0, 0.50, 0.00, 0.00, 0.00, 0.80, 0.80, 0.50, + HVB = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 5.00, 0.05, 0.075, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + DEN = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, + RC = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + 0.35, 0.45, 0.35, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.58, 0.515, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.45, 0.45, 0.45, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, 0.00, 0.36, 0.00, 0.00, 0.00, 0.16, 0.16, 0.16, + 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.58, 0.485, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.39, 0.39, 0.39, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, 0.00, 0.07, 0.00, 0.00, 0.00, 0.05, 0.05, 0.05, + 0.10, 0.25, 0.10, 0.25, 0.25, 0.10, 0.10, 0.10, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, 0.00, 0.25, 0.25, 0.25, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.220, 0.1105, 0.220, 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.380, 0.1905, 0.380, 0.000, 0.380, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + + XL = 0.010, 0.010, 0.010, 0.250, 0.250, 0.010, 0.250, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, +! CWPVT = 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, 0.70, 0.65, 0.65, 0.50, 1.4, 1.6, 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, 1.4, 1.0, + DILEFC= 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, 0.50, 0.20, 0.50, 0.20, 0.4, 0.50, 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, 0.40, 0.30, + DILEFW= 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, 0.20, 0.20, + RMF25 = 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, + SLA = 80, 80, 80, 80, 80, 60, 60, 60, 50, 60, 80, 80, 60, 80, 0, 0, 0, 80, 80, 80, + FRAGR = 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, 0.10, 0.10, + TMIN = 265, 273, 268, 273, 268, 273, 273, 273, 273, 273, 268, 273, 0, 273, 0, 0, 0, 268, 268, 268, + VCMX25= 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, 50.0, 50.0, + TDLEF = 278, 278, 268, 278, 268, 278, 278, 278, 278, 278, 268, 278, 278, 278, 0, 0, 0, 268, 268, 268, + BP = 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, + MP = 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, 0.06, 0.06, + RMS25 = 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.00, + RMR25 = 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, 1.5, 1.5, + WDPOOL= 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, + WRRAT = 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, + MRP = 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, 0.19, 0.19, 0.40, 0.17, 0.285, 0.23, 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, 0.20, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.3, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.5, 0.5, 0.7, 0.4, 0.4, 0.2, 0.3, 0.2, 0.1, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 1.3, 0.9, 0.4, 0.2, 0.5, 0.2, 0.1, 0.8, 0.4, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 1.2, 1.2, 0.5, 0.1, 0.8, 0.1, 0.1, 1.3, 0.6, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.6, 0.5, 1.0, 1.6, 0.5, 0.1, 0.5, 0.1, 0.1, 1.1, 0.5, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.7, 0.5, 0.8, 1.4, 0.6, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 0.6, 0.6, 0.5, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 0.5, 0.4, 0.3, 0.1, 0.2, 0.1, 0.1, 0.4, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + + LAIM = 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.4, 0.3, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.45, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.3, 1.0, 1.0, 1.0, 1.0, 1.0, 0.6, 0.5, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.6, 1.2, 1.0, 1.0, 1.5, 1.0, 1.0, 0.7, 0.55, 0.0, 0.0, 0.7, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 5.3, 4.5, 1.2, 3.0, 2.3, 1.0, 2.0, 1.0, 1.0, 1.2, 0.85, 1.0, 0.0, 1.2, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 5.5, 4.5, 2.0, 4.7, 3.5, 1.0, 2.5, 1.0, 1.0, 3.0, 1.85, 2.0, 0.0, 3.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 5.3, 4.5, 2.6, 4.5, 4.3, 1.0, 3.0, 1.0, 1.0, 3.5, 2.6, 3.0, 0.0, 3.5, 0.0, 0.0, 0.0, 2.0, 2.0, 0.0, + 5.3, 4.5, 1.7, 3.4, 3.3, 1.0, 2.5, 1.0, 1.0, 1.5, 2.25, 3.0, 0.0, 1.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 4.2, 4.5, 1.0, 1.2, 2.2, 1.0, 1.5, 1.0, 1.0, 0.7, 1.6, 1.5, 0.0, 0.7, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 2.2, 4.5, 0.5, 0.3, 1.2, 1.0, 1.0, 1.0, 1.0, 0.6, 1.1, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 2.2, 4.5, 0.2, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.5, 0.65, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2.2, 4.5, 0.0, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.4, 0.4, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + +! LAIM = 5.1, 3.3, 0.0, 1.9, 3.0, 1.0, 0.8, 0.5, 0.5, 0.7, 0.3, 1.8, 0.0, 2.4, 0.0, 0.0, 0.0, 0.6, 0.7, 0.0, +! 5.0, 3.6, 0.0, 1.9, 2.9, 1.0, 0.6, 1.0, 1.0, 0.7, 0.45, 1.9, 0.0, 2.6, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.1, 4.4, 0.0, 2.1, 3.3, 1.0, 0.8, 1.8, 1.7, 1.1, 0.5, 2.6, 0.0, 2.9, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.3, 5.4, 0.6, 2.5, 4.0, 1.0, 0.9, 2.6, 2.9, 1.7, 0.55, 3.9, 0.0, 3.4, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.9, 6.2, 1.2, 3.1, 5.0, 1.0, 1.5, 3.4, 3.6, 2.5, 0.85, 5.2, 0.0, 4.0, 0.0, 0.0, 0.0, 0.8, 1.0, 0.0, +! 6.3, 6.4, 2.0, 3.3, 5.4, 1.0, 2.1, 3.6, 3.5, 2.7, 1.85, 5.6, 0.0, 4.2, 0.0, 0.0, 0.0, 2.0, 2.3, 0.0, +! 6.4, 5.9, 2.6, 3.3, 5.4, 1.0, 2.6, 3.4, 2.9, 2.8, 2.6, 5.3, 0.0, 4.1, 0.0, 0.0, 0.0, 3.3, 3.3, 0.0, +! 6.1, 5.6, 1.7, 3.1, 5.0, 1.0, 2.4, 3.2, 2.7, 2.4, 2.25, 4.5, 0.0, 3.8, 0.0, 0.0, 0.0, 3.3, 3.0, 0.0, +! 6.0, 5.3, 1.0, 2.9, 4.8, 1.0, 2.2, 2.9, 2.4, 2.1, 1.6, 4.1, 0.0, 3.7, 0.0, 0.0, 0.0, 2.8, 3.0, 0.0, +! 5.5, 4.7, 0.5, 2.6, 4.1, 1.0, 1.6, 2.3, 1.8, 1.7, 1.1, 3.2, 0.0, 3.2, 0.0, 0.0, 0.0, 1.4, 1.4, 0.0, +! 5.2, 4.0, 0.2, 2.2, 3.4, 1.0, 1.0, 1.5, 1.4, 1.3, 0.65, 2.3, 0.0, 2.7, 0.0, 0.0, 0.0, 0.5, 0.7, 0.0, +! 5.1, 3.2, 0.0, 1.9, 3.0, 1.0, 0.9, 0.7, 0.7, 0.8, 0.4, 1.7, 0.0, 2.4, 0.0, 0.0, 0.0, 0.8, 0.7, 0.0, + + SLAREA=0.0090, 0.0200, 0.0200, 0.0258, 0.0223, 0.0227, 0.0188, 0.0227, 0.0236, 0.0060, 0.0295, 0.0200, 0.0228, 0.0223, 0.02, 0.02, 0.0422, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 0.46, 0.00, 0.00, 46.86, 30.98, 21.62, 0.11, 21.62, 22.80, 0.02, 0.815, 0.00, 41.87, 0.04, 0.0, 0.0, 2.31, 0.0, 0.0, 0.0, + 3.34, 0.00, 0.00, 0.38, 0.96, 0.92, 0.22, 0.92, 0.59, 0.05, 0.535, 0.00, 0.98, 0.09, 0.0, 0.0, 1.47, 0.0, 0.0, 0.0, + 1.85, 0.00, 0.00, 1.84, 1.84, 1.73, 1.26, 1.73, 1.37, 0.03, 0.605, 0.00, 1.82, 0.05, 0.0, 0.0, 1.70, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ diff --git a/utils/laugh_tests/miller1998/settings/Model_Output.txt b/utils/laugh_tests/miller1998/settings/Model_Output.txt new file mode 100644 index 0000000000000000000000000000000000000000..19ed37469f9d3860b3414756a551cb850ab9955b --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/Model_Output.txt @@ -0,0 +1,34 @@ +! --------- +! model variables +! --------- +time | 1 +nSnow | 1 +nSoil | 1 +nLayers | 1 +mLayerHeight | 1 +iLayerLiqFluxSoil | 1 +mLayerDepth | 1 +mLayerVolFracIce | 1 +mLayerVolFracLiq | 1 +mLayerMatricHead | 1 +mLayerTranspire | 1 +mLayerBaseflow | 1 +mLayerCompress | 1 +iLayerNrgFlux | 1 +basin__TotalArea | 1 +scalarGroundEvaporation | 1 +scalarSoilBaseflow | 1 +scalarSoilDrainage | 1 +scalarInfiltration | 1 +scalarSnowDrainage | 1 +scalarSnowSublimation | 1 +scalarThroughfallRain | 1 +scalarThroughfallSnow | 1 +scalarRainfall | 1 +scalarSnowfall | 1 +scalarRainPlusMelt | 1 +fieldCapacity | 1 +pptrate | 1 +averageRoutedRunoff | 1 +scalarSWE | 1 +fieldCapacity | 1 diff --git a/utils/laugh_tests/miller1998/settings/SOILPARM.TBL b/utils/laugh_tests/miller1998/settings/SOILPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..b87d1bae502460279b1e6389ff34c2d3ce842510 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/SOILPARM.TBL @@ -0,0 +1,59 @@ +Soil Parameters +STAS +19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 2.79, 0.010, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.010, 0.92, 'SAND' +2, 4.26, 0.028, -1.044, 0.421, 0.383, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.82, 'LOAMY SAND' +3, 4.74, 0.047, -0.569, 0.434, 0.383, 0.141, 5.23E-6, 0.805E-5, 0.047, 0.60, 'SANDY LOAM' +4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.25, 'SILT LOAM' +5, 5.33, 0.084, 0.162, 0.476, 0.383, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.10, 'SILT' +6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.40, 'LOAM' +7, 6.66, 0.067, -1.491, 0.404, 0.314, 0.135, 4.45E-6, 0.990E-5, 0.067, 0.60, 'SANDY CLAY LOAM' +8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.04E-6, 0.237E-4, 0.120, 0.10, 'SILTY CLAY LOAM' +9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 0.113E-4, 0.103, 0.35, 'CLAY LOAM' +10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 0.187E-4, 0.100, 0.52, 'SANDY CLAY' +11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 0.964E-5, 0.126, 0.10, 'SILTY CLAY' +12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 0.112E-4, 0.138, 0.25, 'CLAY' +13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 'WATER' +15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.07, 'BEDROCK' +16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.25, 'OTHER(land-ice)' +17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 'LAVA' +19, 2.79, 0.01, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.01, 0.92, 'WHITE SAND' +Soil Parameters +STAS-RUC +19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 4.05, 0.045, 1.47, 0.395, 0.236, 0.121, 1.76E-4, 0.608E-6, 0.068, 0.92, 'SAND' +2, 4.38, 0.057, 1.41, 0.410, 0.383, 0.090, 1.56E-4, 0.514E-5, 0.075, 0.82, 'LOAMY SAND' +3, 4.90, 0.065, 1.34, 0.435, 0.383, 0.218, 3.47E-5, 0.805E-5, 0.114, 0.60, 'SANDY LOAM' +4, 5.30, 0.067, 1.27, 0.485, 0.360, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.25, 'SILT LOAM' +5, 5.30, 0.034, 1.27, 0.485, 0.383, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.10, 'SILT' +6, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.40, 'LOAM' +7, 7.12, 0.100, 1.18, 0.420, 0.314, 0.299, 6.30E-6, 0.990E-5, 0.175, 0.60, 'SANDY CLAY LOAM' +8, 7.75, 0.089, 1.32, 0.477, 0.387, 0.356, 1.70E-6, 0.237E-4, 0.218, 0.10, 'SILTY CLAY LOAM' +9, 8.52, 0.095, 1.23, 0.476, 0.382, 0.630, 2.45E-6, 0.113E-4, 0.250, 0.35, 'CLAY LOAM' +10, 10.40, 0.100, 1.18, 0.426, 0.338, 0.153, 2.17E-6, 0.187E-4, 0.219, 0.52, 'SANDY CLAY' +11, 10.40, 0.070, 1.15, 0.492, 0.404, 0.490, 1.03E-6, 0.964E-5, 0.283, 0.10, 'SILTY CLAY' +12, 11.40, 0.068, 1.09, 0.482, 0.412, 0.405, 1.28E-6, 0.112E-4, 0.286, 0.25, 'CLAY' +13, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 'WATER' +15, 4.05, 0.004, 2.03, 0.200, 0.17, 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 'BEDROCK' +16, 4.90, 0.065, 2.10, 0.435, 0.283, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 'OTHER(land-ice)' +17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.060, 0.52, 'LAVA' +19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 'WHITE SAND' +Soil Parameters +ROSETTA +12,1 'theta_res theta_sat vGn_alpha vGn_n k_soil BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1 0.098 0.459 -1.496 1.253 1.70799e-06 1.40 0.068 1.09 0.482 0.412 0.405 1.28E-6 0.112E-4 0.286 0.25 'CLAY' +2 0.079 0.442 -1.581 1.416 9.47297e-07 8.52 0.095 1.23 0.476 0.382 0.630 2.45E-6 0.113E-4 0.250 0.35 'CLAY LOAM' +3 0.061 0.399 -1.112 1.472 1.39472e-06 5.39 0.078 1.21 0.451 0.329 0.478 6.95E-6 0.143E-4 0.155 0.40 'LOAM' +4 0.049 0.390 -3.475 1.746 1.21755e-05 4.38 0.057 1.41 0.410 0.383 0.090 1.56E-4 0.514E-5 0.075 0.82 'LOAMY SAND' +5 0.053 0.375 -3.524 3.177 7.43852e-05 4.05 0.045 1.47 0.395 0.236 0.121 1.76E-4 0.608E-6 0.068 0.92 'SAND' +6 0.117 0.385 -3.342 1.208 1.31367e-06 0.40 0.100 1.18 0.426 0.338 0.153 2.17E-6 0.187E-4 0.219 0.52 'SANDY CLAY' +7 0.063 0.384 -2.109 1.330 1.52576e-06 7.12 0.100 1.18 0.420 0.314 0.299 6.30E-6 0.990E-5 0.175 0.60 'SANDY CLAY LOAM' +8 0.039 0.387 -2.667 1.449 4.43084e-06 4.90 0.065 1.34 0.435 0.383 0.218 3.47E-5 0.805E-5 0.114 0.60 'SANDY LOAM' +9 0.050 0.489 -0.658 1.679 5.06391e-06 5.30 0.034 1.27 0.485 0.383 0.786 7.20E-6 0.239E-4 0.179 0.10 'SILT' +10 0.111 0.481 -1.622 1.321 1.11298e-06 0.40 0.070 1.15 0.492 0.404 0.490 1.03E-6 0.964E-5 0.283 0.10 'SILTY CLAY' +11 0.090 0.482 -0.839 1.521 1.28673e-06 7.75 0.089 1.32 0.477 0.387 0.356 1.70E-6 0.237E-4 0.218 0.10 'SILTY CLAY LOAM' +12 0.065 0.439 -0.506 1.663 2.11099e-06 5.30 0.067 1.27 0.485 0.360 0.786 7.20E-6 0.239E-4 0.179 0.25 'SILT LOAM' diff --git a/utils/laugh_tests/miller1998/settings/VEGPARM.TBL b/utils/laugh_tests/miller1998/settings/VEGPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..be03224ef59386e2503e147729ffeaef9aa12553 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/VEGPARM.TBL @@ -0,0 +1,119 @@ +Vegetation Parameters +USGS +27,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ' +1, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up Land' +2, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Dryland Cropland and Pasture' +3, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 'Irrigated Cropland and Pasture' +4, .80, 3, 40., 100., 36.25, 0.04, 66., 1.00, 4.50, .920, .985, .18, .23, .05, .15, 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'Cropland/Grassland Mosaic' +6, .80, 3, 70., 65., 44.14, 0.04, 60., 2.00, 4.00, .930, .985, .16, .20, .20, .20, 'Cropland/Woodland Mosaic' +7, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grassland' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Shrubland' +9, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Mixed Shrubland/Grassland' +10, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savanna' +11, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +12, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +13, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +14, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +15, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forest' +16, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water Bodies' +17, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 'Herbaceous Wetland' +18, .60, 2, 100., 30., 51.93, 0.02, 50., 2.00, 5.80, .950, .950, .14, .14, .40, .40, 'Wooded Wetland' +19, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +20, .60, 3, 150., 100., 42.00, 0.025, 68., 0.41, 3.35, .920, .920, .15, .20, .10, .10, 'Herbaceous Tundra' +21, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +22, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +23, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Bare Ground Tundra' +24, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow or Ice' +25, .50, 1, 40., 100., 36.25, 0.02, 75., 0.01, 0.01, .890, .890, .30, .30, .01, .01, 'Playa' +26, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .880, .880, .16, .16, .15, .15, 'Lava' +27, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .830, .830, .60, .60, .01, .01, 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 +Vegetation Parameters +MODIFIED_IGBP_MODIS_NOAH +20,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX' +1 .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forests' +6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Closed Shrublands' +7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Open Shrublands' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Woody Savannas' +9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savannas' +10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grasslands' +11 .60, 2, 70., 65., 55.97 0.015 59., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 'Permanent wetlands' +12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Croplands' +13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up' +14 .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'cropland/natural vegetation mosaic' +15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow and Ice' +16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water' +18, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +19, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +20, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Barren Tundra' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +16 +NATURAL +14 +Vegetation Parameters +USGS-RUC +27,1, 'ALBEDO Z0 LEMI PC SHDFAC NROOT RS RGL HS SNUP LAI MAXALB' +1, .18, .50, .88, .40, .10, 1, 200., 999., 999.0, 0.04, 4.0, 40., 'Urban and Built-Up Land' +2, .17, .06, .92, .30, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Dryland Cropland and Pasture' +3, .18, .075, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Irrigated Cropland and Pasture' +4, .18, .065, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .18, .05, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Cropland/Grassland Mosaic' +6, .16, .20, .93, .40, .80, 3, 70., 65., 44.14, 0.04, 4.0, 60., 'Cropland/Woodland Mosaic' +7, .19, .075 .92, .40, .80, 3, 40., 100., 36.35, 0.04, 4.0, 64., 'Grassland' +8, .22, .10, .88, .40, .70, 3, 300., 100., 42.00, 0.03, 4.0, 69., 'Shrubland' +9, .20, .11, .90, .40, .70, 3, 170., 100., 39.18, 0.035, 4.0, 67., 'Mixed Shrubland/Grassland' +10, .20, .15, .92, .40, .50, 3, 70., 65., 54.53, 0.04, 4.0, 45., 'Savanna' +11, .16, .50, .93, .55, .80, 4, 100., 30., 54.53, 0.08, 4.0, 58., 'Deciduous Broadleaf Forest' +12, .14, .50, .94, .55, .70, 4, 150., 30., 47.35, 0.08, 4.0, 54., 'Deciduous Needleleaf Forest' +13, .12, .50, .95, .55, .95, 4, 150., 30., 41.69, 0.08, 4.0, 32., 'Evergreen Broadleaf Forest' +14, .12, .50, .95, .55, .70, 4, 125., 30., 47.35, 0.08, 4.0, 52., 'Evergreen Needleleaf Forest' +15, .13, .50, .94, .55, .80, 4, 125., 30., 51.93, 0.08, 4.0, 53., 'Mixed Forest' +16, .08, .0001, .98, .00, .00, 0, 100., 30., 51.75, 0.01, 4.0, 70., 'Water Bodies' +17, .14, .20, .95, .55, .60, 2, 40., 100., 60.00, 0.01, 4.0, 35., 'Herbaceous Wetland' +18, .14, .40, .95, .55, .60, 2, 100., 30., 51.93, 0.02, 4.0, 30., 'Wooded Wetland' +19, .25, .05, .85, .30, .01, 1, 999., 999., 999.0, 0.02, 4.0, 69., 'Barren or Sparsely Vegetated' +20, .15, .10, .92, .30, .60, 3, 150., 100., 42.00, 0.025, 4.0, 58., 'Herbaceous Tundra' +21, .15, .15, .93, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Wooded Tundra' +22, .15, .10, .92, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Mixed Tundra' +23, .25, .065 .85, .30, .30, 2, 200., 100., 42.00, 0.02, 4.0, 65., 'Bare Ground Tundra' +24, .55, .05, .95, .00, .00, 1, 999., 999., 999.0, 0.02, 4.0, 75., 'Snow or Ice' +25, .30, .01, .85, .30, .50, 1, 40., 100., 36.25, 0.02, 4.0, 69., 'Playa' +26, .16, .15, .85, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'Lava' +27, .60, .01, .90, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 diff --git a/utils/laugh_tests/miller1998/settings/summa_fileManager_millerClay.txt b/utils/laugh_tests/miller1998/settings/summa_fileManager_millerClay.txt new file mode 100644 index 0000000000000000000000000000000000000000..d6fe3abfafa97673c8add526f9c0f30956c161d0 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_fileManager_millerClay.txt @@ -0,0 +1,22 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:30' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/miller1998/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/miller1998/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/miller1998/output/' ! output_path +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '2000-01-01' +decisionsFile 'summa_zDecisions_miller1998.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_millerClay.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_millerClay.nc' ! initial_cond +outFilePrefix 'millerClay' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! \ No newline at end of file diff --git a/utils/laugh_tests/miller1998/settings/summa_fileManager_millerLoam.txt b/utils/laugh_tests/miller1998/settings/summa_fileManager_millerLoam.txt new file mode 100644 index 0000000000000000000000000000000000000000..ab888a3f726ada3b55119674a17f6184408cae8a --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_fileManager_millerLoam.txt @@ -0,0 +1,22 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:30' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/miller1998/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/miller1998/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/miller1998/output/' ! output_path +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '2000-01-01' +decisionsFile 'summa_zDecisions_miller1998.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_millerLoam.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_millerLoam.nc' ! initial_cond +outFilePrefix 'millerLoam' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! diff --git a/utils/laugh_tests/miller1998/settings/summa_fileManager_millerSand.txt b/utils/laugh_tests/miller1998/settings/summa_fileManager_millerSand.txt new file mode 100644 index 0000000000000000000000000000000000000000..936e25a1462daf32f74bf1c099991e3bdf64a185 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_fileManager_millerSand.txt @@ -0,0 +1,22 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:30' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/miller1998/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/miller1998/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/miller1998/output/' ! output_path +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '2000-01-01' +decisionsFile 'summa_zDecisions_miller1998.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_millerSand.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_millerSand.nc' ! initial_cond +outFilePrefix 'millerSand' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! diff --git a/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerClay.txt b/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerClay.txt new file mode 100644 index 0000000000000000000000000000000000000000..fc458a0711bb6c262c84e0af327f533a7d300f0c --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerClay.txt @@ -0,0 +1,20 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:30' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/miller1998/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/miller1998/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/miller1998/verification_data/' ! output_path +decisionsFile 'summa_zDecisions_miller1998.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_millerClay.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_millerClay.nc' ! initial_cond +outFilePrefix 'millerClay' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! \ No newline at end of file diff --git a/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerLoam.txt b/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerLoam.txt new file mode 100644 index 0000000000000000000000000000000000000000..cb94073e6bab85248ba7197604e3ba6c114122f2 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerLoam.txt @@ -0,0 +1,20 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:30' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/miller1998/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/miller1998/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/miller1998/verification_data/' ! output_path +decisionsFile 'summa_zDecisions_miller1998.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_millerLoam.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_millerLoam.nc' ! initial_cond +outFilePrefix 'millerLoam' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! diff --git a/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerSand.txt b/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerSand.txt new file mode 100644 index 0000000000000000000000000000000000000000..f09dc37a9ca504826ee8775dedf8a6158d1f0c6b --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerSand.txt @@ -0,0 +1,20 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:30' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/miller1998/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/miller1998/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/miller1998/verification_data/' ! output_path +decisionsFile 'summa_zDecisions_miller1998.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_millerSand.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_millerSand.nc' ! initial_cond +outFilePrefix 'millerSand' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! diff --git a/utils/laugh_tests/miller1998/settings/summa_zBasinParamInfo.txt b/utils/laugh_tests/miller1998/settings/summa_zBasinParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..1926fd71fbc6ce90cd4180f652ae414885e4b611 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_zBasinParamInfo.txt @@ -0,0 +1,35 @@ +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! ***** DEFINITION OF BASIN PARAMETERS ********************************************************************************** +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! *********************************************************************************************************************** +! DEFINE BASIN MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a1), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! *********************************************************************************************************************** +! +! ******************************************************************** +! define format string for parameter descriptions +! ******************************************************************** +'(a25,1x,a1,1x,3(f12.4,1x,a1,1x))' ! format string for parameter descriptions (must be in single quotes) +! ******************************************************************** +! baseflow +! ******************************************************************** +basin__aquiferHydCond | 0.0100 | 0.0001 | 10.0000 +basin__aquiferScaleFactor | 3.5000 | 0.1000 | 100.0000 +basin__aquiferBaseflowExp | 5.0000 | 1.0000 | 10.0000 +! ******************************************************************** +! within-grid routing +! ******************************************************************** +routingGammaShape | 2.5000 | 2.0000 | 3.0000 +routingGammaScale | 20000.0000 | 1.0000 | 5000000.0000 +! ******************************************************************** diff --git a/utils/laugh_tests/miller1998/settings/summa_zDecisions_miller1998.txt b/utils/laugh_tests/miller1998/settings/summa_zDecisions_miller1998.txt new file mode 100644 index 0000000000000000000000000000000000000000..d17071ceff8b467be5120db09ec0df8c69d7a2d8 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_zDecisions_miller1998.txt @@ -0,0 +1,170 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE MODEL DECISIONS +! *********************************************************************************************************************** +! This file defines the modeling decisions used. +! NOTES: +! (1) lines starting with ! are treated as comment lines -- there is no limit on the number of comment lines +! (2) the name of the decision is followed by the character string defining the decision +! (3) the simulation start/end times must be within single quotes +! *********************************************************************************************************************** +! *********************************************************************************************************************** +soilCatTbl ROSETTA ! (03) soil-category dateset +vegeParTbl USGS ! (04) vegetation category dataset +soilStress NoahType ! (05) choice of function for the soil moisture control on stomatal resistance +stomResist BallBerry ! (06) choice of function for stomatal resistance +! *********************************************************************************************************************** +num_method itertive ! (07) choice of numerical method +fDerivMeth analytic ! (08) method used to calculate flux derivatives +LAI_method monTable ! (09) method used to determine LAI and SAI +f_Richards mixdform ! (10) form of Richard's equation +groundwatr noXplict ! (11) choice of groundwater parameterization +hc_profile constant ! (12) choice of hydraulic conductivity profile +bcUpprTdyn zeroFlux ! (13) type of upper boundary condition for thermodynamics +bcLowrTdyn zeroFlux ! (14) type of lower boundary condition for thermodynamics +bcUpprSoiH presHead ! (15) type of upper boundary condition for soil hydrology +bcLowrSoiH presHead ! (16) type of lower boundary condition for soil hydrology +veg_traits CM_QJRMS1988 ! (17) choice of parameterization for vegetation roughness length and displacement height +canopyEmis difTrans ! (18) choice of parameterization for canopy emissivity +snowIncept lightSnow ! (19) choice of parameterization for snow interception +windPrfile logBelowCanopy ! (20) choice of wind profile through the canopy +astability louisinv ! (21) choice of stability function +canopySrad CLM_2stream ! (22) choice of canopy shortwave radiation method +alb_method varDecay ! (23) choice of albedo representation +compaction anderson ! (24) choice of compaction routine +snowLayers CLM_2010 ! (25) choice of method to combine and sub-divide snow layers +thCondSnow jrdn1991 ! (26) choice of thermal conductivity representation for snow +thCondSoil mixConstit ! (27) choice of thermal conductivity representation for soil +spatial_gw localColumn ! (28) choice of method for the spatial representation of groundwater +subRouting timeDlay ! (29) choice of method for sub-grid routing +! *********************************************************************************************** +! ***** description of the options available -- nothing below this point is read **************** +! *********************************************************************************************** +! ----------------------------------------------------------------------------------------------- +! (01) simulation start time +! (02) simulation end time +! ----------------------------------------------------------------------------------------------- +! (03) soil-category dateset +! STAS ! STATSGO dataset +! STAS-RUC ! ?? +! ROSETTA ! merged Rosetta table with STAS-RUC +! ----------------------------------------------------------------------------------------------- +! (04) vegetation category dataset +! USGS ! USGS 24/27 category dataset +! MODIFIED_IGBP_MODIS_NOAH ! MODIS 20-category dataset +! ----------------------------------------------------------------------------------------------- +! (05) choice of function for the soil moisture control on stomatal resistance +! NoahType ! thresholded linear function of volumetric liquid water content +! CLM_Type ! thresholded linear function of matric head +! SiB_Type ! exponential of the log of matric head +! ----------------------------------------------------------------------------------------------- +! (06) choice of function for stomatal resistance +! BallBerry ! Ball-Berry +! Jarvis ! Jarvis +! ----------------------------------------------------------------------------------------------- +! (07) choice of numerical method +! itertive ! iterative +! non_iter ! non-iterative +! itersurf ! iterate only on the surface energy balance +! ----------------------------------------------------------------------------------------------- +! (08) method used to calculate flux derivatives +! numericl ! numerical derivatives +! analytic ! analytical derivatives +! ----------------------------------------------------------------------------------------------- +! (09) method used to determine LAI and SAI +! monTable ! LAI/SAI taken directly from a monthly table for different vegetation classes +! specified ! LAI/SAI computed from green vegetation fraction and winterSAI and summerLAI parameters +! ----------------------------------------------------------------------------------------------- +! (10) form of Richards' equation +! moisture ! moisture-based form of Richards' equation +! mixdform ! mixed form of Richards' equation +! ----------------------------------------------------------------------------------------------- +! (11) choice of groundwater parameterization +! qTopmodl ! topmodel parameterization +! bigBuckt ! a big bucket (lumped aquifer model) +! noXplict ! no explicit groundwater parameterization +! ----------------------------------------------------------------------------------------------- +! (12) choice of hydraulic conductivity profile +! constant ! constant hydraulic conductivity with depth +! pow_prof ! power-law profile +! ----------------------------------------------------------------------------------------------- +! (13) choice of upper boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! nrg_flux ! energy flux +! ----------------------------------------------------------------------------------------------- +! (14) choice of lower boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (15) choice of upper boundary conditions for soil hydrology +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! liq_flux ! liquid water flux +! ----------------------------------------------------------------------------------------------- +! (16) choice of lower boundary conditions for soil hydrology +! drainage ! free draining +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! bottmPsi ! function of matric head in the lower-most layer +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (17) choice of parameterization for vegetation roughness length and displacement height +! Raupach_BLM1994 ! Raupach (BLM 1994) "Simplified expressions..." +! CM_QJRMS1988 ! Choudhury and Monteith (QJRMS 1998) "A four layer model for the heat budget..." +! vegTypeTable ! constant parameters dependent on the vegetation type +! ----------------------------------------------------------------------------------------------- +! (18) choice of parameterization for canopy emissivity +! simplExp ! simple exponential function +! difTrans ! parameterized as a function of diffuse transmissivity +! ----------------------------------------------------------------------------------------------- +! (19) choice of parameterization for snow interception +! stickySnow ! maximum interception capacity an increasing function of temerature +! lightSnow ! maximum interception capacity an inverse function of new snow density +! ----------------------------------------------------------------------------------------------- +! (20) choice of wind profile +! exponential ! exponential wind profile extends to the surface +! logBelowCanopy ! logarithmic profile below the vegetation canopy +! ----------------------------------------------------------------------------------------------- +! (21) choice of stability function +! standard ! standard MO similarity, a la Anderson (1979) +! louisinv ! Louis (1979) inverse power function +! mahrtexp ! Mahrt (1987) exponential function +! ----------------------------------------------------------------------------------------------- +! (22) choice of canopy shortwave radiation method +! noah_mp ! full Noah-MP implementation (including albedo) +! CLM_2stream ! CLM 2-stream model (see CLM documentation) +! UEB_2stream ! UEB 2-stream model (Mahat and Tarboton, WRR 2011) +! NL_scatter ! Simplified method Nijssen and Lettenmaier (JGR 1999) +! BeersLaw ! Beer's Law (as implemented in VIC) +! ----------------------------------------------------------------------------------------------- +! (23) choice of albedo representation +! conDecay ! constant decay rate (e.g., VIC, CLASS) +! varDecay ! variable decay rate (e.g., BATS approach, with destructive metamorphism + soot content) +! ----------------------------------------------------------------------------------------------- +! (24) choice of compaction routine +! consettl ! constant settlement rate +! anderson ! semi-empirical method of Anderson (1976) +! ----------------------------------------------------------------------------------------------- +! (25) choice of method to combine and sub-divide snow layers +! CLM_2010 ! CLM option: combination/sub-dividion rules depend on layer index +! jrdn1991 ! SNTHERM option: same combination/sub-dividion rules applied to all layers +! ----------------------------------------------------------------------------------------------- +! (26) choice of thermal conductivity representation for snow +! tyen1965 ! Yen (1965) +! melr1977 ! Mellor (1977) +! jrdn1991 ! Jordan (1991) +! smnv2000 ! Smirnova et al. (2000) +! ----------------------------------------------------------------------------------------------- +! (27) choice of thermal conductivity representation for soil +! funcSoilWet ! function of soil wetness +! mixConstit ! mixture of constituents +! hanssonVZJ ! test case for the mizoguchi lab experiment, Hansson et al. VZJ 2004 +! ----------------------------------------------------------------------------------------------- +! (28) choice of method for the spatial representation of groundwater +! localColumn ! separate groundwater representation in each local soil column +! singleBasin ! single groundwater store over the entire basin +! ----------------------------------------------------------------------------------------------- +! (29) choice of method for sub-grid routing +! timeDlay ! time-delay histogram +! qInstant ! instantaneous routing +! *********************************************************************************************** +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/miller1998/summa_fileManager_millerClay.txt +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/miller1998/summa_fileManager_millerLoam.txt +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/miller1998/summa_fileManager_millerSand.txt diff --git a/utils/laugh_tests/miller1998/settings/summa_zForcingFileList.txt b/utils/laugh_tests/miller1998/settings/summa_zForcingFileList.txt new file mode 100644 index 0000000000000000000000000000000000000000..c9ef914a0df0262176396e2c2af5fbaab330db61 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_zForcingFileList.txt @@ -0,0 +1,8 @@ +! **************************************************************************************************** +! List of forcing data files used +! +! This file includes one "word" per line: +! (1) The name of a forcing file +! --> filename must be in single quotes +! **************************************************************************************************** + 'miller1998_forcing.nc' diff --git a/utils/laugh_tests/miller1998/settings/summa_zForcingInfo_miller1998.txt b/utils/laugh_tests/miller1998/settings/summa_zForcingInfo_miller1998.txt new file mode 100644 index 0000000000000000000000000000000000000000..d9019c76a5bc0758b954f3949c5eb145e1c5f8f2 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_zForcingInfo_miller1998.txt @@ -0,0 +1,29 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE FORCING FILE +! *********************************************************************************************************************** +! This file defines the name of the forcing data file, the number of columns in the file, the column index for each data +! variable, the start index of the simulation period, the length of the simulation period, +! and the length of the data time step +! *********************************************************************************************************************** +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "|" must be present (format a1), as these are used to check the integrety of the file +! *********************************************************************************************************************** +'(a15,a1,1x,a)' +filenmData | miller1998_forcing.txt ! name of the forcing data file (must be in single quotes) +ncols | 13 ! number of columns in the forcing file +iyyy | 1 ! year +im | 2 ! month +id | 3 ! day +ih | 4 ! hour +imin | 5 ! minute +pptrate | 7 ! precipitation rate (kg m-2 s-1) +SWRadAtm | 8 ! downwelling shortwave radiaiton (W m-2) +LWRadAtm | 9 ! downwelling longwave radiation (W m-2) +airtemp | 10 ! air temperature (K) +windspd | 11 ! windspeed (m/s) +airpres | 12 ! pressure (Pa) +spechum | 13 ! specific humidity (g/g) +data_step | 900 ! length of time step (seconds) diff --git a/utils/laugh_tests/miller1998/settings/summa_zInitialCond_miller1998.txt b/utils/laugh_tests/miller1998/settings/summa_zInitialCond_miller1998.txt new file mode 100644 index 0000000000000000000000000000000000000000..d52d1c91a222681f9dc6e525a7f1eec014535ac6 --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_zInitialCond_miller1998.txt @@ -0,0 +1,148 @@ +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! ***** DEFINITION OF MODEL INITIAL CONDITIONS ************************************************************************** +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! *********************************************************************************************************************** +! PART 1: DEFINE SCALAR VARIABLES +! ------------------------------- +! Variable name followed by the value +! The variable names are important, as they must match the variable names in the code +! *********************************************************************************************************************** +<start_scalar_icond> +! -------------------------------- +dt_init 10.000000000000 +scalarCanopyIce 0.000000000000 +scalarCanopyLiq 0.000000000000 +scalarCanairTemp 286.000000000000 +scalarCanopyTemp 290.000000000000 +scalarSnowAlbedo 0.820000000000 +scalarSWE 0.000000000000 +scalarSnowDepth 0.000000000000 +scalarSfcMeltPond 0.000000000000 +scalarAquiferStorage 0.000000000000 +! -------------------------------- +<end_scalar_icond> +! *********************************************************************************************************************** +! +! +! *********************************************************************************************************************** +! PART 2: DEFINE LAYER VARIABLES +! ------------------------------- +! Variable names followed by values +! The variable names are important, as they must match the variable names in the code +! ------------------------------- +! layerType = snow or soil (4-character string) +! iLayerHeight = height of the layer interface; top of soil = 0 (m) +! mLayerDepth = depth of the layer (m) +! mLayerTemp = temperature of the layer (K) +! mLayerVolFracIce = volumetric fraction of ice (-) +! mLayerVolFracLiq = volumetric fraction of liquid water (-) +! mLayerMatricHead = matric head (m) +! *********************************************************************************************************************** +<start_layer_icond> +! ------------------------------- + layerType iLayerHeight mLayerDepth mLayerTemp mLayerVolFracIce mLayerVolFracLiq mLayerMatricHead + soil 0.0000000 0.1000000 285.160 0.000000 0.093000 -9.950000 + soil 0.1000000 0.1000000 285.160 0.000000 0.093000 -9.850000 + soil 0.2000000 0.1000000 285.160 0.000000 0.093000 -9.750000 + soil 0.3000000 0.1000000 285.160 0.000000 0.093000 -9.650000 + soil 0.4000000 0.1000000 285.160 0.000000 0.093001 -9.550000 + soil 0.5000000 0.1000000 285.160 0.000000 0.093001 -9.450000 + soil 0.6000000 0.1000000 285.160 0.000000 0.093001 -9.350000 + soil 0.7000000 0.1000000 285.160 0.000000 0.093001 -9.250000 + soil 0.8000000 0.1000000 285.160 0.000000 0.093001 -9.150000 + soil 0.9000000 0.1000000 285.160 0.000000 0.093001 -9.050000 + soil 1.0000000 0.1000000 285.160 0.000000 0.093001 -8.950000 + soil 1.1000000 0.1000000 285.160 0.000000 0.093001 -8.850000 + soil 1.2000000 0.1000000 285.160 0.000000 0.093001 -8.750000 + soil 1.3000000 0.1000000 285.160 0.000000 0.093001 -8.650000 + soil 1.4000000 0.1000000 285.160 0.000000 0.093001 -8.550000 + soil 1.5000000 0.1000000 285.160 0.000000 0.093001 -8.450000 + soil 1.6000000 0.1000000 285.160 0.000000 0.093001 -8.350000 + soil 1.7000000 0.1000000 285.160 0.000000 0.093001 -8.250000 + soil 1.8000000 0.1000000 285.160 0.000000 0.093001 -8.150000 + soil 1.9000000 0.1000000 285.160 0.000000 0.093001 -8.050000 + soil 2.0000000 0.1000000 285.160 0.000000 0.093001 -7.950000 + soil 2.1000000 0.1000000 285.160 0.000000 0.093001 -7.850000 + soil 2.2000000 0.1000000 285.160 0.000000 0.093001 -7.750000 + soil 2.3000000 0.1000000 285.160 0.000000 0.093001 -7.650000 + soil 2.4000000 0.1000000 285.160 0.000000 0.093001 -7.550000 + soil 2.5000000 0.1000000 285.160 0.000000 0.093001 -7.450000 + soil 2.6000000 0.1000000 285.160 0.000000 0.093001 -7.350000 + soil 2.7000000 0.1000000 285.160 0.000000 0.093001 -7.250000 + soil 2.8000000 0.1000000 285.160 0.000000 0.093001 -7.150000 + soil 2.9000000 0.1000000 285.160 0.000000 0.093001 -7.050000 + soil 3.0000000 0.1000000 285.160 0.000000 0.093001 -6.950000 + soil 3.1000000 0.1000000 285.160 0.000000 0.093002 -6.850000 + soil 3.2000000 0.1000000 285.160 0.000000 0.093002 -6.750000 + soil 3.3000000 0.1000000 285.160 0.000000 0.093002 -6.650000 + soil 3.4000000 0.1000000 285.160 0.000000 0.093002 -6.550000 + soil 3.5000000 0.1000000 285.160 0.000000 0.093002 -6.450000 + soil 3.6000000 0.1000000 285.160 0.000000 0.093002 -6.350000 + soil 3.7000000 0.1000000 285.160 0.000000 0.093002 -6.250000 + soil 3.8000000 0.1000000 285.160 0.000000 0.093002 -6.150000 + soil 3.9000000 0.1000000 285.160 0.000000 0.093002 -6.050000 + soil 4.0000000 0.1000000 285.160 0.000000 0.093002 -5.950000 + soil 4.1000000 0.1000000 285.160 0.000000 0.093003 -5.850000 + soil 4.2000000 0.1000000 285.160 0.000000 0.093003 -5.750000 + soil 4.3000000 0.1000000 285.160 0.000000 0.093003 -5.650000 + soil 4.4000000 0.1000000 285.160 0.000000 0.093003 -5.550000 + soil 4.5000000 0.1000000 285.160 0.000000 0.093003 -5.450000 + soil 4.6000000 0.1000000 285.160 0.000000 0.093003 -5.350000 + soil 4.7000000 0.1000000 285.160 0.000000 0.093004 -5.250000 + soil 4.8000000 0.1000000 285.160 0.000000 0.093004 -5.150000 + soil 4.9000000 0.1000000 285.160 0.000000 0.093004 -5.050000 + soil 5.0000000 0.1000000 285.160 0.000000 0.093004 -4.950000 + soil 5.1000000 0.1000000 285.160 0.000000 0.093005 -4.850000 + soil 5.2000000 0.1000000 285.160 0.000000 0.093005 -4.750000 + soil 5.3000000 0.1000000 285.160 0.000000 0.093005 -4.650000 + soil 5.4000000 0.1000000 285.160 0.000000 0.093006 -4.550000 + soil 5.5000000 0.1000000 285.160 0.000000 0.093006 -4.450000 + soil 5.6000000 0.1000000 285.160 0.000000 0.093007 -4.350000 + soil 5.7000000 0.1000000 285.160 0.000000 0.093007 -4.250000 + soil 5.8000000 0.1000000 285.160 0.000000 0.093008 -4.150000 + soil 5.9000000 0.1000000 285.160 0.000000 0.093008 -4.050000 + soil 6.0000000 0.1000000 285.160 0.000000 0.093009 -3.950000 + soil 6.1000000 0.1000000 285.160 0.000000 0.093010 -3.850000 + soil 6.2000000 0.1000000 285.160 0.000000 0.093011 -3.750000 + soil 6.3000000 0.1000000 285.160 0.000000 0.093012 -3.650000 + soil 6.4000000 0.1000000 285.160 0.000000 0.093013 -3.550000 + soil 6.5000000 0.1000000 285.160 0.000000 0.093014 -3.450000 + soil 6.6000000 0.1000000 285.160 0.000000 0.093016 -3.350000 + soil 6.7000000 0.1000000 285.160 0.000000 0.093017 -3.250000 + soil 6.8000000 0.1000000 285.160 0.000000 0.093019 -3.150000 + soil 6.9000000 0.1000000 285.160 0.000000 0.093021 -3.050000 + soil 7.0000000 0.1000000 285.160 0.000000 0.093024 -2.950000 + soil 7.1000000 0.1000000 285.160 0.000000 0.093027 -2.850000 + soil 7.2000000 0.1000000 285.160 0.000000 0.093030 -2.750000 + soil 7.3000000 0.1000000 285.160 0.000000 0.093034 -2.650000 + soil 7.4000000 0.1000000 285.160 0.000000 0.093038 -2.550000 + soil 7.5000000 0.1000000 285.160 0.000000 0.093044 -2.450000 + soil 7.6000000 0.1000000 285.160 0.000000 0.093050 -2.350000 + soil 7.7000000 0.1000000 285.160 0.000000 0.093058 -2.250000 + soil 7.8000000 0.1000000 285.160 0.000000 0.093067 -2.150000 + soil 7.9000000 0.1000000 285.160 0.000000 0.093078 -2.050000 + soil 8.0000000 0.1000000 285.160 0.000000 0.093092 -1.950000 + soil 8.1000000 0.1000000 285.160 0.000000 0.093109 -1.850000 + soil 8.2000000 0.1000000 285.160 0.000000 0.093131 -1.750000 + soil 8.3000000 0.1000000 285.160 0.000000 0.093158 -1.650000 + soil 8.4000000 0.1000000 285.160 0.000000 0.093194 -1.550000 + soil 8.5000000 0.1000000 285.160 0.000000 0.093241 -1.450000 + soil 8.6000000 0.1000000 285.160 0.000000 0.093305 -1.350000 + soil 8.7000000 0.1000000 285.160 0.000000 0.093392 -1.250000 + soil 8.8000000 0.1000000 285.160 0.000000 0.093514 -1.150000 + soil 8.9000000 0.1000000 285.160 0.000000 0.093692 -1.050000 + soil 9.0000000 0.1000000 285.160 0.000000 0.093959 -0.950000 + soil 9.1000000 0.1000000 285.160 0.000000 0.094378 -0.850000 + soil 9.2000000 0.1000000 285.160 0.000000 0.095071 -0.750000 + soil 9.3000000 0.1000000 285.160 0.000000 0.096299 -0.650000 + soil 9.4000000 0.1000000 285.160 0.000000 0.098672 -0.550000 + soil 9.5000000 0.1000000 285.160 0.000000 0.103817 -0.450000 + soil 9.6000000 0.1000000 285.160 0.000000 0.116835 -0.350000 + soil 9.7000000 0.1000000 285.160 0.000000 0.155619 -0.250000 + soil 9.8000000 0.1000000 285.160 0.000000 0.251168 -0.150000 + soil 9.9000000 0.1000000 285.160 0.000000 0.300370 -0.050000 +<end_layer_icond> diff --git a/utils/laugh_tests/miller1998/settings/summa_zInitialCond_millerClay.nc b/utils/laugh_tests/miller1998/settings/summa_zInitialCond_millerClay.nc new file mode 100644 index 0000000000000000000000000000000000000000..02eac15d2ed210a218bfecffb849272ec03058ce Binary files /dev/null and b/utils/laugh_tests/miller1998/settings/summa_zInitialCond_millerClay.nc differ diff --git a/utils/laugh_tests/miller1998/settings/summa_zInitialCond_millerLoam.nc b/utils/laugh_tests/miller1998/settings/summa_zInitialCond_millerLoam.nc new file mode 100644 index 0000000000000000000000000000000000000000..4c34b8216eeb21898cf7dd65f975911103b96248 Binary files /dev/null and b/utils/laugh_tests/miller1998/settings/summa_zInitialCond_millerLoam.nc differ diff --git a/utils/laugh_tests/miller1998/settings/summa_zInitialCond_millerSand.nc b/utils/laugh_tests/miller1998/settings/summa_zInitialCond_millerSand.nc new file mode 100644 index 0000000000000000000000000000000000000000..889c1256311175016075a46043d03c0c3c2d9908 Binary files /dev/null and b/utils/laugh_tests/miller1998/settings/summa_zInitialCond_millerSand.nc differ diff --git a/utils/laugh_tests/miller1998/settings/summa_zLocalAttributes.nc b/utils/laugh_tests/miller1998/settings/summa_zLocalAttributes.nc new file mode 100644 index 0000000000000000000000000000000000000000..751bf3c5fb15cb326c4ca75c3f3e236ce3a0c26c Binary files /dev/null and b/utils/laugh_tests/miller1998/settings/summa_zLocalAttributes.nc differ diff --git a/utils/laugh_tests/miller1998/settings/summa_zLocalParamInfo.txt b/utils/laugh_tests/miller1998/settings/summa_zLocalParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..7dcd36cb83eee0bac6edcf76168e96e6d82bd46e --- /dev/null +++ b/utils/laugh_tests/miller1998/settings/summa_zLocalParamInfo.txt @@ -0,0 +1,226 @@ +! ======================================================================================================================= +! ======================================================================================================================= +! ===== DEFINITION OF MODEL PARAMETERS ================================================================================== +! ======================================================================================================================= +! ======================================================================================================================= +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! ======================================================================================================================= +! DEFINE SITE MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! ======================================================================================================================= +! +! ==================================================================== +! define format string for parameter descriptions +! ==================================================================== +'(a25,1x,3(a1,1x,f12.4,1x))' ! format string (must be in single quotes) +! ==================================================================== +! boundary conditions +! ==================================================================== +upperBoundHead | 0.1000 | -100.0000 | -0.0100 +lowerBoundHead | 0.0000 | -100.0000 | -0.0100 +upperBoundTheta | 0.2004 | 0.1020 | 0.3680 +lowerBoundTheta | 0.1100 | 0.1020 | 0.3680 +upperBoundTemp | 272.1600 | 270.1600 | 280.1600 +lowerBoundTemp | 274.1600 | 270.1600 | 280.1600 +! ==================================================================== +! precipitation partitioning +! ==================================================================== +tempCritRain | 273.1600 | 272.1600 | 274.1600 +tempRangeTimestep | 2.0000 | 0.5000 | 5.0000 +frozenPrecipMultip | 1.0000 | 0.5000 | 1.5000 +! ==================================================================== +! snow properties +! ==================================================================== +snowfrz_scale | 50.0000 | 10.0000 | 1000.0000 +fixedThermalCond_snow | 0.3500 | 0.1000 | 1.0000 +! ==================================================================== +! snow albedo +! ==================================================================== +albedoMax | 0.8400 | 0.7000 | 0.9500 +albedoMinWinter | 0.5500 | 0.6000 | 1.0000 +albedoMinSpring | 0.5500 | 0.3000 | 1.0000 +albedoMaxVisible | 0.9500 | 0.7000 | 0.9500 +albedoMinVisible | 0.7500 | 0.5000 | 0.7500 +albedoMaxNearIR | 0.6500 | 0.5000 | 0.7500 +albedoMinNearIR | 0.3000 | 0.1500 | 0.4500 +albedoDecayRate | 1.0d+6 | 0.1d+6 | 5.0d+6 +albedoSootLoad | 0.3000 | 0.1000 | 0.5000 +albedoRefresh | 1.0000 | 1.0000 | 10.0000 +! ==================================================================== +! radiation transfer within snow +! ==================================================================== +radExt_snow | 20.0000 | 20.0000 | 20.0000 +directScale | 0.0900 | 0.0000 | 0.5000 +Frad_direct | 0.7000 | 0.0000 | 1.0000 +Frad_vis | 0.5000 | 0.0000 | 1.0000 +! ==================================================================== +! new snow density +! ==================================================================== +newSnowDenMin | 100.0000 | 50.0000 | 100.0000 +newSnowDenMult | 100.0000 | 25.0000 | 75.0000 +newSnowDenScal | 5.0000 | 1.0000 | 5.0000 +constSnowDen | 100.0000 | 50.0000 | 250.0000 +newSnowDenAdd | 109.0000 | 80.0000 | 120.0000 +newSnowDenMultTemp | 6.0000 | 1.0000 | 12.0000 +newSnowDenMultWind | 26.0000 | 16.0000 | 36.0000 +newSnowDenMultAnd | 1.0000 | 1.0000 | 3.0000 +newSnowDenBase | 0.0000 | 0.0000 | 0.0000 +! ==================================================================== +! snow compaction +! ==================================================================== +densScalGrowth | 0.0460 | 0.0230 | 0.0920 +tempScalGrowth | 0.0400 | 0.0200 | 0.0600 +grainGrowthRate | 2.7d-6 | 1.0d-6 | 5.0d-6 +densScalOvrbdn | 0.0230 | 0.0115 | 0.0460 +tempScalOvrbdn | 0.0800 | 0.6000 | 1.0000 +baseViscosity | 9.0d+5 | 5.0d+5 | 1.5d+6 +! ==================================================================== +! water flow through snow +! ==================================================================== +Fcapil | 0.0600 | 0.0100 | 0.1000 +k_snow | 0.0150 | 0.0050 | 0.0500 +mw_exp | 3.0000 | 1.0000 | 5.0000 +! ==================================================================== +! turbulent heat fluxes +! ==================================================================== +z0Snow | 0.0010 | 0.0010 | 10.0000 +z0Soil | 0.0100 | 0.0010 | 10.0000 +z0Canopy | 0.1000 | 0.0010 | 10.0000 +zpdFraction | 0.6500 | 0.5000 | 0.8500 +critRichNumber | 0.2000 | 0.1000 | 1.0000 +Louis79_bparam | 9.4000 | 9.2000 | 9.6000 +Louis79_cStar | 5.3000 | 5.1000 | 5.5000 +Mahrt87_eScale | 1.0000 | 0.5000 | 2.0000 +leafExchangeCoeff | 0.0100 | 0.0010 | 0.1000 +windReductionParam | 0.2800 | 0.0000 | 1.0000 +! ==================================================================== +! stomatal conductance +! ==================================================================== +Kc25 | 296.0770 | 296.0770 | 296.0770 +Ko25 | 0.2961 | 0.2961 | 0.2961 +Kc_qFac | 2.1000 | 2.1000 | 2.1000 +Ko_qFac | 1.2000 | 1.2000 | 1.2000 +kc_Ha | 79430.0000 | 79430.0000 | 79430.0000 +ko_Ha | 36380.0000 | 36380.0000 | 36380.0000 +vcmax25_canopyTop | 40.0000 | 20.0000 | 100.0000 +vcmax_qFac | 2.4000 | 2.4000 | 2.4000 +vcmax_Ha | 65330.0000 | 65330.0000 | 65330.0000 +vcmax_Hd | 220000.0000 | 149250.0000 | 149250.0000 +vcmax_Sv | 710.0000 | 485.0000 | 485.0000 +vcmax_Kn | 0.6000 | 0.0000 | 1.2000 +jmax25_scale | 2.0000 | 2.0000 | 2.0000 +jmax_Ha | 43540.0000 | 43540.0000 | 43540.0000 +jmax_Hd | 152040.0000 | 152040.0000 | 152040.0000 +jmax_Sv | 495.0000 | 495.0000 | 495.0000 +fractionJ | 0.1500 | 0.1500 | 0.1500 +quantamYield | 0.0500 | 0.0500 | 0.0500 +vpScaleFactor | 1500.0000 | 1500.0000 | 1500.0000 +cond2photo_slope | 9.0000 | 1.0000 | 10.0000 +minStomatalConductance | 2000.0000 | 2000.0000 | 2000.0000 +! ==================================================================== +! vegetation properties +! ==================================================================== +winterSAI | 1.0000 | 0.0100 | 3.0000 +summerLAI | 3.0000 | 0.0100 | 10.0000 +rootScaleFactor1 | 2.0000 | 1.0000 | 10.0000 +rootScaleFactor2 | 5.0000 | 1.0000 | 10.0000 +rootingDepth | 0.5000 | 0.0100 | 10.0000 +rootDistExp | 1.0000 | 0.0100 | 1.0000 +plantWiltPsi | -150.0000 | -500.0000 | 0.0000 +soilStressParam | 5.8000 | 4.3600 | 6.3700 +critSoilWilting | 0.0750 | 0.0000 | 1.0000 +critSoilTranspire | 0.1750 | 0.0000 | 1.0000 +critAquiferTranspire | 0.2000 | 0.1000 | 10.0000 +minStomatalResistance | 50.0000 | 10.0000 | 200.0000 +leafDimension | 0.0400 | 0.0100 | 0.1000 +heightCanopyTop | 20.0000 | 0.0500 | 100.0000 +heightCanopyBottom | 2.0000 | 0.0000 | 5.0000 +specificHeatVeg | 874.0000 | 500.0000 | 1500.0000 +maxMassVegetation | 25.0000 | 1.0000 | 50.0000 +throughfallScaleSnow | 0.5000 | 0.1000 | 0.9000 +throughfallScaleRain | 0.5000 | 0.1000 | 0.9000 +refInterceptCapSnow | 6.6000 | 1.0000 | 10.0000 +refInterceptCapRain | 1.0000 | 0.0100 | 1.0000 +snowUnloadingCoeff | 0.0000 | 0.0000 | 1.5d-6 +canopyDrainageCoeff | 0.0050 | 0.0010 | 0.0100 +ratioDrip2Unloading | 0.4000 | 0.0000 | 1.0000 +canopyWettingFactor | 0.7000 | 0.0000 | 1.0000 +canopyWettingExp | 1.0000 | 0.0000 | 1.0000 +! ==================================================================== +! soil properties +! ==================================================================== +soil_dens_intr | 2700.0000 | 500.0000 | 4000.0000 +thCond_soil | 5.5000 | 2.9000 | 8.4000 +frac_sand | 0.1600 | 0.0000 | 1.0000 +frac_silt | 0.2800 | 0.0000 | 1.0000 +frac_clay | 0.5600 | 0.0000 | 1.0000 +fieldCapacity | 0.2000 | 0.0000 | 1.0000 +wettingFrontSuction | 0.3000 | 0.1000 | 1.5000 +theta_mp | 0.4010 | 0.3000 | 0.6000 +theta_sat | 0.5500 | 0.3000 | 0.6000 +theta_res | 0.1390 | 0.0010 | 0.1000 +vGn_alpha | -0.8400 | -1.0000 | -0.0100 +vGn_n | 1.3000 | 1.0000 | 3.0000 +mpExp | 5.0000 | 1.0000 | 10.0000 +k_soil | 7.5d-06 | 1.d-07 | 100.d-07 +k_macropore | 1.0d-03 | 1.d-07 | 100.d-07 +kAnisotropic | 1.0000 | 0.0001 | 10.0000 +zScale_TOPMODEL | 2.5000 | 0.1000 | 100.0000 +compactedDepth | 1.0000 | 0.0000 | 1.0000 +aquiferScaleFactor | 0.3500 | 0.1000 | 100.0000 +aquiferBaseflowExp | 2.0000 | 1.0000 | 10.0000 +aquiferBaseflowRate | 2.0000 | 1.0000 | 10.0000 +qSurfScale | 50.0000 | 1.0000 | 100.0000 +specificYield | 0.2000 | 0.1000 | 0.3000 +specificStorage | 1.d-09 | 1.d-05 | 1.d-07 +f_impede | 2.0000 | 1.0000 | 10.0000 +soilIceScale | 0.1300 | 0.0001 | 1.0000 +soilIceCV | 0.4500 | 0.1000 | 5.0000 +! ==================================================================== +! algorithmic control parameters +! ==================================================================== +minwind | 0.1000 | 0.0010 | 1.0000 +minstep | 0.1000 | 1.0000 | 1800.0000 +maxstep | 3600.0000 | 60.0000 | 1800.0000 +wimplicit | 0.0000 | 0.0000 | 1.0000 +maxiter | 100.0000 | 1.0000 | 100.0000 +relConvTol_liquid | 1.0d-3 | 1.0d-5 | 1.0d-1 +absConvTol_liquid | 1.0d-5 | 1.0d-8 | 1.0d-3 +relConvTol_matric | 1.0d-1 | 1.0d-5 | 1.0d-1 +absConvTol_matric | 1.0d-1 | 1.0d-8 | 1.0d-3 +relConvTol_energy | 1.0d-2 | 1.0d-5 | 1.0d-1 +absConvTol_energy | 1.0d-0 | 1.0d-2 | 1.0d+1 +relConvTol_aquifr | 1.0d-0 | 1.0d-2 | 1.0d+1 +absConvTol_aquifr | 1.0d-5 | 1.0d-5 | 1.0d-1 +zmin | 0.0100 | 0.0050 | 0.1000 +zmax | 0.0500 | 0.0100 | 0.5000 +! --- +zminLayer1 | 0.0075 | 0.0075 | 0.0075 +zminLayer2 | 0.0100 | 0.0100 | 0.0100 +zminLayer3 | 0.0500 | 0.0500 | 0.0500 +zminLayer4 | 0.1000 | 0.1000 | 0.1000 +zminLayer5 | 0.2500 | 0.2500 | 0.2500 +! --- +zmaxLayer1_lower | 0.0500 | 0.0500 | 0.0500 +zmaxLayer2_lower | 0.2000 | 0.2000 | 0.2000 +zmaxLayer3_lower | 0.5000 | 0.5000 | 0.5000 +zmaxLayer4_lower | 1.0000 | 1.0000 | 1.0000 +! --- +zmaxLayer1_upper | 0.0300 | 0.0300 | 0.0300 +zmaxLayer2_upper | 0.1500 | 0.1500 | 0.1500 +zmaxLayer3_upper | 0.3000 | 0.3000 | 0.3000 +zmaxLayer4_upper | 0.7500 | 0.7500 | 0.7500 +! ==================================================================== +minTempUnloading | 270.16 | 260.16 | 273.16 +minWindUnloading | 0.0000 | 0.0000 | 10.000 +rateTempUnloading | 1.87d+5 | 1.0d+5 | 3.0d+5 +rateWindUnloading | 1.56d+5 | 1.0d+5 | 3.0d+5 +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/miller1998/summa_fileManager_millerClay.txt! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/miller1998/summa_fileManager_millerLoam.txt! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/miller1998/summa_fileManager_millerSand.txt \ No newline at end of file diff --git a/utils/laugh_tests/miller1998/settings/summa_zParamTrial_millerClay.nc b/utils/laugh_tests/miller1998/settings/summa_zParamTrial_millerClay.nc new file mode 100644 index 0000000000000000000000000000000000000000..19fcb53d7ed275d6a9b59016aedc8e67fef3c145 Binary files /dev/null and b/utils/laugh_tests/miller1998/settings/summa_zParamTrial_millerClay.nc differ diff --git a/utils/laugh_tests/miller1998/settings/summa_zParamTrial_millerLoam.nc b/utils/laugh_tests/miller1998/settings/summa_zParamTrial_millerLoam.nc new file mode 100644 index 0000000000000000000000000000000000000000..c39f7ca18238d0acf0d8bdfaa012351dbed9124c Binary files /dev/null and b/utils/laugh_tests/miller1998/settings/summa_zParamTrial_millerLoam.nc differ diff --git a/utils/laugh_tests/miller1998/settings/summa_zParamTrial_millerSand.nc b/utils/laugh_tests/miller1998/settings/summa_zParamTrial_millerSand.nc new file mode 100644 index 0000000000000000000000000000000000000000..92a3d683aff94a80dd02f599430bd9f5ffe452d4 Binary files /dev/null and b/utils/laugh_tests/miller1998/settings/summa_zParamTrial_millerSand.nc differ diff --git a/utils/laugh_tests/miller1998/verification_data/millerClay_G1-1_timestep.nc b/utils/laugh_tests/miller1998/verification_data/millerClay_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..9a7d14bb8b9dc39c7fe3c43249431a71b0c4e277 Binary files /dev/null and b/utils/laugh_tests/miller1998/verification_data/millerClay_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/miller1998/verification_data/millerLoam_G1-1_timestep.nc b/utils/laugh_tests/miller1998/verification_data/millerLoam_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..f6e693fa20823fc0662ab456a69b49a596fe4ea0 Binary files /dev/null and b/utils/laugh_tests/miller1998/verification_data/millerLoam_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/miller1998/verification_data/millerSand_G1-1_timestep.nc b/utils/laugh_tests/miller1998/verification_data/millerSand_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..fadc7a011eb7da163d48b515316973419a08666f Binary files /dev/null and b/utils/laugh_tests/miller1998/verification_data/millerSand_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/miller1998/verification_data/runinfo.txt b/utils/laugh_tests/miller1998/verification_data/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..3db320081a2c880461b00611d781f7fd29026a17 --- /dev/null +++ b/utils/laugh_tests/miller1998/verification_data/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=16 - hh=18 - mi=39 - ss=02.545 diff --git a/utils/laugh_tests/miller1998/verify_miller.py b/utils/laugh_tests/miller1998/verify_miller.py new file mode 100644 index 0000000000000000000000000000000000000000..2c55f14611b16e36dff9869c85047e95888acb38 --- /dev/null +++ b/utils/laugh_tests/miller1998/verify_miller.py @@ -0,0 +1,120 @@ +from os import listdir +from os.path import isfile, join +from pathlib import Path +import xarray as xr +import numpy as np + + +def verify(verified_data_path, data_to_compare_path, output_variables, numHRU): + try: + verified_dataset = xr.open_dataset(verified_data_path) + to_compare_dataset = xr.open_dataset(data_to_compare_path) + except FileNotFoundError: + print("Check the variables \'verified_data_path\' and \'data_to_compare_path\'. They may not point to the correct output files or the output filenames may have changed.") + exit() + + # Get the HRUs from the dataset into a list + for iHRU in range(0, numHRU): + verified_hru = verified_dataset.isel(hru=iHRU).copy() + hru_to_compare = to_compare_dataset.isel(hru=iHRU).copy() + + for var in output_variables: + try: + if len(verified_hru[var].values) != len(hru_to_compare[var].values): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_hru[var].values)) + print(" hru_to_compare = ", len(hru_to_compare[var].values)) + + verified_data = [] + to_verify_data = [] + if (verified_hru[var].values.ndim > 1): + # 2D output case + for list in verified_hru[var].values: + for data in list: + verified_data.append(data) + + for list in hru_to_compare[var].values: + for data in list: + to_verify_data.append(data) + + else: + # 1D output case + for data in verified_hru[var].values: + verified_data.append(data) + + for data in hru_to_compare[var].values: + to_verify_data.append(data) + + + # check length + if len(verified_data) != len(to_verify_data): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_data)) + print(" hru_to_compare = ", len(to_verify_data)) + + # check values + for elem in range(0, len(verified_data)): + if verified_data[elem] != to_verify_data[elem]: + print("variable -",var, "has different values at", elem) + print(" verified_hru = ", verified_data[elem]) + print(" hru_to_compare = ", to_verify_data[elem]) + break + + except TypeError: + print("variable - ", var, "Cannot be compared with len") + print(" verified_hru = ",verified_hru[var].values) + print(" hru_to_compare = ", hru_to_compare[var].values) + + +numHRU = 1 + +time = "time" +nSnow = "nSnow" +nSoil = "nSoil" +nLayers = "nLayers" +mLayerHeight = "mLayerHeight" +iLayerLiqFluxSoil = "iLayerLiqFluxSoil" +mLayerDepth = "mLayerDepth" +mLayerVolFracIce = "mLayerVolFracIce" +mLayerVolFracLiq = "mLayerVolFracLiq" +mLayerMatricHead = "mLayerMatricHead" +mLayerTranspire = "mLayerTranspire" +mLayerBaseflow = "mLayerBaseflow" +mLayerCompress = "mLayerCompress" +iLayerNrgFlux = "iLayerNrgFlux" +basin__TotalArea = "basin__TotalArea" +scalarGroundEvaporation = "scalarGroundEvaporation" +scalarSoilBaseflow = "scalarSoilBaseflow" +scalarSoilDrainage = "scalarSoilDrainage" +scalarInfiltration = "scalarInfiltration" +scalarSnowDrainage = "scalarSnowDrainage" +scalarSnowSublimation = "scalarSnowSublimation" +scalarThroughfallRain = "scalarThroughfallRain" +scalarThroughfallSnow = "scalarThroughfallSnow" +scalarRainfall = "scalarRainfall" +scalarSnowfall = "scalarSnowfall" +scalarRainPlusMelt = "scalarRainPlusMelt" +pptrate = "pptrate" +averageRoutedRunoff = "averageRoutedRunoff" +scalarSWE = "scalarSWE" +fieldCapacity = "fieldCapacity" + +output_variables = [time, nSnow, nSoil, nLayers, mLayerHeight, iLayerLiqFluxSoil, \ + mLayerDepth, mLayerVolFracIce, mLayerVolFracLiq, mLayerMatricHead, mLayerTranspire, \ + mLayerBaseflow, mLayerCompress, iLayerNrgFlux, basin__TotalArea, scalarGroundEvaporation, \ + scalarSoilBaseflow, scalarSoilDrainage, scalarInfiltration, scalarSnowDrainage, \ + scalarSnowSublimation, scalarThroughfallRain, scalarThroughfallSnow, scalarRainfall, \ + scalarSnowfall, scalarRainPlusMelt, pptrate, averageRoutedRunoff, \ + scalarSWE, fieldCapacity] + +verified_data_path = Path("./verification_data/millerClay_G1-1_timestep.nc") +data_to_compare_path = Path("./output/millerClayGRU1-1_timestep.nc") +verify(verified_data_path, data_to_compare_path, output_variables, numHRU) + +verified_data_path = Path("./verification_data/millerLoam_G1-1_timestep.nc") +data_to_compare_path = Path("./output/millerLoamGRU1-1_timestep.nc") +verify(verified_data_path, data_to_compare_path, output_variables, numHRU) + +# verified_data_path = Path("./verification_data/millerSand_G1-1_timestep.nc") +# data_to_compare_path = Path("./output/millerSandGRU1-1_timestep.nc") +# verify(verified_data_path, data_to_compare_path, output_variables, numHRU) \ No newline at end of file diff --git a/utils/laugh_tests/mizoguchi1990/config/Summa_Actors_Settings.json b/utils/laugh_tests/mizoguchi1990/config/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..7ebcd5557fbe5bb71ecee0dee16b3b3547d1fbd9 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/config/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/mizoguchi1990/settings/summa_fileManager_mizoguchi.txt", + "outputCSV": false, + "csvPath": "/scratch/kck540/csv/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} \ No newline at end of file diff --git a/utils/laugh_tests/mizoguchi1990/forcing_data/mizoguchi_forcing.nc b/utils/laugh_tests/mizoguchi1990/forcing_data/mizoguchi_forcing.nc new file mode 100644 index 0000000000000000000000000000000000000000..d305f9a47f794cab26569546f48c16a9d6a825bf Binary files /dev/null and b/utils/laugh_tests/mizoguchi1990/forcing_data/mizoguchi_forcing.nc differ diff --git a/utils/laugh_tests/mizoguchi1990/forcing_data/mizoguchi_forcing.pro b/utils/laugh_tests/mizoguchi1990/forcing_data/mizoguchi_forcing.pro new file mode 100644 index 0000000000000000000000000000000000000000..d56c2c6e4733734ff6da584671821ea6fd963552 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/forcing_data/mizoguchi_forcing.pro @@ -0,0 +1,94 @@ +pro mizoguchi_forcing + +; define constants +Tfreeze = 273.16d + +; define parameters +dt = 60.d ; (time step) + +; define plotting parameters +window, 0, xs=1000, ys=1000, retain=2 +device, decomposed=0 +LOADCT, 39 +!P.BACKGROUND=255 +!P.CHARSIZE=2.5 +!P.COLOR=0 +erase, color=255 +!P.MULTI=[0,1,4] + +; define the number of days +ndays = 3 + +; define the number of time steps per hour +nprhr = 3600.d/dt + +; define the number of steps per day +nprdy = 86400.d/dt + +; define the number of time steps +ntime = ndays*nprdy + +; define time in seconds +stime = (dindgen(ntime)+1.d)*dt + +; define time in hours +htime = stime/3600. + +; define maximum radiation +rdmax = 250.d + +; define the dayln parameter +dayln = -0.1 + +; define radiation index +radix = cos(2.d*!pi * (htime/24.d) + !pi) + dayln + +; define radiation +swrad = replicate(0.d, ntime) ;radix*(rdmax / (1.+dayln)) + +; set negative radiation to zero +ibad = where(swrad le 0.d, nbad) +if (nbad gt 0) then swrad[ibad] = 0.d + +; make a base plot for solar radiation +plot, htime, xrange=[0,ntime/nprhr], yrange=[0,1000], xstyle=9, ystyle=1, $ + ytitle = 'Solar radiation (W m!e-2!n)', xmargin=[10,10], ymargin=[3,2], $ + xticks=6, /nodata +plots, [htime[0],htime[ntime-1]], [ 0, 0] +plots, [htime[0],htime[ntime-1]], [250,250] + +plots, [24,24], [0,250] +plots, [48,48], [0,250] + +oplot, htime, swrad + +; define other forcing variables +lwrad = 275.d +awind = 0.d +atemp = Tfreeze - 6.d +sphum = 1.d-3 +apres = 101325.d + +; define precipitation +aprcp = replicate(0.d, ntime) + +; define time +atime = stime/86400.d + julday(1,1,2000,0,0,0.d) + +; make a forcing file +openw, out_unit, 'mizoguchi_forcing.txt', /get_lun + +for itime=0,ntime-1 do begin + ; define date + caldat, atime[itime], im, id, iyyy, ih, imi, dsec + ; print synthetic "data" + printf, out_unit, iyyy, im, id, ih, imi, dsec, aprcp[itime], swrad[itime], lwrad, atemp, awind, apres, sphum, $ + format='(i4,1x,4(i2,1x),f6.1,1x,e14.4,1x,5(f10.3,1x),e12.3)' +endfor + +; free up file unit +free_lun, out_unit + + +stop +end diff --git a/utils/laugh_tests/mizoguchi1990/forcing_data/mizoguchi_icond.pro b/utils/laugh_tests/mizoguchi1990/forcing_data/mizoguchi_icond.pro new file mode 100644 index 0000000000000000000000000000000000000000..2915ccaed5e2d0b8bfe7a5a89d6f490c2e9b75b5 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/forcing_data/mizoguchi_icond.pro @@ -0,0 +1,146 @@ +pro mizoguchi_icond + +; used to create initial conditions for the synthetic test case + +; define vGn parameters (used to compute volumetric liquid water content) +alpha = -1.11d ; m-1 (0.00111 mm-1) +n = 1.48d +m = 1.d - 1.d/n +theta_sat = 0.535d +theta_res = 0.050d +k_sat = 0.0000032d +f_impede = -7.d + +; define freezing point +Tfreeze = 273.16d + +; define the number of nodes +nodes = 20 + +; define soil depth (m) +zsoil = 0.2d + +; define layer thickness +z_lay = zsoil/double(nodes) + +; define vertical grid (m) -- positive downward +z_dep = (dindgen(nodes+1)/double(nodes))*zsoil + +; define the mid-point of each layer +z_m = (z_dep[0:nodes-1] + z_dep[1:nodes])/2.d + +; define the layer thickness +z_i = z_dep[1:nodes] - z_dep[0:nodes-1] + +; define soil temperature +ztemp = replicate(6.7d + Tfreeze, nodes) + +; define volumetric liquid water content (-) +ztheta = replicate(0.33d, nodes) +zpress = dblarr(nodes) + +; loop through layers and compute the matric head (m) +for ilayer=0,nodes-1 do begin + zpress[iLayer] = call_function('matricHead',zTheta[iLayer],theta_res,theta_sat,alpha,n,m) +endfor + +; write data to file +openw, out_unit, 'mizoguchi_icond.txt', /get_lun + + ; write out soil data + for ilayer=0,nodes-1 do begin + printf, out_unit, 'soil', z_m[ilayer]-0.5d*z_i[ilayer], z_i[ilayer], $ + ztemp[ilayer], 0.d, zTheta[ilayer], zPress[ilayer], $ + format='(a10,1x,2(f12.7,1x),f10.3,1x,f17.6,1x,f16.6,1x,f16.6)' + endfor + +free_lun, out_unit + + +stop +end + + + +; ***************************************************************************************************************** +; ***************************************************************************************************************** + +function matricHead, theta, theta_res, theta_sat, alpha, n, m + ; compute matric head given theta and soil parameters theta_sat, theta_res, k_sat, alpha, n, and m + return, (1.d/alpha)*( ( (theta - theta_res) / (theta_sat - theta_res) )^(-1.d/m) - 1.d)^(1.d/n) +end + +; ***************************************************************************************************************** +; ***************************************************************************************************************** + +function k_psi, psi, alpha, k_sat, n, m + +; computes hydraulic conductivity given psi and soil hydraulic parameters alpha, k_sat, n, and m +; psi = pressure (m) +; alpha = scaling parameter (m-1) +; k_sat = saturated hydraulic conductivity (m s-1) +; n = vGn "n" parameter +; m = vGn "m" parameter + +work = dblarr(n_elements(psi)) + +ineg = where(psi lt 0.d, nneg, complement=ipos, ncomplement=npos) +if (nneg gt 0) then work[ineg] = k_sat * $ + ( ( (1.d - (psi[ineg]*alpha)^(n-1.d) * (1.d + (psi[ineg]*alpha)^n)^(-m))^2.d ) / ( (1.d + (psi[ineg]*alpha)^n)^(m/2.d) ) ) +if (npos gt 0) then work[ipos] = k_sat + +return, work + +end + +; ***************************************************************************************************************** +; ***************************************************************************************************************** + +function theta, psi, alpha, theta_res, theta_sat, n, m + +; computes volumetric water content based on psi and soil hydraulic parameters alpha, n, and m + +; psi = pressure (m) +; alpha = scaling parameter (m-1) +; theta_res = residual volumetric water content (-) +; theta_sat = porosity (-) +; n = vGn "n" parameter +; m = vGn "m" parameter + +work = dblarr(n_elements(psi)) + +ineg = where(psi lt 0.d, nneg, complement=ipos, ncomplement=npos) +if (nneg gt 0) then work[ineg] = theta_res + (theta_sat - theta_res)*(1.d + (alpha*psi[ineg])^n)^(-m) +if (npos gt 0) then work[ipos] = theta_sat + +return, work + +end + +; ***************************************************************************************************************** +; ***************************************************************************************************************** + +function dTheta_dPsi, psi, alpha, theta_res, theta_sat, n, m + +; computes the soil moisture capacity function, dTheta_dPsi (m-1) + +; psi = pressure (m) +; alpha = scaling parameter (m-1) +; theta_res = residual volumetric water content (-) +; theta_sat = porosity (-) +; n = vGn "n" parameter +; m = vGn "m" parameter + +work = dblarr(n_elements(psi)) + +ineg = where(psi lt 0.d, nneg, complement=ipos, ncomplement=npos) +if (nneg gt 0) then work[ineg] = (theta_sat-theta_res) * $ + (-m*(1.d + (psi[ineg]*alpha)^n)^(-m-1.d)) * n*(psi[ineg]*alpha)^(n-1.d) * alpha +if (npos gt 0) then work[ipos] = 0.d + +return, work + +end + +; ***************************************************************************************************************** +; ***************************************************************************************************************** diff --git a/utils/laugh_tests/mizoguchi1990/output/mizoguchi1990GRU1-1_timestep.nc b/utils/laugh_tests/mizoguchi1990/output/mizoguchi1990GRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..80d2ac17f8e003d6c6e59a7d165dd59cec28c438 Binary files /dev/null and b/utils/laugh_tests/mizoguchi1990/output/mizoguchi1990GRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/mizoguchi1990/output/runinfo.txt b/utils/laugh_tests/mizoguchi1990/output/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..d5b2cc535df346aa6e49a312a33c75f5b4aa5615 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/output/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=16 - hh=19 - mi=08 - ss=32.417 diff --git a/utils/laugh_tests/mizoguchi1990/run_test_summa.sh b/utils/laugh_tests/mizoguchi1990/run_test_summa.sh new file mode 100755 index 0000000000000000000000000000000000000000..2fa83eb73993c0c92fc2bdac3823ffd79211e2dd --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/run_test_summa.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/mizoguchi1990/settings/summa_fileManager_verify_mizoguchi.txt \ No newline at end of file diff --git a/utils/laugh_tests/mizoguchi1990/run_test_summa_actors.sh b/utils/laugh_tests/mizoguchi1990/run_test_summa_actors.sh new file mode 100755 index 0000000000000000000000000000000000000000..3334a9bfb01816ba7e9520fd0fe36faa44259177 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/run_test_summa_actors.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/mizoguchi1990/config \ No newline at end of file diff --git a/utils/laugh_tests/mizoguchi1990/settings/GENPARM.TBL b/utils/laugh_tests/mizoguchi1990/settings/GENPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..17fc9172ba276dffbbb9dfa90cdcbc4eecc1070c --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/GENPARM.TBL @@ -0,0 +1,36 @@ +General Parameters +SLOPE_DATA +9 +0.1 +0.6 +1.0 +0.35 +0.55 +0.8 +0.63 +0.0 +0.0 +SBETA_DATA +-2.0 +FXEXP_DATA +2.0 +CSOIL_DATA +2.00E+6 +SALP_DATA +2.6 +REFDK_DATA +2.0E-6 +REFKDT_DATA +3.0 +FRZK_DATA +0.15 +ZBOT_DATA +-8.0 +CZIL_DATA +0.1 +SMLOW_DATA +0.5 +SMHIGH_DATA +3.0 +LVCOEF_DATA +0.5 diff --git a/utils/laugh_tests/mizoguchi1990/settings/MPTABLE.TBL b/utils/laugh_tests/mizoguchi1990/settings/MPTABLE.TBL new file mode 100644 index 0000000000000000000000000000000000000000..0f0c59c02cc2f03d2a168b8523ffa793773861a7 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/MPTABLE.TBL @@ -0,0 +1,284 @@ +&noah_mp_usgs_veg_categories + VEG_DATASET_DESCRIPTION = "USGS" + NVEG = 27 +/ +&noah_mp_usgs_parameters + ! NVEG = 27 + ! 1: Urban and Built-Up Land + ! 2: Dryland Cropland and Pasture + ! 3: Irrigated Cropland and Pasture + ! 4: Mixed Dryland/Irrigated Cropland and Pasture + ! 5: Cropland/Grassland Mosaic + ! 6: Cropland/Woodland Mosaic + ! 7: Grassland + ! 8: Shrubland + ! 9: Mixed Shrubland/Grassland + ! 10: Savanna + ! 11: Deciduous Broadleaf Forest + ! 12: Deciduous Needleleaf Forest + ! 13: Evergreen Broadleaf Forest + ! 14: Evergreen Needleleaf Forest + ! 15: Mixed Forest + ! 16: Water Bodies + ! 17: Herbaceous Wetland + ! 18: Wooded Wetland + ! 19: Barren or Sparsely Vegetated + ! 20: Herbaceous Tundra + ! 21: Wooded Tundra + ! 22: Mixed Tundra + ! 23: Bare Ground Tundra + ! 24: Snow or Ice + ! 25: Playa + ! 26: Lava + ! 27: White Sand + + ISURBAN = 1 + ISWATER = 16 + ISBARREN = 19 + ISSNOW = 24 + EBLFOREST = 13 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.00, 0.06, 0.06, 0.06, 0.06, 0.15, 0.06, 0.06, 0.06, 0.86, 0.80, 0.85, 1.10, 1.09, 0.80, 0.00, 0.06, 0.05, 0.00, 0.04, 0.06, 0.06, 0.03, 0.00, 0.01, 0.00, 0.00, + HVT = 15.0, 0.50, 0.50, 0.50, 0.50, 1.25, 0.50, 0.50, 0.50, 16.0, 16.0, 18.0, 20.0, 20.0, 16.0, 0.00, 0.50, 0.80, 0.00, 0.50, 0.80, 0.80, 0.50, 0.00, 0.10, 0.00, 0.00, + HVB = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 3.00, 3.50, 3.00, 4.00, 3.50, 3.00, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + DEN = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, + RC = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.00, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.07, 0.10, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.00, 0.11, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.35, 0.45, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.00, 0.58, 0.45, 0.00, 0.45, 0.45, 0.45, 0.45, 0.00, 0.45, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.00, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.00, 0.36, 0.16, 0.00, 0.16, 0.16, 0.16, 0.16, 0.00, 0.16, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.00, 0.58, 0.39, 0.00, 0.39, 0.39, 0.39, 0.39, 0.00, 0.39, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.00, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.07, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, + 0.00, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.10, 0.10, 0.25, 0.25, 0.10, 0.25, 0.10, 0.25, 0.00, 0.25, 0.25, 0.00, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.000, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.220, 0.001, 0.000, 0.220, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + 0.000, 0.380, 0.380, 0.380, 0.380, 0.380, 0.380, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.380, 0.001, 0.000, 0.380, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + + XL = 0.000, -0.30, -0.30, -0.30, -0.30, -0.30, -0.30, 0.010, 0.250, 0.010, 0.250, 0.010, 0.010, 0.010, 0.250, 0.000, -0.30, 0.250, 0.000, -0.30, 0.250, 0.250, 0.250, 0.000, 0.250, 0.000, 0.000, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.0, 1.6, 1.8, 1.2, 1.2, 1.30, 0.50, 0.65, 0.70, 0.65, 0.55, 0.2, 0.55, 0.5, 0.5, 0.0, 1.4, 1.4, 0.0, 1.2, 1.3, 1.4, 1.0, 0.0, 1.0, 0.0, 0.0, + DILEFC= 0.00, 0.50, 0.50, 0.50, 0.35, 0.20, 0.20, 0.20, 0.50, 0.50, 0.60, 1.80, 0.50, 1.20, 0.80, 0.00, 0.40, 0.40, 0.00, 0.40, 0.30, 0.40, 0.30, 0.00, 0.30, 0.00, 0.00, + DILEFW= 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.20, 0.50, 0.20, 0.20, 4.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.20, 0.20, 0.00, 0.20, 0.00, 0.00, + RMF25 = 0.00, 1.00, 1.40, 1.45, 1.45, 1.45, 1.80, 0.26, 0.26, 0.80, 3.00, 4.00, 0.65, 3.00, 3.00, 0.00, 3.20, 3.20, 0.00, 3.20, 3.00, 3.00, 3.00, 0.00, 3.00, 0.00, 0.00, + SLA = 60, 80, 80, 80, 80, 80, 60, 60, 60, 50, 80, 80, 80, 80, 80, 0, 80, 80, 0, 80, 80, 80, 80, 0, 80, 0, 0, + FRAGR = 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + TMIN = 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 268, 273, 265, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + VCMX25= 0.00, 80.0, 80.0, 80.0, 60.0, 70.0, 40.0, 40.0, 40.0, 40.0, 60.0, 60.0, 60.0, 50.0, 55.0, 0.00, 50.0, 50.0, 0.00, 50.0, 50.0, 50.0, 50.0, 0.00, 50.0, 0.00, 0.00, + TDLEF = 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 268, 278, 278, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + BP = 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 1.E15, + MP = 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0., 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.00, + RMS25 = 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.32, 0.10, 0.64, 0.30, 0.90, 0.80, 0.00, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, + RMR25 = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.20, 0.00, 0.00, 0.01, 0.01, 0.05, 0.05, 0.36, 0.03, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 0.00, + WDPOOL= 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, + WRRAT = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 30.0, 30.0, 30.0, 30.0, 30.0, 0.00, 0.00, 30.0, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, + MRP = 0.00, 0.23, 0.23, 0.23, 0.23, 0.23, 0.17, 0.19, 0.19, 0.40, 0.40, 0.37, 0.23, 0.37, 0.30, 0.00, 0.17, 0.40, 0.00, 0.17, 0.23, 0.20, 0.00, 0.00, 0.20, 0.00, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.3, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.4, 0.2, 0.3, 0.1, 0.4, 0.7, 0.5, 0.5, 0.4, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.3, 0.3, 0.8, 0.2, 0.5, 0.1, 0.9, 1.3, 0.5, 0.5, 0.4, 0.0, 0.4, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.5, 0.2, 1.3, 0.1, 0.8, 0.1, 1.2, 1.2, 0.5, 0.6, 0.5, 0.0, 0.6, 0.6, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.4, 0.1, 1.1, 0.1, 0.5, 0.1, 1.6, 1.0, 0.5, 0.6, 0.5, 0.0, 0.5, 0.5, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.4, 0.1, 0.2, 0.1, 1.4, 0.8, 0.5, 0.7, 0.6, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.6, 0.6, 0.5, 0.6, 0.5, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.4, 0.5, 0.5, 0.5, 0.3, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + + LAIM = 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.5, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 0.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.0, 3.5, 1.6, 1.0, 0.0, 0.6, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.7, 0.7, 0.7, 0.5, 0.7, 1.0, 1.5, 1.0, 1.2, 0.6, 3.5, 1.6, 1.0, 0.0, 0.7, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 1.2, 1.2, 1.2, 1.5, 1.2, 1.0, 2.0, 1.0, 3.0, 1.2, 3.5, 5.3, 2.3, 0.0, 1.2, 0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.0, 3.0, 3.0, 3.0, 2.5, 3.0, 1.0, 2.5, 1.0, 4.7, 2.0, 3.5, 5.5, 3.5, 0.0, 3.0, 0.7, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 3.5, 3.5, 3.5, 3.5, 3.5, 1.0, 3.0, 1.0, 4.5, 2.6, 3.5, 5.3, 4.3, 0.0, 3.5, 1.7, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 1.5, 1.5, 1.5, 3.5, 1.5, 1.0, 2.5, 1.0, 3.4, 1.7, 3.5, 5.3, 3.3, 0.0, 1.5, 3.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.5, 0.7, 0.7, 0.7, 2.0, 0.7, 1.0, 1.5, 1.0, 1.2, 1.0, 3.5, 4.2, 2.2, 0.0, 0.7, 2.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 1.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.5, 3.5, 2.2, 1.2, 0.0, 0.6, 1.6, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.2, 3.5, 2.2, 1.2, 0.0, 0.5, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 2.2, 1.2, 0.0, 0.4, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + SLAREA=0.0228,0.0200,0.0200,0.0295,0.0223,0.0277,0.0060,0.0227,0.0188,0.0236,0.0258,0.0200,0.0200,0.0090,0.0223,0.0422,0.0390, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 41.87, 0.00, 0.00, 2.52, 0.04, 17.11, 0.02, 21.62, 0.11, 22.80, 46.86, 0.00, 0.00, 0.46, 30.98, 2.31, 1.63, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.98, 0.00, 0.00, 0.16, 0.09, 0.28, 0.05, 0.92, 0.22, 0.59, 0.38, 0.00, 0.00, 3.34, 0.96, 1.47, 1.07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.82, 0.00, 0.00, 0.23, 0.05, 0.81, 0.03, 1.73, 1.26, 1.37, 1.84, 0.00, 0.00, 1.85, 1.84, 1.70, 1.21, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ + + +&noah_mp_modis_veg_categories + VEG_DATASET_DESCRIPTION = "modified igbp modis noah" + NVEG = 20 +/ + +&noah_mp_modis_parameters +! 1 'Evergreen Needleleaf Forest' -> USGS 14 +! 2, 'Evergreen Broadleaf Forest' -> USGS 13 +! 3, 'Deciduous Needleleaf Forest' -> USGS 12 +! 4, 'Deciduous Broadleaf Forest' -> USGS 11 +! 5, 'Mixed Forests' -> USGS 15 +! 6, 'Closed Shrublands' -> USGS 8 "shrubland" +! 7, 'Open Shrublands' -> USGS 9 "shrubland/grassland" +! 8, 'Woody Savannas' -> USGS 8 "shrubland" +! 9, 'Savannas' -> USGS 10 +! 10, 'Grasslands' -> USGS 7 +! 11 'Permanent wetlands' -> avg of USGS 17 and 18 (herb. wooded wetland) +! 12, 'Croplands' -> USGS 2 "dryland cropland" +! 13, 'Urban and Built-Up' -> USGS 1 +! 14 'cropland/natural vegetation mosaic' -> USGS 5 "cropland/grassland" +! 15, 'Snow and Ice' -> USGS 24 +! 16, 'Barren or Sparsely Vegetated' -> USGS 19 +! 17, 'Water' -> USGS 16 +! 18, 'Wooded Tundra' -> USGS 21 +! 19, 'Mixed Tundra' -> USGS 22 +! 20, 'Barren Tundra' -> USGS 23 + + ISURBAN = 13 + ISWATER = 17 + ISBARREN = 16 + ISSNOW = 15 + EBLFOREST = 2 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.09, 1.10, 0.85, 0.80, 0.80, 0.06, 0.06, 0.06, 0.86, 0.06, 0.055, 0.06, 1.00, 0.06, 0.00, 0.00, 0.00, 0.06, 0.06, 0.03, +! Z0MVT = 0.50, 0.50, 0.50, 0.50, 0.50, 0.05, 0.06, 0.05, 0.15, 0.12, 0.30, 0.15, 0.80, 0.14, 0.00, 0.01, 0.00, 0.30, 0.15, 0.10, + HVT = 20.0, 20.0, 18.0, 16.0, 16.0, 0.50, 0.50, 0.50, 16.0, 0.50, 0.65, 0.50, 15.0, 0.50, 0.00, 0.00, 0.00, 0.80, 0.80, 0.50, + HVB = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 5.00, 0.05, 0.075, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + DEN = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, + RC = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + 0.35, 0.45, 0.35, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.58, 0.515, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.45, 0.45, 0.45, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, 0.00, 0.36, 0.00, 0.00, 0.00, 0.16, 0.16, 0.16, + 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.58, 0.485, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.39, 0.39, 0.39, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, 0.00, 0.07, 0.00, 0.00, 0.00, 0.05, 0.05, 0.05, + 0.10, 0.25, 0.10, 0.25, 0.25, 0.10, 0.10, 0.10, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, 0.00, 0.25, 0.25, 0.25, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.220, 0.1105, 0.220, 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.380, 0.1905, 0.380, 0.000, 0.380, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + + XL = 0.010, 0.010, 0.010, 0.250, 0.250, 0.010, 0.250, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, +! CWPVT = 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, 0.70, 0.65, 0.65, 0.50, 1.4, 1.6, 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, 1.4, 1.0, + DILEFC= 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, 0.50, 0.20, 0.50, 0.20, 0.4, 0.50, 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, 0.40, 0.30, + DILEFW= 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, 0.20, 0.20, + RMF25 = 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, + SLA = 80, 80, 80, 80, 80, 60, 60, 60, 50, 60, 80, 80, 60, 80, 0, 0, 0, 80, 80, 80, + FRAGR = 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, 0.10, 0.10, + TMIN = 265, 273, 268, 273, 268, 273, 273, 273, 273, 273, 268, 273, 0, 273, 0, 0, 0, 268, 268, 268, + VCMX25= 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, 50.0, 50.0, + TDLEF = 278, 278, 268, 278, 268, 278, 278, 278, 278, 278, 268, 278, 278, 278, 0, 0, 0, 268, 268, 268, + BP = 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, + MP = 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, 0.06, 0.06, + RMS25 = 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.00, + RMR25 = 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, 1.5, 1.5, + WDPOOL= 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, + WRRAT = 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, + MRP = 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, 0.19, 0.19, 0.40, 0.17, 0.285, 0.23, 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, 0.20, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.3, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.5, 0.5, 0.7, 0.4, 0.4, 0.2, 0.3, 0.2, 0.1, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 1.3, 0.9, 0.4, 0.2, 0.5, 0.2, 0.1, 0.8, 0.4, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 1.2, 1.2, 0.5, 0.1, 0.8, 0.1, 0.1, 1.3, 0.6, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.6, 0.5, 1.0, 1.6, 0.5, 0.1, 0.5, 0.1, 0.1, 1.1, 0.5, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.7, 0.5, 0.8, 1.4, 0.6, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 0.6, 0.6, 0.5, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 0.5, 0.4, 0.3, 0.1, 0.2, 0.1, 0.1, 0.4, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + + LAIM = 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.4, 0.3, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.45, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.3, 1.0, 1.0, 1.0, 1.0, 1.0, 0.6, 0.5, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.6, 1.2, 1.0, 1.0, 1.5, 1.0, 1.0, 0.7, 0.55, 0.0, 0.0, 0.7, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 5.3, 4.5, 1.2, 3.0, 2.3, 1.0, 2.0, 1.0, 1.0, 1.2, 0.85, 1.0, 0.0, 1.2, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 5.5, 4.5, 2.0, 4.7, 3.5, 1.0, 2.5, 1.0, 1.0, 3.0, 1.85, 2.0, 0.0, 3.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 5.3, 4.5, 2.6, 4.5, 4.3, 1.0, 3.0, 1.0, 1.0, 3.5, 2.6, 3.0, 0.0, 3.5, 0.0, 0.0, 0.0, 2.0, 2.0, 0.0, + 5.3, 4.5, 1.7, 3.4, 3.3, 1.0, 2.5, 1.0, 1.0, 1.5, 2.25, 3.0, 0.0, 1.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 4.2, 4.5, 1.0, 1.2, 2.2, 1.0, 1.5, 1.0, 1.0, 0.7, 1.6, 1.5, 0.0, 0.7, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 2.2, 4.5, 0.5, 0.3, 1.2, 1.0, 1.0, 1.0, 1.0, 0.6, 1.1, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 2.2, 4.5, 0.2, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.5, 0.65, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2.2, 4.5, 0.0, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.4, 0.4, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + +! LAIM = 5.1, 3.3, 0.0, 1.9, 3.0, 1.0, 0.8, 0.5, 0.5, 0.7, 0.3, 1.8, 0.0, 2.4, 0.0, 0.0, 0.0, 0.6, 0.7, 0.0, +! 5.0, 3.6, 0.0, 1.9, 2.9, 1.0, 0.6, 1.0, 1.0, 0.7, 0.45, 1.9, 0.0, 2.6, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.1, 4.4, 0.0, 2.1, 3.3, 1.0, 0.8, 1.8, 1.7, 1.1, 0.5, 2.6, 0.0, 2.9, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.3, 5.4, 0.6, 2.5, 4.0, 1.0, 0.9, 2.6, 2.9, 1.7, 0.55, 3.9, 0.0, 3.4, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.9, 6.2, 1.2, 3.1, 5.0, 1.0, 1.5, 3.4, 3.6, 2.5, 0.85, 5.2, 0.0, 4.0, 0.0, 0.0, 0.0, 0.8, 1.0, 0.0, +! 6.3, 6.4, 2.0, 3.3, 5.4, 1.0, 2.1, 3.6, 3.5, 2.7, 1.85, 5.6, 0.0, 4.2, 0.0, 0.0, 0.0, 2.0, 2.3, 0.0, +! 6.4, 5.9, 2.6, 3.3, 5.4, 1.0, 2.6, 3.4, 2.9, 2.8, 2.6, 5.3, 0.0, 4.1, 0.0, 0.0, 0.0, 3.3, 3.3, 0.0, +! 6.1, 5.6, 1.7, 3.1, 5.0, 1.0, 2.4, 3.2, 2.7, 2.4, 2.25, 4.5, 0.0, 3.8, 0.0, 0.0, 0.0, 3.3, 3.0, 0.0, +! 6.0, 5.3, 1.0, 2.9, 4.8, 1.0, 2.2, 2.9, 2.4, 2.1, 1.6, 4.1, 0.0, 3.7, 0.0, 0.0, 0.0, 2.8, 3.0, 0.0, +! 5.5, 4.7, 0.5, 2.6, 4.1, 1.0, 1.6, 2.3, 1.8, 1.7, 1.1, 3.2, 0.0, 3.2, 0.0, 0.0, 0.0, 1.4, 1.4, 0.0, +! 5.2, 4.0, 0.2, 2.2, 3.4, 1.0, 1.0, 1.5, 1.4, 1.3, 0.65, 2.3, 0.0, 2.7, 0.0, 0.0, 0.0, 0.5, 0.7, 0.0, +! 5.1, 3.2, 0.0, 1.9, 3.0, 1.0, 0.9, 0.7, 0.7, 0.8, 0.4, 1.7, 0.0, 2.4, 0.0, 0.0, 0.0, 0.8, 0.7, 0.0, + + SLAREA=0.0090, 0.0200, 0.0200, 0.0258, 0.0223, 0.0227, 0.0188, 0.0227, 0.0236, 0.0060, 0.0295, 0.0200, 0.0228, 0.0223, 0.02, 0.02, 0.0422, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 0.46, 0.00, 0.00, 46.86, 30.98, 21.62, 0.11, 21.62, 22.80, 0.02, 0.815, 0.00, 41.87, 0.04, 0.0, 0.0, 2.31, 0.0, 0.0, 0.0, + 3.34, 0.00, 0.00, 0.38, 0.96, 0.92, 0.22, 0.92, 0.59, 0.05, 0.535, 0.00, 0.98, 0.09, 0.0, 0.0, 1.47, 0.0, 0.0, 0.0, + 1.85, 0.00, 0.00, 1.84, 1.84, 1.73, 1.26, 1.73, 1.37, 0.03, 0.605, 0.00, 1.82, 0.05, 0.0, 0.0, 1.70, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ diff --git a/utils/laugh_tests/mizoguchi1990/settings/Model_Output.txt b/utils/laugh_tests/mizoguchi1990/settings/Model_Output.txt new file mode 100644 index 0000000000000000000000000000000000000000..19ed37469f9d3860b3414756a551cb850ab9955b --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/Model_Output.txt @@ -0,0 +1,34 @@ +! --------- +! model variables +! --------- +time | 1 +nSnow | 1 +nSoil | 1 +nLayers | 1 +mLayerHeight | 1 +iLayerLiqFluxSoil | 1 +mLayerDepth | 1 +mLayerVolFracIce | 1 +mLayerVolFracLiq | 1 +mLayerMatricHead | 1 +mLayerTranspire | 1 +mLayerBaseflow | 1 +mLayerCompress | 1 +iLayerNrgFlux | 1 +basin__TotalArea | 1 +scalarGroundEvaporation | 1 +scalarSoilBaseflow | 1 +scalarSoilDrainage | 1 +scalarInfiltration | 1 +scalarSnowDrainage | 1 +scalarSnowSublimation | 1 +scalarThroughfallRain | 1 +scalarThroughfallSnow | 1 +scalarRainfall | 1 +scalarSnowfall | 1 +scalarRainPlusMelt | 1 +fieldCapacity | 1 +pptrate | 1 +averageRoutedRunoff | 1 +scalarSWE | 1 +fieldCapacity | 1 diff --git a/utils/laugh_tests/mizoguchi1990/settings/SOILPARM.TBL b/utils/laugh_tests/mizoguchi1990/settings/SOILPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..b87d1bae502460279b1e6389ff34c2d3ce842510 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/SOILPARM.TBL @@ -0,0 +1,59 @@ +Soil Parameters +STAS +19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 2.79, 0.010, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.010, 0.92, 'SAND' +2, 4.26, 0.028, -1.044, 0.421, 0.383, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.82, 'LOAMY SAND' +3, 4.74, 0.047, -0.569, 0.434, 0.383, 0.141, 5.23E-6, 0.805E-5, 0.047, 0.60, 'SANDY LOAM' +4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.25, 'SILT LOAM' +5, 5.33, 0.084, 0.162, 0.476, 0.383, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.10, 'SILT' +6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.40, 'LOAM' +7, 6.66, 0.067, -1.491, 0.404, 0.314, 0.135, 4.45E-6, 0.990E-5, 0.067, 0.60, 'SANDY CLAY LOAM' +8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.04E-6, 0.237E-4, 0.120, 0.10, 'SILTY CLAY LOAM' +9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 0.113E-4, 0.103, 0.35, 'CLAY LOAM' +10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 0.187E-4, 0.100, 0.52, 'SANDY CLAY' +11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 0.964E-5, 0.126, 0.10, 'SILTY CLAY' +12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 0.112E-4, 0.138, 0.25, 'CLAY' +13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 'WATER' +15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.07, 'BEDROCK' +16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.25, 'OTHER(land-ice)' +17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 'LAVA' +19, 2.79, 0.01, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.01, 0.92, 'WHITE SAND' +Soil Parameters +STAS-RUC +19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 4.05, 0.045, 1.47, 0.395, 0.236, 0.121, 1.76E-4, 0.608E-6, 0.068, 0.92, 'SAND' +2, 4.38, 0.057, 1.41, 0.410, 0.383, 0.090, 1.56E-4, 0.514E-5, 0.075, 0.82, 'LOAMY SAND' +3, 4.90, 0.065, 1.34, 0.435, 0.383, 0.218, 3.47E-5, 0.805E-5, 0.114, 0.60, 'SANDY LOAM' +4, 5.30, 0.067, 1.27, 0.485, 0.360, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.25, 'SILT LOAM' +5, 5.30, 0.034, 1.27, 0.485, 0.383, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.10, 'SILT' +6, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.40, 'LOAM' +7, 7.12, 0.100, 1.18, 0.420, 0.314, 0.299, 6.30E-6, 0.990E-5, 0.175, 0.60, 'SANDY CLAY LOAM' +8, 7.75, 0.089, 1.32, 0.477, 0.387, 0.356, 1.70E-6, 0.237E-4, 0.218, 0.10, 'SILTY CLAY LOAM' +9, 8.52, 0.095, 1.23, 0.476, 0.382, 0.630, 2.45E-6, 0.113E-4, 0.250, 0.35, 'CLAY LOAM' +10, 10.40, 0.100, 1.18, 0.426, 0.338, 0.153, 2.17E-6, 0.187E-4, 0.219, 0.52, 'SANDY CLAY' +11, 10.40, 0.070, 1.15, 0.492, 0.404, 0.490, 1.03E-6, 0.964E-5, 0.283, 0.10, 'SILTY CLAY' +12, 11.40, 0.068, 1.09, 0.482, 0.412, 0.405, 1.28E-6, 0.112E-4, 0.286, 0.25, 'CLAY' +13, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 'WATER' +15, 4.05, 0.004, 2.03, 0.200, 0.17, 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 'BEDROCK' +16, 4.90, 0.065, 2.10, 0.435, 0.283, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 'OTHER(land-ice)' +17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.060, 0.52, 'LAVA' +19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 'WHITE SAND' +Soil Parameters +ROSETTA +12,1 'theta_res theta_sat vGn_alpha vGn_n k_soil BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1 0.098 0.459 -1.496 1.253 1.70799e-06 1.40 0.068 1.09 0.482 0.412 0.405 1.28E-6 0.112E-4 0.286 0.25 'CLAY' +2 0.079 0.442 -1.581 1.416 9.47297e-07 8.52 0.095 1.23 0.476 0.382 0.630 2.45E-6 0.113E-4 0.250 0.35 'CLAY LOAM' +3 0.061 0.399 -1.112 1.472 1.39472e-06 5.39 0.078 1.21 0.451 0.329 0.478 6.95E-6 0.143E-4 0.155 0.40 'LOAM' +4 0.049 0.390 -3.475 1.746 1.21755e-05 4.38 0.057 1.41 0.410 0.383 0.090 1.56E-4 0.514E-5 0.075 0.82 'LOAMY SAND' +5 0.053 0.375 -3.524 3.177 7.43852e-05 4.05 0.045 1.47 0.395 0.236 0.121 1.76E-4 0.608E-6 0.068 0.92 'SAND' +6 0.117 0.385 -3.342 1.208 1.31367e-06 0.40 0.100 1.18 0.426 0.338 0.153 2.17E-6 0.187E-4 0.219 0.52 'SANDY CLAY' +7 0.063 0.384 -2.109 1.330 1.52576e-06 7.12 0.100 1.18 0.420 0.314 0.299 6.30E-6 0.990E-5 0.175 0.60 'SANDY CLAY LOAM' +8 0.039 0.387 -2.667 1.449 4.43084e-06 4.90 0.065 1.34 0.435 0.383 0.218 3.47E-5 0.805E-5 0.114 0.60 'SANDY LOAM' +9 0.050 0.489 -0.658 1.679 5.06391e-06 5.30 0.034 1.27 0.485 0.383 0.786 7.20E-6 0.239E-4 0.179 0.10 'SILT' +10 0.111 0.481 -1.622 1.321 1.11298e-06 0.40 0.070 1.15 0.492 0.404 0.490 1.03E-6 0.964E-5 0.283 0.10 'SILTY CLAY' +11 0.090 0.482 -0.839 1.521 1.28673e-06 7.75 0.089 1.32 0.477 0.387 0.356 1.70E-6 0.237E-4 0.218 0.10 'SILTY CLAY LOAM' +12 0.065 0.439 -0.506 1.663 2.11099e-06 5.30 0.067 1.27 0.485 0.360 0.786 7.20E-6 0.239E-4 0.179 0.25 'SILT LOAM' diff --git a/utils/laugh_tests/mizoguchi1990/settings/VEGPARM.TBL b/utils/laugh_tests/mizoguchi1990/settings/VEGPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..be03224ef59386e2503e147729ffeaef9aa12553 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/VEGPARM.TBL @@ -0,0 +1,119 @@ +Vegetation Parameters +USGS +27,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ' +1, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up Land' +2, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Dryland Cropland and Pasture' +3, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 'Irrigated Cropland and Pasture' +4, .80, 3, 40., 100., 36.25, 0.04, 66., 1.00, 4.50, .920, .985, .18, .23, .05, .15, 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'Cropland/Grassland Mosaic' +6, .80, 3, 70., 65., 44.14, 0.04, 60., 2.00, 4.00, .930, .985, .16, .20, .20, .20, 'Cropland/Woodland Mosaic' +7, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grassland' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Shrubland' +9, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Mixed Shrubland/Grassland' +10, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savanna' +11, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +12, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +13, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +14, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +15, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forest' +16, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water Bodies' +17, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 'Herbaceous Wetland' +18, .60, 2, 100., 30., 51.93, 0.02, 50., 2.00, 5.80, .950, .950, .14, .14, .40, .40, 'Wooded Wetland' +19, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +20, .60, 3, 150., 100., 42.00, 0.025, 68., 0.41, 3.35, .920, .920, .15, .20, .10, .10, 'Herbaceous Tundra' +21, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +22, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +23, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Bare Ground Tundra' +24, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow or Ice' +25, .50, 1, 40., 100., 36.25, 0.02, 75., 0.01, 0.01, .890, .890, .30, .30, .01, .01, 'Playa' +26, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .880, .880, .16, .16, .15, .15, 'Lava' +27, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .830, .830, .60, .60, .01, .01, 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 +Vegetation Parameters +MODIFIED_IGBP_MODIS_NOAH +20,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX' +1 .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forests' +6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Closed Shrublands' +7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Open Shrublands' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Woody Savannas' +9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savannas' +10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grasslands' +11 .60, 2, 70., 65., 55.97 0.015 59., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 'Permanent wetlands' +12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Croplands' +13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up' +14 .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'cropland/natural vegetation mosaic' +15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow and Ice' +16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water' +18, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +19, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +20, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Barren Tundra' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +16 +NATURAL +14 +Vegetation Parameters +USGS-RUC +27,1, 'ALBEDO Z0 LEMI PC SHDFAC NROOT RS RGL HS SNUP LAI MAXALB' +1, .18, .50, .88, .40, .10, 1, 200., 999., 999.0, 0.04, 4.0, 40., 'Urban and Built-Up Land' +2, .17, .06, .92, .30, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Dryland Cropland and Pasture' +3, .18, .075, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Irrigated Cropland and Pasture' +4, .18, .065, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .18, .05, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Cropland/Grassland Mosaic' +6, .16, .20, .93, .40, .80, 3, 70., 65., 44.14, 0.04, 4.0, 60., 'Cropland/Woodland Mosaic' +7, .19, .075 .92, .40, .80, 3, 40., 100., 36.35, 0.04, 4.0, 64., 'Grassland' +8, .22, .10, .88, .40, .70, 3, 300., 100., 42.00, 0.03, 4.0, 69., 'Shrubland' +9, .20, .11, .90, .40, .70, 3, 170., 100., 39.18, 0.035, 4.0, 67., 'Mixed Shrubland/Grassland' +10, .20, .15, .92, .40, .50, 3, 70., 65., 54.53, 0.04, 4.0, 45., 'Savanna' +11, .16, .50, .93, .55, .80, 4, 100., 30., 54.53, 0.08, 4.0, 58., 'Deciduous Broadleaf Forest' +12, .14, .50, .94, .55, .70, 4, 150., 30., 47.35, 0.08, 4.0, 54., 'Deciduous Needleleaf Forest' +13, .12, .50, .95, .55, .95, 4, 150., 30., 41.69, 0.08, 4.0, 32., 'Evergreen Broadleaf Forest' +14, .12, .50, .95, .55, .70, 4, 125., 30., 47.35, 0.08, 4.0, 52., 'Evergreen Needleleaf Forest' +15, .13, .50, .94, .55, .80, 4, 125., 30., 51.93, 0.08, 4.0, 53., 'Mixed Forest' +16, .08, .0001, .98, .00, .00, 0, 100., 30., 51.75, 0.01, 4.0, 70., 'Water Bodies' +17, .14, .20, .95, .55, .60, 2, 40., 100., 60.00, 0.01, 4.0, 35., 'Herbaceous Wetland' +18, .14, .40, .95, .55, .60, 2, 100., 30., 51.93, 0.02, 4.0, 30., 'Wooded Wetland' +19, .25, .05, .85, .30, .01, 1, 999., 999., 999.0, 0.02, 4.0, 69., 'Barren or Sparsely Vegetated' +20, .15, .10, .92, .30, .60, 3, 150., 100., 42.00, 0.025, 4.0, 58., 'Herbaceous Tundra' +21, .15, .15, .93, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Wooded Tundra' +22, .15, .10, .92, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Mixed Tundra' +23, .25, .065 .85, .30, .30, 2, 200., 100., 42.00, 0.02, 4.0, 65., 'Bare Ground Tundra' +24, .55, .05, .95, .00, .00, 1, 999., 999., 999.0, 0.02, 4.0, 75., 'Snow or Ice' +25, .30, .01, .85, .30, .50, 1, 40., 100., 36.25, 0.02, 4.0, 69., 'Playa' +26, .16, .15, .85, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'Lava' +27, .60, .01, .90, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_fileManager_mizoguchi.txt b/utils/laugh_tests/mizoguchi1990/settings/summa_fileManager_mizoguchi.txt new file mode 100644 index 0000000000000000000000000000000000000000..2f220a316ee3c053e860e62697095bffa265b321 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/summa_fileManager_mizoguchi.txt @@ -0,0 +1,22 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:01' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/mizoguchi1990/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/mizoguchi1990/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/mizoguchi1990/output/' ! output_path +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '2000-01-01' +decisionsFile 'summa_zDecisions_mizoguchi.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_mizoguchi.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_mizoguchi.nc' ! initial_cond +outFilePrefix 'mizoguchi1990' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! \ No newline at end of file diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_fileManager_verify_mizoguchi.txt b/utils/laugh_tests/mizoguchi1990/settings/summa_fileManager_verify_mizoguchi.txt new file mode 100644 index 0000000000000000000000000000000000000000..69517be0971ed8e23b1db287b8b118c6ca9596e6 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/summa_fileManager_verify_mizoguchi.txt @@ -0,0 +1,20 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 00:01' ! +simEndTime '2000-01-03 12:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/mizoguchi1990/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/mizoguchi1990/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/mizoguchi1990/verification_data/' ! output_path +decisionsFile 'summa_zDecisions_mizoguchi.txt' ! decision +outputControlFile 'Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_mizoguchi.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_mizoguchi.nc' ! initial_cond +outFilePrefix 'mizoguchi1990' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! \ No newline at end of file diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_zBasinParamInfo.txt b/utils/laugh_tests/mizoguchi1990/settings/summa_zBasinParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..1926fd71fbc6ce90cd4180f652ae414885e4b611 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/summa_zBasinParamInfo.txt @@ -0,0 +1,35 @@ +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! ***** DEFINITION OF BASIN PARAMETERS ********************************************************************************** +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! *********************************************************************************************************************** +! DEFINE BASIN MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a1), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! *********************************************************************************************************************** +! +! ******************************************************************** +! define format string for parameter descriptions +! ******************************************************************** +'(a25,1x,a1,1x,3(f12.4,1x,a1,1x))' ! format string for parameter descriptions (must be in single quotes) +! ******************************************************************** +! baseflow +! ******************************************************************** +basin__aquiferHydCond | 0.0100 | 0.0001 | 10.0000 +basin__aquiferScaleFactor | 3.5000 | 0.1000 | 100.0000 +basin__aquiferBaseflowExp | 5.0000 | 1.0000 | 10.0000 +! ******************************************************************** +! within-grid routing +! ******************************************************************** +routingGammaShape | 2.5000 | 2.0000 | 3.0000 +routingGammaScale | 20000.0000 | 1.0000 | 5000000.0000 +! ******************************************************************** diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_zDecisions_mizoguchi.txt b/utils/laugh_tests/mizoguchi1990/settings/summa_zDecisions_mizoguchi.txt new file mode 100644 index 0000000000000000000000000000000000000000..32ebccac5a0c549881def40f2c71c35b005c1652 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/summa_zDecisions_mizoguchi.txt @@ -0,0 +1,168 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE MODEL DECISIONS +! *********************************************************************************************************************** +! This file defines the modeling decisions used. +! NOTES: +! (1) lines starting with ! are treated as comment lines -- there is no limit on the number of comment lines +! (2) the name of the decision is followed by the character string defining the decision +! (3) the simulation start/end times must be within single quotes +! *********************************************************************************************************************** +! *********************************************************************************************************************** +soilCatTbl ROSETTA ! (03) soil-category dateset +vegeParTbl USGS ! (04) vegetation category dataset +soilStress NoahType ! (05) choice of function for the soil moisture control on stomatal resistance +stomResist BallBerry ! (06) choice of function for stomatal resistance +! *********************************************************************************************************************** +num_method itertive ! (07) choice of numerical method +fDerivMeth analytic ! (08) method used to calculate flux derivatives +LAI_method monTable ! (09) method used to determine LAI and SAI +f_Richards mixdform ! (10) form of Richard's equation +groundwatr noXplict ! (11) choice of groundwater parameterization +hc_profile constant ! (12) choice of hydraulic conductivity profile +bcUpprTdyn presTemp ! (13) type of upper boundary condition for thermodynamics +bcLowrTdyn zeroFlux ! (14) type of lower boundary condition for thermodynamics +bcUpprSoiH liq_flux ! (15) type of upper boundary condition for soil hydrology +bcLowrSoiH zeroFlux ! (16) type of lower boundary condition for soil hydrology +veg_traits CM_QJRMS1988 ! (17) choice of parameterization for vegetation roughness length and displacement height +canopyEmis difTrans ! (18) choice of parameterization for canopy emissivity +snowIncept lightSnow ! (19) choice of parameterization for snow interception +windPrfile logBelowCanopy ! (20) choice of wind profile through the canopy +astability louisinv ! (21) choice of stability function +canopySrad CLM_2stream ! (22) choice of canopy shortwave radiation method +alb_method varDecay ! (23) choice of albedo representation +compaction anderson ! (24) choice of compaction routine +snowLayers jrdn1991 ! (25) choice of method to combine and sub-divide snow layers +thCondSnow jrdn1991 ! (26) choice of thermal conductivity representation for snow +thCondSoil hanssonVZJ ! (27) choice of thermal conductivity representation for soil +spatial_gw localColumn ! (28) choice of method for the spatial representation of groundwater +subRouting timeDlay ! (29) choice of method for sub-grid routing +! *********************************************************************************************** +! ***** description of the options available -- nothing below this point is read **************** +! *********************************************************************************************** +! ----------------------------------------------------------------------------------------------- +! (01) simulation start time +! (02) simulation end time +! ----------------------------------------------------------------------------------------------- +! (03) soil-category dateset +! STAS ! STATSGO dataset +! STAS-RUC ! ?? +! ROSETTA ! merged Rosetta table with STAS-RUC +! ----------------------------------------------------------------------------------------------- +! (04) vegetation category dataset +! USGS ! USGS 24/27 category dataset +! MODIFIED_IGBP_MODIS_NOAH ! MODIS 20-category dataset +! ----------------------------------------------------------------------------------------------- +! (05) choice of function for the soil moisture control on stomatal resistance +! NoahType ! thresholded linear function of volumetric liquid water content +! CLM_Type ! thresholded linear function of matric head +! SiB_Type ! exponential of the log of matric head +! ----------------------------------------------------------------------------------------------- +! (06) choice of function for stomatal resistance +! BallBerry ! Ball-Berry +! Jarvis ! Jarvis +! ----------------------------------------------------------------------------------------------- +! (07) choice of numerical method +! itertive ! iterative +! non_iter ! non-iterative +! itersurf ! iterate only on the surface energy balance +! ----------------------------------------------------------------------------------------------- +! (08) method used to calculate flux derivatives +! numericl ! numerical derivatives +! analytic ! analytical derivatives +! ----------------------------------------------------------------------------------------------- +! (09) method used to determine LAI and SAI +! monTable ! LAI/SAI taken directly from a monthly table for different vegetation classes +! specified ! LAI/SAI computed from green vegetation fraction and winterSAI and summerLAI parameters +! ----------------------------------------------------------------------------------------------- +! (10) form of Richards' equation +! moisture ! moisture-based form of Richards' equation +! mixdform ! mixed form of Richards' equation +! ----------------------------------------------------------------------------------------------- +! (11) choice of groundwater parameterization +! qTopmodl ! topmodel parameterization +! bigBuckt ! a big bucket (lumped aquifer model) +! noXplict ! no explicit groundwater parameterization +! ----------------------------------------------------------------------------------------------- +! (12) choice of hydraulic conductivity profile +! constant ! constant hydraulic conductivity with depth +! pow_prof ! power-law profile +! ----------------------------------------------------------------------------------------------- +! (13) choice of upper boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! nrg_flux ! energy flux +! ----------------------------------------------------------------------------------------------- +! (14) choice of lower boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (15) choice of upper boundary conditions for soil hydrology +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! liq_flux ! liquid water flux +! ----------------------------------------------------------------------------------------------- +! (16) choice of lower boundary conditions for soil hydrology +! drainage ! free draining +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! bottmPsi ! function of matric head in the lower-most layer +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (17) choice of parameterization for vegetation roughness length and displacement height +! Raupach_BLM1994 ! Raupach (BLM 1994) "Simplified expressions..." +! CM_QJRMS1988 ! Choudhury and Monteith (QJRMS 1998) "A four layer model for the heat budget..." +! vegTypeTable ! constant parameters dependent on the vegetation type +! ----------------------------------------------------------------------------------------------- +! (18) choice of parameterization for canopy emissivity +! simplExp ! simple exponential function +! difTrans ! parameterized as a function of diffuse transmissivity +! ----------------------------------------------------------------------------------------------- +! (19) choice of parameterization for snow interception +! stickySnow ! maximum interception capacity an increasing function of temerature +! lightSnow ! maximum interception capacity an inverse function of new snow density +! ----------------------------------------------------------------------------------------------- +! (20) choice of wind profile +! exponential ! exponential wind profile extends to the surface +! logBelowCanopy ! logarithmic profile below the vegetation canopy +! ----------------------------------------------------------------------------------------------- +! (21) choice of stability function +! standard ! standard MO similarity, a la Anderson (1979) +! louisinv ! Louis (1979) inverse power function +! mahrtexp ! Mahrt (1987) exponential function +! ----------------------------------------------------------------------------------------------- +! (22) choice of canopy shortwave radiation method +! noah_mp ! full Noah-MP implementation (including albedo) +! CLM_2stream ! CLM 2-stream model (see CLM documentation) +! UEB_2stream ! UEB 2-stream model (Mahat and Tarboton, WRR 2011) +! NL_scatter ! Simplified method Nijssen and Lettenmaier (JGR 1999) +! BeersLaw ! Beer's Law (as implemented in VIC) +! ----------------------------------------------------------------------------------------------- +! (23) choice of albedo representation +! conDecay ! constant decay rate (e.g., VIC, CLASS) +! varDecay ! variable decay rate (e.g., BATS approach, with destructive metamorphism + soot content) +! ----------------------------------------------------------------------------------------------- +! (24) choice of compaction routine +! consettl ! constant settlement rate +! anderson ! semi-empirical method of Anderson (1976) +! ----------------------------------------------------------------------------------------------- +! (25) choice of method to combine and sub-divide snow layers +! CLM_2010 ! CLM option: combination/sub-dividion rules depend on layer index +! jrdn1991 ! SNTHERM option: same combination/sub-dividion rules applied to all layers +! ----------------------------------------------------------------------------------------------- +! (26) choice of thermal conductivity representation for snow +! tyen1965 ! Yen (1965) +! melr1977 ! Mellor (1977) +! jrdn1991 ! Jordan (1991) +! smnv2000 ! Smirnova et al. (2000) +! ----------------------------------------------------------------------------------------------- +! (27) choice of thermal conductivity representation for soil +! funcSoilWet ! function of soil wetness +! mixConstit ! mixture of constituents +! hanssonVZJ ! test case for the mizoguchi lab experiment, Hansson et al. VZJ 2004 +! ----------------------------------------------------------------------------------------------- +! (28) choice of method for the spatial representation of groundwater +! localColumn ! separate groundwater representation in each local soil column +! singleBasin ! single groundwater store over the entire basin +! ----------------------------------------------------------------------------------------------- +! (29) choice of method for sub-grid routing +! timeDlay ! time-delay histogram +! qInstant ! instantaneous routing +! *********************************************************************************************** +! history Mon Jul 20 16:08:18 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/mizoguchi1990/summa_fileManager_mizoguchi.txt diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_zForcingFileList.txt b/utils/laugh_tests/mizoguchi1990/settings/summa_zForcingFileList.txt new file mode 100644 index 0000000000000000000000000000000000000000..54cd59448427e605213d73854a4b8e61e3095756 --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/summa_zForcingFileList.txt @@ -0,0 +1,8 @@ +! **************************************************************************************************** +! List of forcing data files used +! +! This file includes one "word" per line: +! (1) The name of a forcing file +! --> filename must be in single quotes +! **************************************************************************************************** + 'mizoguchi_forcing.nc' diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_zForcingInfo_mizoguchi.txt b/utils/laugh_tests/mizoguchi1990/settings/summa_zForcingInfo_mizoguchi.txt new file mode 100644 index 0000000000000000000000000000000000000000..268d17423c5d9a2f5dd828010d30fbc7426b60bd --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/summa_zForcingInfo_mizoguchi.txt @@ -0,0 +1,29 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE FORCING FILE +! *********************************************************************************************************************** +! This file defines the name of the forcing data file, the number of columns in the file, the column index for each data +! variable, the start index of the simulation period, the length of the simulation period, +! and the length of the data time step +! *********************************************************************************************************************** +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "|" must be present (format a1), as these are used to check the integrety of the file +! *********************************************************************************************************************** +'(a15,a1,1x,a)' +filenmData | mizoguchi_forcing.txt ! name of the forcing data file (must be in single quotes) +ncols | 13 ! number of columns in the forcing file +iyyy | 1 ! year +im | 2 ! month +id | 3 ! day +ih | 4 ! hour +imin | 5 ! minute +pptrate | 7 ! precipitation rate (kg m-2 s-1) +SWRadAtm | 8 ! downwelling shortwave radiaiton (W m-2) +LWRadAtm | 9 ! downwelling longwave radiation (W m-2) +airtemp | 10 ! air temperature (K) +windspd | 11 ! windspeed (m/s) +airpres | 12 ! pressure (Pa) +spechum | 13 ! specific humidity (g/g) +data_step | 60 ! length of time step (seconds) diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_zInitialCond_mizoguchi.nc b/utils/laugh_tests/mizoguchi1990/settings/summa_zInitialCond_mizoguchi.nc new file mode 100644 index 0000000000000000000000000000000000000000..2ff2e3ffc4b70f3d8993cb916c0a900e504f4329 Binary files /dev/null and b/utils/laugh_tests/mizoguchi1990/settings/summa_zInitialCond_mizoguchi.nc differ diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_zLocalAttributes.nc b/utils/laugh_tests/mizoguchi1990/settings/summa_zLocalAttributes.nc new file mode 100644 index 0000000000000000000000000000000000000000..2909cb14bbbb1eaae1398976dacd601d039143af Binary files /dev/null and b/utils/laugh_tests/mizoguchi1990/settings/summa_zLocalAttributes.nc differ diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_zLocalParamInfo.txt b/utils/laugh_tests/mizoguchi1990/settings/summa_zLocalParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..1ce9d46a0120e95c9d49733d3e534e0e92ededac --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/settings/summa_zLocalParamInfo.txt @@ -0,0 +1,226 @@ +! ======================================================================================================================= +! ======================================================================================================================= +! ===== DEFINITION OF MODEL PARAMETERS ================================================================================== +! ======================================================================================================================= +! ======================================================================================================================= +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! ======================================================================================================================= +! DEFINE SITE MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! ======================================================================================================================= +! +! ==================================================================== +! define format string for parameter descriptions +! ==================================================================== +'(a25,1x,3(a1,1x,f12.4,1x))' ! format string (must be in single quotes) +! ==================================================================== +! boundary conditions +! ==================================================================== +upperBoundHead | -0.7500 | -100.0000 | -0.0100 +lowerBoundHead | 0.0000 | -100.0000 | -0.0100 +upperBoundTheta | 0.2004 | 0.1020 | 0.3680 +lowerBoundTheta | 0.1100 | 0.1020 | 0.3680 +upperBoundTemp | 272.1600 | 270.1600 | 280.1600 +lowerBoundTemp | 274.1600 | 270.1600 | 280.1600 +! ==================================================================== +! precipitation partitioning +! ==================================================================== +tempCritRain | 273.1600 | 272.1600 | 274.1600 +tempRangeTimestep | 2.0000 | 0.5000 | 5.0000 +frozenPrecipMultip | 1.0000 | 0.5000 | 1.5000 +! ==================================================================== +! snow properties +! ==================================================================== +snowfrz_scale | 50.0000 | 10.0000 | 1000.0000 +fixedThermalCond_snow | 0.3500 | 0.1000 | 1.0000 +! ==================================================================== +! snow albedo +! ==================================================================== +albedoMax | 0.8400 | 0.7000 | 0.9500 +albedoMinWinter | 0.5500 | 0.6000 | 1.0000 +albedoMinSpring | 0.5500 | 0.3000 | 1.0000 +albedoMaxVisible | 0.9500 | 0.7000 | 0.9500 +albedoMinVisible | 0.7500 | 0.5000 | 0.7500 +albedoMaxNearIR | 0.6500 | 0.5000 | 0.7500 +albedoMinNearIR | 0.3000 | 0.1500 | 0.4500 +albedoDecayRate | 1.0d+6 | 0.1d+6 | 5.0d+6 +albedoSootLoad | 0.3000 | 0.1000 | 0.5000 +albedoRefresh | 1.0000 | 1.0000 | 10.0000 +! ==================================================================== +! radiation transfer within snow +! ==================================================================== +radExt_snow | 20.0000 | 20.0000 | 20.0000 +directScale | 0.0900 | 0.0000 | 0.5000 +Frad_direct | 0.7000 | 0.0000 | 1.0000 +Frad_vis | 0.5000 | 0.0000 | 1.0000 +! ==================================================================== +! new snow density +! ==================================================================== +newSnowDenMin | 100.0000 | 50.0000 | 100.0000 +newSnowDenMult | 100.0000 | 25.0000 | 75.0000 +newSnowDenScal | 5.0000 | 1.0000 | 5.0000 +constSnowDen | 100.0000 | 50.0000 | 250.0000 +newSnowDenAdd | 109.0000 | 80.0000 | 120.0000 +newSnowDenMultTemp | 6.0000 | 1.0000 | 12.0000 +newSnowDenMultWind | 26.0000 | 16.0000 | 36.0000 +newSnowDenMultAnd | 1.0000 | 1.0000 | 3.0000 +newSnowDenBase | 0.0000 | 0.0000 | 0.0000 +! ==================================================================== +! snow compaction +! ==================================================================== +densScalGrowth | 0.0460 | 0.0230 | 0.0920 +tempScalGrowth | 0.0400 | 0.0200 | 0.0600 +grainGrowthRate | 2.7d-6 | 1.0d-6 | 5.0d-6 +densScalOvrbdn | 0.0230 | 0.0115 | 0.0460 +tempScalOvrbdn | 0.0800 | 0.6000 | 1.0000 +baseViscosity | 9.0d+5 | 5.0d+5 | 1.5d+6 +! ==================================================================== +! water flow through snow +! ==================================================================== +Fcapil | 0.0400 | 0.0100 | 0.1000 +k_snow | 0.1979 | 0.0050 | 0.0500 +mw_exp | 3.0000 | 1.0000 | 5.0000 +! ==================================================================== +! turbulent heat fluxes +! ==================================================================== +z0Snow | 0.0010 | 0.0010 | 10.0000 +z0Soil | 0.0100 | 0.0010 | 10.0000 +z0Canopy | 0.1000 | 0.0010 | 10.0000 +zpdFraction | 0.6500 | 0.5000 | 0.8500 +critRichNumber | 0.2000 | 0.1000 | 1.0000 +Louis79_bparam | 9.4000 | 9.2000 | 9.6000 +Louis79_cStar | 5.3000 | 5.1000 | 5.5000 +Mahrt87_eScale | 1.0000 | 0.5000 | 2.0000 +leafExchangeCoeff | 0.0100 | 0.0010 | 0.1000 +windReductionParam | 0.2800 | 0.0000 | 1.0000 +! ==================================================================== +! stomatal conductance +! ==================================================================== +Kc25 | 296.0770 | 296.0770 | 296.0770 +Ko25 | 0.2961 | 0.2961 | 0.2961 +Kc_qFac | 2.1000 | 2.1000 | 2.1000 +Ko_qFac | 1.2000 | 1.2000 | 1.2000 +kc_Ha | 79430.0000 | 79430.0000 | 79430.0000 +ko_Ha | 36380.0000 | 36380.0000 | 36380.0000 +vcmax25_canopyTop | 40.0000 | 20.0000 | 100.0000 +vcmax_qFac | 2.4000 | 2.4000 | 2.4000 +vcmax_Ha | 65330.0000 | 65330.0000 | 65330.0000 +vcmax_Hd | 220000.0000 | 149250.0000 | 149250.0000 +vcmax_Sv | 710.0000 | 485.0000 | 485.0000 +vcmax_Kn | 0.6000 | 0.0000 | 1.2000 +jmax25_scale | 2.0000 | 2.0000 | 2.0000 +jmax_Ha | 43540.0000 | 43540.0000 | 43540.0000 +jmax_Hd | 152040.0000 | 152040.0000 | 152040.0000 +jmax_Sv | 495.0000 | 495.0000 | 495.0000 +fractionJ | 0.1500 | 0.1500 | 0.1500 +quantamYield | 0.0500 | 0.0500 | 0.0500 +vpScaleFactor | 1500.0000 | 1500.0000 | 1500.0000 +cond2photo_slope | 9.0000 | 1.0000 | 10.0000 +minStomatalConductance | 2000.0000 | 2000.0000 | 2000.0000 +! ==================================================================== +! vegetation properties +! ==================================================================== +winterSAI | 1.0000 | 0.0100 | 3.0000 +summerLAI | 3.0000 | 0.0100 | 10.0000 +rootScaleFactor1 | 2.0000 | 1.0000 | 10.0000 +rootScaleFactor2 | 5.0000 | 1.0000 | 10.0000 +rootingDepth | 0.1000 | 0.0100 | 10.0000 +rootDistExp | 1.0000 | 0.0100 | 1.0000 +plantWiltPsi | -150.0000 | -500.0000 | 0.0000 +soilStressParam | 5.8000 | 4.3600 | 6.3700 +critSoilWilting | 0.0750 | 0.0000 | 1.0000 +critSoilTranspire | 0.1750 | 0.0000 | 1.0000 +critAquiferTranspire | 0.2000 | 0.1000 | 10.0000 +minStomatalResistance | 50.0000 | 10.0000 | 200.0000 +leafDimension | 0.0400 | 0.0100 | 0.1000 +heightCanopyTop | 20.0000 | 0.0500 | 100.0000 +heightCanopyBottom | 2.0000 | 0.0000 | 5.0000 +specificHeatVeg | 874.0000 | 500.0000 | 1500.0000 +maxMassVegetation | 25.0000 | 1.0000 | 50.0000 +throughfallScaleSnow | 0.5000 | 0.1000 | 0.9000 +throughfallScaleRain | 0.5000 | 0.1000 | 0.9000 +refInterceptCapSnow | 6.6000 | 1.0000 | 10.0000 +refInterceptCapRain | 1.0000 | 0.0100 | 1.0000 +snowUnloadingCoeff | 0.0000 | 0.0000 | 1.5d-6 +canopyDrainageCoeff | 0.0050 | 0.0010 | 0.0100 +ratioDrip2Unloading | 0.4000 | 0.0000 | 1.0000 +canopyWettingFactor | 0.7000 | 0.0000 | 1.0000 +canopyWettingExp | 1.0000 | 0.0000 | 1.0000 +! ==================================================================== +! soil properties +! ==================================================================== +soil_dens_intr | 2700.0000 | 500.0000 | 4000.0000 +thCond_soil | 28.0000 | 2.9000 | 8.4000 +frac_sand | 0.1600 | 0.0000 | 1.0000 +frac_silt | 0.2800 | 0.0000 | 1.0000 +frac_clay | 0.5600 | 0.0000 | 1.0000 +fieldCapacity | 0.2000 | 0.0000 | 1.0000 +wettingFrontSuction | 0.3000 | 0.1000 | 1.5000 +theta_mp | 0.4010 | 0.3000 | 0.6000 +theta_sat | 0.5500 | 0.3000 | 0.6000 +theta_res | 0.1390 | 0.0010 | 0.1000 +vGn_alpha | -0.8400 | -1.0000 | -0.0100 +vGn_n | 1.3000 | 1.0000 | 3.0000 +mpExp | 5.0000 | 1.0000 | 10.0000 +k_soil | 7.5d-06 | 1.d-07 | 100.d-07 +k_macropore | 1.0d-03 | 1.d-07 | 100.d-07 +kAnisotropic | 1.0000 | 0.0001 | 10.0000 +zScale_TOPMODEL | 2.5000 | 0.1000 | 100.0000 +compactedDepth | 1.0000 | 0.0000 | 1.0000 +aquiferScaleFactor | 0.3500 | 0.1000 | 100.0000 +aquiferBaseflowExp | 2.0000 | 1.0000 | 10.0000 +aquiferBaseflowRate | 2.0000 | 1.0000 | 10.0000 +qSurfScale | 50.0000 | 1.0000 | 100.0000 +specificYield | 0.2000 | 0.1000 | 0.3000 +specificStorage | 1.d-09 | 1.d-05 | 1.d-07 +f_impede | 2.0000 | 1.0000 | 10.0000 +soilIceScale | 0.1300 | 0.0001 | 1.0000 +soilIceCV | 0.4500 | 0.1000 | 5.0000 +! ==================================================================== +! algorithmic control parameters +! ==================================================================== +minwind | 0.1000 | 0.0010 | 1.0000 +minstep | 1.0000 | 1.0000 | 1800.0000 +maxstep | 3600.0000 | 60.0000 | 1800.0000 +wimplicit | 0.0000 | 0.0000 | 1.0000 +maxiter | 20.0000 | 1.0000 | 100.0000 +relConvTol_liquid | 1.0d-3 | 1.0d-5 | 1.0d-1 +absConvTol_liquid | 1.0d-5 | 1.0d-8 | 1.0d-3 +relConvTol_matric | 1.0d-6 | 1.0d-5 | 1.0d-1 +absConvTol_matric | 1.0d-6 | 1.0d-8 | 1.0d-3 +relConvTol_energy | 1.0d-2 | 1.0d-5 | 1.0d-1 +absConvTol_energy | 1.0d-0 | 1.0d-2 | 1.0d+1 +relConvTol_aquifr | 1.0d-0 | 1.0d-2 | 1.0d+1 +absConvTol_aquifr | 1.0d-5 | 1.0d-5 | 1.0d-1 +zmin | 0.0100 | 0.0050 | 0.1000 +zmax | 0.0500 | 0.0100 | 0.5000 +! --- +zminLayer1 | 0.0075 | 0.0075 | 0.0075 +zminLayer2 | 0.0100 | 0.0100 | 0.0100 +zminLayer3 | 0.0500 | 0.0500 | 0.0500 +zminLayer4 | 0.1000 | 0.1000 | 0.1000 +zminLayer5 | 0.2500 | 0.2500 | 0.2500 +! --- +zmaxLayer1_lower | 0.0500 | 0.0500 | 0.0500 +zmaxLayer2_lower | 0.2000 | 0.2000 | 0.2000 +zmaxLayer3_lower | 0.5000 | 0.5000 | 0.5000 +zmaxLayer4_lower | 1.0000 | 1.0000 | 1.0000 +! --- +zmaxLayer1_upper | 0.0300 | 0.0300 | 0.0300 +zmaxLayer2_upper | 0.1500 | 0.1500 | 0.1500 +zmaxLayer3_upper | 0.3000 | 0.3000 | 0.3000 +zmaxLayer4_upper | 0.7500 | 0.7500 | 0.7500 +! ==================================================================== +minTempUnloading | 270.16 | 260.16 | 273.16 +minWindUnloading | 0.0000 | 0.0000 | 10.000 +rateTempUnloading | 1.87d+5 | 1.0d+5 | 3.0d+5 +rateWindUnloading | 1.56d+5 | 1.0d+5 | 3.0d+5 +! history Mon Jul 20 16:08:18 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/mizoguchi1990/summa_fileManager_mizoguchi.txt \ No newline at end of file diff --git a/utils/laugh_tests/mizoguchi1990/settings/summa_zParamTrial_mizoguchi.nc b/utils/laugh_tests/mizoguchi1990/settings/summa_zParamTrial_mizoguchi.nc new file mode 100644 index 0000000000000000000000000000000000000000..0fd038b542c8c656ca15554a1b65cf8f1f18063f Binary files /dev/null and b/utils/laugh_tests/mizoguchi1990/settings/summa_zParamTrial_mizoguchi.nc differ diff --git a/utils/laugh_tests/mizoguchi1990/verification_data/mizoguchi1990_G1-1_timestep.nc b/utils/laugh_tests/mizoguchi1990/verification_data/mizoguchi1990_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..4d093bfd5df8ed7896fc35dc10852885bc3a5906 Binary files /dev/null and b/utils/laugh_tests/mizoguchi1990/verification_data/mizoguchi1990_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/mizoguchi1990/verification_data/runinfo.txt b/utils/laugh_tests/mizoguchi1990/verification_data/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..5cb0c6864c9416849bb5eb3648b44940ab387d6b --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/verification_data/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=16 - hh=19 - mi=08 - ss=48.977 diff --git a/utils/laugh_tests/mizoguchi1990/verify_mizoguchi.py b/utils/laugh_tests/mizoguchi1990/verify_mizoguchi.py new file mode 100644 index 0000000000000000000000000000000000000000..738119a37751c662d0193ae9c617edd256815f7e --- /dev/null +++ b/utils/laugh_tests/mizoguchi1990/verify_mizoguchi.py @@ -0,0 +1,112 @@ +from os import listdir +from os.path import isfile, join +from pathlib import Path +import xarray as xr +import numpy as np + + +def verify(verified_data_path, data_to_compare_path, output_variables, numHRU): + try: + verified_dataset = xr.open_dataset(verified_data_path) + to_compare_dataset = xr.open_dataset(data_to_compare_path) + except FileNotFoundError: + print("Check the variables \'verified_data_path\' and \'data_to_compare_path\'. They may not point to the correct output files or the output filenames may have changed.") + exit() + + # Get the HRUs from the dataset into a list + for iHRU in range(0, numHRU): + verified_hru = verified_dataset.isel(hru=iHRU).copy() + hru_to_compare = to_compare_dataset.isel(hru=iHRU).copy() + + for var in output_variables: + try: + if len(verified_hru[var].values) != len(hru_to_compare[var].values): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_hru[var].values)) + print(" hru_to_compare = ", len(hru_to_compare[var].values)) + + verified_data = [] + to_verify_data = [] + if (verified_hru[var].values.ndim > 1): + # 2D output case + for list in verified_hru[var].values: + for data in list: + verified_data.append(data) + + for list in hru_to_compare[var].values: + for data in list: + to_verify_data.append(data) + + else: + # 1D output case + for data in verified_hru[var].values: + verified_data.append(data) + + for data in hru_to_compare[var].values: + to_verify_data.append(data) + + + # check length + if len(verified_data) != len(to_verify_data): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_data)) + print(" hru_to_compare = ", len(to_verify_data)) + + # check values + for elem in range(0, len(verified_data)): + if verified_data[elem] != to_verify_data[elem]: + print("variable -",var, "has different values at", elem) + print(" verified_hru = ", verified_data[elem]) + print(" hru_to_compare = ", to_verify_data[elem]) + break + + except TypeError: + print("variable - ", var, "Cannot be compared with len") + print(" verified_hru = ",verified_hru[var].values) + print(" hru_to_compare = ", hru_to_compare[var].values) + + +numHRU = 1 + +time = "time" +nSnow = "nSnow" +nSoil = "nSoil" +nLayers = "nLayers" +mLayerHeight = "mLayerHeight" +iLayerLiqFluxSoil = "iLayerLiqFluxSoil" +mLayerDepth = "mLayerDepth" +mLayerVolFracIce = "mLayerVolFracIce" +mLayerVolFracLiq = "mLayerVolFracLiq" +mLayerMatricHead = "mLayerMatricHead" +mLayerTranspire = "mLayerTranspire" +mLayerBaseflow = "mLayerBaseflow" +mLayerCompress = "mLayerCompress" +iLayerNrgFlux = "iLayerNrgFlux" +basin__TotalArea = "basin__TotalArea" +scalarGroundEvaporation = "scalarGroundEvaporation" +scalarSoilBaseflow = "scalarSoilBaseflow" +scalarSoilDrainage = "scalarSoilDrainage" +scalarInfiltration = "scalarInfiltration" +scalarSnowDrainage = "scalarSnowDrainage" +scalarSnowSublimation = "scalarSnowSublimation" +scalarThroughfallRain = "scalarThroughfallRain" +scalarThroughfallSnow = "scalarThroughfallSnow" +scalarRainfall = "scalarRainfall" +scalarSnowfall = "scalarSnowfall" +scalarRainPlusMelt = "scalarRainPlusMelt" +pptrate = "pptrate" +averageRoutedRunoff = "averageRoutedRunoff" +scalarSWE = "scalarSWE" +fieldCapacity = "fieldCapacity" + +output_variables = [time, nSnow, nSoil, nLayers, mLayerHeight, iLayerLiqFluxSoil, \ + mLayerDepth, mLayerVolFracIce, mLayerVolFracLiq, mLayerMatricHead, mLayerTranspire, \ + mLayerBaseflow, mLayerCompress, iLayerNrgFlux, basin__TotalArea, scalarGroundEvaporation, \ + scalarSoilBaseflow, scalarSoilDrainage, scalarInfiltration, scalarSnowDrainage, \ + scalarSnowSublimation, scalarThroughfallRain, scalarThroughfallSnow, scalarRainfall, \ + scalarSnowfall, scalarRainPlusMelt, pptrate, averageRoutedRunoff, \ + scalarSWE, fieldCapacity] + +verified_data_path = Path("./verification_data/mizoguchi1990_G1-1_timestep.nc") +data_to_compare_path = Path("./output/mizoguchi1990GRU1-1_timestep.nc") +verify(verified_data_path, data_to_compare_path, output_variables, numHRU) \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/config/exp1/Summa_Actors_Settings.json b/utils/laugh_tests/vanderborght2005/config/exp1/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..ffded0d780cf2e769d791e5e4ea6fbc5e80d672b --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/config/exp1/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp1.txt", + "outputCSV": false, + "csvPath": "/scratch/kck540/csv/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/config/exp2/Summa_Actors_Settings.json b/utils/laugh_tests/vanderborght2005/config/exp2/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..02070005214c2425b46f389847b08b5c5b196f1b --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/config/exp2/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp2.txt", + "outputCSV": false, + "csvPath": "/scratch/kck540/csv/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/config/exp3/Summa_Actors_Settings.json b/utils/laugh_tests/vanderborght2005/config/exp3/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..32e926578fc8e95c832cdc400c2e3d7ac1c76633 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/config/exp3/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/Summa-Actors/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp3.txt", + "outputCSV": false, + "csvPath": "/scratch/kck540/csv/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/forcing_data/vanderborght2005_forcing.nc b/utils/laugh_tests/vanderborght2005/forcing_data/vanderborght2005_forcing.nc new file mode 100644 index 0000000000000000000000000000000000000000..c9d016e5d7e44c240f8982338c7c4a09714a5e0e Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/forcing_data/vanderborght2005_forcing.nc differ diff --git a/utils/laugh_tests/vanderborght2005/output/runinfo.txt b/utils/laugh_tests/vanderborght2005/output/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..fdd94f435172d545130027b4588888294a90c698 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/output/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=16 - hh=19 - mi=26 - ss=57.317 diff --git a/utils/laugh_tests/vanderborght2005/output/vanderborght2005_exp1GRU1-1_timestep.nc b/utils/laugh_tests/vanderborght2005/output/vanderborght2005_exp1GRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..389efb9d6fdd3efa2fce4c47f99dbb34e9164bbf Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/output/vanderborght2005_exp1GRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/vanderborght2005/output/vanderborght2005_exp2GRU1-1_timestep.nc b/utils/laugh_tests/vanderborght2005/output/vanderborght2005_exp2GRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..9ed72de5cbe91cc37bbea9af33127f011e576243 Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/output/vanderborght2005_exp2GRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/vanderborght2005/output/vanderborght2005_exp3GRU1-1_timestep.nc b/utils/laugh_tests/vanderborght2005/output/vanderborght2005_exp3GRU1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..06a160724b61e8833821c158c2d00e720e21db49 Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/output/vanderborght2005_exp3GRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/vanderborght2005/run_test_summa.sh b/utils/laugh_tests/vanderborght2005/run_test_summa.sh new file mode 100755 index 0000000000000000000000000000000000000000..afdec1fddfbb3ac82ee20da754ae290f2ee64782 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/run_test_summa.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp1.txt +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp2.txt +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp3.txt \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/run_test_summa_actors.sh b/utils/laugh_tests/vanderborght2005/run_test_summa_actors.sh new file mode 100755 index 0000000000000000000000000000000000000000..632f2091eb64db4bd2c9758f4cd88002441ec98a --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/run_test_summa_actors.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/vanderborght2005/config/exp1 +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/vanderborght2005/config/exp2 +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/vanderborght2005/config/exp3 \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/settings/GENPARM.TBL b/utils/laugh_tests/vanderborght2005/settings/GENPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..17fc9172ba276dffbbb9dfa90cdcbc4eecc1070c --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/GENPARM.TBL @@ -0,0 +1,36 @@ +General Parameters +SLOPE_DATA +9 +0.1 +0.6 +1.0 +0.35 +0.55 +0.8 +0.63 +0.0 +0.0 +SBETA_DATA +-2.0 +FXEXP_DATA +2.0 +CSOIL_DATA +2.00E+6 +SALP_DATA +2.6 +REFDK_DATA +2.0E-6 +REFKDT_DATA +3.0 +FRZK_DATA +0.15 +ZBOT_DATA +-8.0 +CZIL_DATA +0.1 +SMLOW_DATA +0.5 +SMHIGH_DATA +3.0 +LVCOEF_DATA +0.5 diff --git a/utils/laugh_tests/vanderborght2005/settings/MPTABLE.TBL b/utils/laugh_tests/vanderborght2005/settings/MPTABLE.TBL new file mode 100644 index 0000000000000000000000000000000000000000..0f0c59c02cc2f03d2a168b8523ffa793773861a7 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/MPTABLE.TBL @@ -0,0 +1,284 @@ +&noah_mp_usgs_veg_categories + VEG_DATASET_DESCRIPTION = "USGS" + NVEG = 27 +/ +&noah_mp_usgs_parameters + ! NVEG = 27 + ! 1: Urban and Built-Up Land + ! 2: Dryland Cropland and Pasture + ! 3: Irrigated Cropland and Pasture + ! 4: Mixed Dryland/Irrigated Cropland and Pasture + ! 5: Cropland/Grassland Mosaic + ! 6: Cropland/Woodland Mosaic + ! 7: Grassland + ! 8: Shrubland + ! 9: Mixed Shrubland/Grassland + ! 10: Savanna + ! 11: Deciduous Broadleaf Forest + ! 12: Deciduous Needleleaf Forest + ! 13: Evergreen Broadleaf Forest + ! 14: Evergreen Needleleaf Forest + ! 15: Mixed Forest + ! 16: Water Bodies + ! 17: Herbaceous Wetland + ! 18: Wooded Wetland + ! 19: Barren or Sparsely Vegetated + ! 20: Herbaceous Tundra + ! 21: Wooded Tundra + ! 22: Mixed Tundra + ! 23: Bare Ground Tundra + ! 24: Snow or Ice + ! 25: Playa + ! 26: Lava + ! 27: White Sand + + ISURBAN = 1 + ISWATER = 16 + ISBARREN = 19 + ISSNOW = 24 + EBLFOREST = 13 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.00, 0.06, 0.06, 0.06, 0.06, 0.15, 0.06, 0.06, 0.06, 0.86, 0.80, 0.85, 1.10, 1.09, 0.80, 0.00, 0.06, 0.05, 0.00, 0.04, 0.06, 0.06, 0.03, 0.00, 0.01, 0.00, 0.00, + HVT = 15.0, 0.50, 0.50, 0.50, 0.50, 1.25, 0.50, 0.50, 0.50, 16.0, 16.0, 18.0, 20.0, 20.0, 16.0, 0.00, 0.50, 0.80, 0.00, 0.50, 0.80, 0.80, 0.50, 0.00, 0.10, 0.00, 0.00, + HVB = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 3.00, 3.50, 3.00, 4.00, 3.50, 3.00, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + DEN = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, + RC = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.00, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.07, 0.10, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.00, 0.11, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.35, 0.45, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.00, 0.58, 0.45, 0.00, 0.45, 0.45, 0.45, 0.45, 0.00, 0.45, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.00, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.00, 0.36, 0.16, 0.00, 0.16, 0.16, 0.16, 0.16, 0.00, 0.16, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.00, 0.58, 0.39, 0.00, 0.39, 0.39, 0.39, 0.39, 0.00, 0.39, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.00, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.07, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, + 0.00, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.10, 0.10, 0.25, 0.25, 0.10, 0.25, 0.10, 0.25, 0.00, 0.25, 0.25, 0.00, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.000, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.220, 0.001, 0.000, 0.220, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + 0.000, 0.380, 0.380, 0.380, 0.380, 0.380, 0.380, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.380, 0.001, 0.000, 0.380, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + + XL = 0.000, -0.30, -0.30, -0.30, -0.30, -0.30, -0.30, 0.010, 0.250, 0.010, 0.250, 0.010, 0.010, 0.010, 0.250, 0.000, -0.30, 0.250, 0.000, -0.30, 0.250, 0.250, 0.250, 0.000, 0.250, 0.000, 0.000, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.0, 1.6, 1.8, 1.2, 1.2, 1.30, 0.50, 0.65, 0.70, 0.65, 0.55, 0.2, 0.55, 0.5, 0.5, 0.0, 1.4, 1.4, 0.0, 1.2, 1.3, 1.4, 1.0, 0.0, 1.0, 0.0, 0.0, + DILEFC= 0.00, 0.50, 0.50, 0.50, 0.35, 0.20, 0.20, 0.20, 0.50, 0.50, 0.60, 1.80, 0.50, 1.20, 0.80, 0.00, 0.40, 0.40, 0.00, 0.40, 0.30, 0.40, 0.30, 0.00, 0.30, 0.00, 0.00, + DILEFW= 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.20, 0.50, 0.20, 0.20, 4.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.20, 0.20, 0.00, 0.20, 0.00, 0.00, + RMF25 = 0.00, 1.00, 1.40, 1.45, 1.45, 1.45, 1.80, 0.26, 0.26, 0.80, 3.00, 4.00, 0.65, 3.00, 3.00, 0.00, 3.20, 3.20, 0.00, 3.20, 3.00, 3.00, 3.00, 0.00, 3.00, 0.00, 0.00, + SLA = 60, 80, 80, 80, 80, 80, 60, 60, 60, 50, 80, 80, 80, 80, 80, 0, 80, 80, 0, 80, 80, 80, 80, 0, 80, 0, 0, + FRAGR = 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + TMIN = 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 268, 273, 265, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + VCMX25= 0.00, 80.0, 80.0, 80.0, 60.0, 70.0, 40.0, 40.0, 40.0, 40.0, 60.0, 60.0, 60.0, 50.0, 55.0, 0.00, 50.0, 50.0, 0.00, 50.0, 50.0, 50.0, 50.0, 0.00, 50.0, 0.00, 0.00, + TDLEF = 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 268, 278, 278, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + BP = 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 1.E15, + MP = 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0., 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.00, + RMS25 = 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.32, 0.10, 0.64, 0.30, 0.90, 0.80, 0.00, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, + RMR25 = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.20, 0.00, 0.00, 0.01, 0.01, 0.05, 0.05, 0.36, 0.03, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 0.00, + WDPOOL= 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, + WRRAT = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 30.0, 30.0, 30.0, 30.0, 30.0, 0.00, 0.00, 30.0, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, + MRP = 0.00, 0.23, 0.23, 0.23, 0.23, 0.23, 0.17, 0.19, 0.19, 0.40, 0.40, 0.37, 0.23, 0.37, 0.30, 0.00, 0.17, 0.40, 0.00, 0.17, 0.23, 0.20, 0.00, 0.00, 0.20, 0.00, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.3, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.4, 0.2, 0.3, 0.1, 0.4, 0.7, 0.5, 0.5, 0.4, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.3, 0.3, 0.8, 0.2, 0.5, 0.1, 0.9, 1.3, 0.5, 0.5, 0.4, 0.0, 0.4, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.5, 0.2, 1.3, 0.1, 0.8, 0.1, 1.2, 1.2, 0.5, 0.6, 0.5, 0.0, 0.6, 0.6, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.4, 0.1, 1.1, 0.1, 0.5, 0.1, 1.6, 1.0, 0.5, 0.6, 0.5, 0.0, 0.5, 0.5, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.4, 0.1, 0.2, 0.1, 1.4, 0.8, 0.5, 0.7, 0.6, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.6, 0.6, 0.5, 0.6, 0.5, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.4, 0.5, 0.5, 0.5, 0.3, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + + LAIM = 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.5, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 0.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.0, 3.5, 1.6, 1.0, 0.0, 0.6, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.7, 0.7, 0.7, 0.5, 0.7, 1.0, 1.5, 1.0, 1.2, 0.6, 3.5, 1.6, 1.0, 0.0, 0.7, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 1.2, 1.2, 1.2, 1.5, 1.2, 1.0, 2.0, 1.0, 3.0, 1.2, 3.5, 5.3, 2.3, 0.0, 1.2, 0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.0, 3.0, 3.0, 3.0, 2.5, 3.0, 1.0, 2.5, 1.0, 4.7, 2.0, 3.5, 5.5, 3.5, 0.0, 3.0, 0.7, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 3.5, 3.5, 3.5, 3.5, 3.5, 1.0, 3.0, 1.0, 4.5, 2.6, 3.5, 5.3, 4.3, 0.0, 3.5, 1.7, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 1.5, 1.5, 1.5, 3.5, 1.5, 1.0, 2.5, 1.0, 3.4, 1.7, 3.5, 5.3, 3.3, 0.0, 1.5, 3.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.5, 0.7, 0.7, 0.7, 2.0, 0.7, 1.0, 1.5, 1.0, 1.2, 1.0, 3.5, 4.2, 2.2, 0.0, 0.7, 2.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 1.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.5, 3.5, 2.2, 1.2, 0.0, 0.6, 1.6, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.2, 3.5, 2.2, 1.2, 0.0, 0.5, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 2.2, 1.2, 0.0, 0.4, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + SLAREA=0.0228,0.0200,0.0200,0.0295,0.0223,0.0277,0.0060,0.0227,0.0188,0.0236,0.0258,0.0200,0.0200,0.0090,0.0223,0.0422,0.0390, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 41.87, 0.00, 0.00, 2.52, 0.04, 17.11, 0.02, 21.62, 0.11, 22.80, 46.86, 0.00, 0.00, 0.46, 30.98, 2.31, 1.63, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.98, 0.00, 0.00, 0.16, 0.09, 0.28, 0.05, 0.92, 0.22, 0.59, 0.38, 0.00, 0.00, 3.34, 0.96, 1.47, 1.07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.82, 0.00, 0.00, 0.23, 0.05, 0.81, 0.03, 1.73, 1.26, 1.37, 1.84, 0.00, 0.00, 1.85, 1.84, 1.70, 1.21, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ + + +&noah_mp_modis_veg_categories + VEG_DATASET_DESCRIPTION = "modified igbp modis noah" + NVEG = 20 +/ + +&noah_mp_modis_parameters +! 1 'Evergreen Needleleaf Forest' -> USGS 14 +! 2, 'Evergreen Broadleaf Forest' -> USGS 13 +! 3, 'Deciduous Needleleaf Forest' -> USGS 12 +! 4, 'Deciduous Broadleaf Forest' -> USGS 11 +! 5, 'Mixed Forests' -> USGS 15 +! 6, 'Closed Shrublands' -> USGS 8 "shrubland" +! 7, 'Open Shrublands' -> USGS 9 "shrubland/grassland" +! 8, 'Woody Savannas' -> USGS 8 "shrubland" +! 9, 'Savannas' -> USGS 10 +! 10, 'Grasslands' -> USGS 7 +! 11 'Permanent wetlands' -> avg of USGS 17 and 18 (herb. wooded wetland) +! 12, 'Croplands' -> USGS 2 "dryland cropland" +! 13, 'Urban and Built-Up' -> USGS 1 +! 14 'cropland/natural vegetation mosaic' -> USGS 5 "cropland/grassland" +! 15, 'Snow and Ice' -> USGS 24 +! 16, 'Barren or Sparsely Vegetated' -> USGS 19 +! 17, 'Water' -> USGS 16 +! 18, 'Wooded Tundra' -> USGS 21 +! 19, 'Mixed Tundra' -> USGS 22 +! 20, 'Barren Tundra' -> USGS 23 + + ISURBAN = 13 + ISWATER = 17 + ISBARREN = 16 + ISSNOW = 15 + EBLFOREST = 2 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.09, 1.10, 0.85, 0.80, 0.80, 0.06, 0.06, 0.06, 0.86, 0.06, 0.055, 0.06, 1.00, 0.06, 0.00, 0.00, 0.00, 0.06, 0.06, 0.03, +! Z0MVT = 0.50, 0.50, 0.50, 0.50, 0.50, 0.05, 0.06, 0.05, 0.15, 0.12, 0.30, 0.15, 0.80, 0.14, 0.00, 0.01, 0.00, 0.30, 0.15, 0.10, + HVT = 20.0, 20.0, 18.0, 16.0, 16.0, 0.50, 0.50, 0.50, 16.0, 0.50, 0.65, 0.50, 15.0, 0.50, 0.00, 0.00, 0.00, 0.80, 0.80, 0.50, + HVB = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 5.00, 0.05, 0.075, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + DEN = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, + RC = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + 0.35, 0.45, 0.35, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.58, 0.515, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.45, 0.45, 0.45, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, 0.00, 0.36, 0.00, 0.00, 0.00, 0.16, 0.16, 0.16, + 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.58, 0.485, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.39, 0.39, 0.39, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, 0.00, 0.07, 0.00, 0.00, 0.00, 0.05, 0.05, 0.05, + 0.10, 0.25, 0.10, 0.25, 0.25, 0.10, 0.10, 0.10, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, 0.00, 0.25, 0.25, 0.25, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.220, 0.1105, 0.220, 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.380, 0.1905, 0.380, 0.000, 0.380, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + + XL = 0.010, 0.010, 0.010, 0.250, 0.250, 0.010, 0.250, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, +! CWPVT = 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, 0.70, 0.65, 0.65, 0.50, 1.4, 1.6, 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, 1.4, 1.0, + DILEFC= 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, 0.50, 0.20, 0.50, 0.20, 0.4, 0.50, 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, 0.40, 0.30, + DILEFW= 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, 0.20, 0.20, + RMF25 = 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, + SLA = 80, 80, 80, 80, 80, 60, 60, 60, 50, 60, 80, 80, 60, 80, 0, 0, 0, 80, 80, 80, + FRAGR = 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, 0.10, 0.10, + TMIN = 265, 273, 268, 273, 268, 273, 273, 273, 273, 273, 268, 273, 0, 273, 0, 0, 0, 268, 268, 268, + VCMX25= 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, 50.0, 50.0, + TDLEF = 278, 278, 268, 278, 268, 278, 278, 278, 278, 278, 268, 278, 278, 278, 0, 0, 0, 268, 268, 268, + BP = 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, + MP = 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, 0.06, 0.06, + RMS25 = 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.00, + RMR25 = 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, 1.5, 1.5, + WDPOOL= 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, + WRRAT = 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, + MRP = 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, 0.19, 0.19, 0.40, 0.17, 0.285, 0.23, 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, 0.20, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.3, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.5, 0.5, 0.7, 0.4, 0.4, 0.2, 0.3, 0.2, 0.1, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 1.3, 0.9, 0.4, 0.2, 0.5, 0.2, 0.1, 0.8, 0.4, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 1.2, 1.2, 0.5, 0.1, 0.8, 0.1, 0.1, 1.3, 0.6, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.6, 0.5, 1.0, 1.6, 0.5, 0.1, 0.5, 0.1, 0.1, 1.1, 0.5, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.7, 0.5, 0.8, 1.4, 0.6, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 0.6, 0.6, 0.5, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 0.5, 0.4, 0.3, 0.1, 0.2, 0.1, 0.1, 0.4, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + + LAIM = 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.4, 0.3, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.45, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.3, 1.0, 1.0, 1.0, 1.0, 1.0, 0.6, 0.5, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.6, 1.2, 1.0, 1.0, 1.5, 1.0, 1.0, 0.7, 0.55, 0.0, 0.0, 0.7, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 5.3, 4.5, 1.2, 3.0, 2.3, 1.0, 2.0, 1.0, 1.0, 1.2, 0.85, 1.0, 0.0, 1.2, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 5.5, 4.5, 2.0, 4.7, 3.5, 1.0, 2.5, 1.0, 1.0, 3.0, 1.85, 2.0, 0.0, 3.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 5.3, 4.5, 2.6, 4.5, 4.3, 1.0, 3.0, 1.0, 1.0, 3.5, 2.6, 3.0, 0.0, 3.5, 0.0, 0.0, 0.0, 2.0, 2.0, 0.0, + 5.3, 4.5, 1.7, 3.4, 3.3, 1.0, 2.5, 1.0, 1.0, 1.5, 2.25, 3.0, 0.0, 1.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 4.2, 4.5, 1.0, 1.2, 2.2, 1.0, 1.5, 1.0, 1.0, 0.7, 1.6, 1.5, 0.0, 0.7, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 2.2, 4.5, 0.5, 0.3, 1.2, 1.0, 1.0, 1.0, 1.0, 0.6, 1.1, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 2.2, 4.5, 0.2, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.5, 0.65, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2.2, 4.5, 0.0, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.4, 0.4, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + +! LAIM = 5.1, 3.3, 0.0, 1.9, 3.0, 1.0, 0.8, 0.5, 0.5, 0.7, 0.3, 1.8, 0.0, 2.4, 0.0, 0.0, 0.0, 0.6, 0.7, 0.0, +! 5.0, 3.6, 0.0, 1.9, 2.9, 1.0, 0.6, 1.0, 1.0, 0.7, 0.45, 1.9, 0.0, 2.6, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.1, 4.4, 0.0, 2.1, 3.3, 1.0, 0.8, 1.8, 1.7, 1.1, 0.5, 2.6, 0.0, 2.9, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.3, 5.4, 0.6, 2.5, 4.0, 1.0, 0.9, 2.6, 2.9, 1.7, 0.55, 3.9, 0.0, 3.4, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.9, 6.2, 1.2, 3.1, 5.0, 1.0, 1.5, 3.4, 3.6, 2.5, 0.85, 5.2, 0.0, 4.0, 0.0, 0.0, 0.0, 0.8, 1.0, 0.0, +! 6.3, 6.4, 2.0, 3.3, 5.4, 1.0, 2.1, 3.6, 3.5, 2.7, 1.85, 5.6, 0.0, 4.2, 0.0, 0.0, 0.0, 2.0, 2.3, 0.0, +! 6.4, 5.9, 2.6, 3.3, 5.4, 1.0, 2.6, 3.4, 2.9, 2.8, 2.6, 5.3, 0.0, 4.1, 0.0, 0.0, 0.0, 3.3, 3.3, 0.0, +! 6.1, 5.6, 1.7, 3.1, 5.0, 1.0, 2.4, 3.2, 2.7, 2.4, 2.25, 4.5, 0.0, 3.8, 0.0, 0.0, 0.0, 3.3, 3.0, 0.0, +! 6.0, 5.3, 1.0, 2.9, 4.8, 1.0, 2.2, 2.9, 2.4, 2.1, 1.6, 4.1, 0.0, 3.7, 0.0, 0.0, 0.0, 2.8, 3.0, 0.0, +! 5.5, 4.7, 0.5, 2.6, 4.1, 1.0, 1.6, 2.3, 1.8, 1.7, 1.1, 3.2, 0.0, 3.2, 0.0, 0.0, 0.0, 1.4, 1.4, 0.0, +! 5.2, 4.0, 0.2, 2.2, 3.4, 1.0, 1.0, 1.5, 1.4, 1.3, 0.65, 2.3, 0.0, 2.7, 0.0, 0.0, 0.0, 0.5, 0.7, 0.0, +! 5.1, 3.2, 0.0, 1.9, 3.0, 1.0, 0.9, 0.7, 0.7, 0.8, 0.4, 1.7, 0.0, 2.4, 0.0, 0.0, 0.0, 0.8, 0.7, 0.0, + + SLAREA=0.0090, 0.0200, 0.0200, 0.0258, 0.0223, 0.0227, 0.0188, 0.0227, 0.0236, 0.0060, 0.0295, 0.0200, 0.0228, 0.0223, 0.02, 0.02, 0.0422, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 0.46, 0.00, 0.00, 46.86, 30.98, 21.62, 0.11, 21.62, 22.80, 0.02, 0.815, 0.00, 41.87, 0.04, 0.0, 0.0, 2.31, 0.0, 0.0, 0.0, + 3.34, 0.00, 0.00, 0.38, 0.96, 0.92, 0.22, 0.92, 0.59, 0.05, 0.535, 0.00, 0.98, 0.09, 0.0, 0.0, 1.47, 0.0, 0.0, 0.0, + 1.85, 0.00, 0.00, 1.84, 1.84, 1.73, 1.26, 1.73, 1.37, 0.03, 0.605, 0.00, 1.82, 0.05, 0.0, 0.0, 1.70, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ diff --git a/utils/laugh_tests/vanderborght2005/settings/Model_Output.txt b/utils/laugh_tests/vanderborght2005/settings/Model_Output.txt new file mode 100644 index 0000000000000000000000000000000000000000..d27936ba2357ecbd9a594ab0b9dcca44917333ff --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/Model_Output.txt @@ -0,0 +1,40 @@ +! --------- +! model variables +! --------- +nSnow | 1 +nSoil | 1 +pptrate | 1 +airtemp | 1 +scalarRainPlusMelt | 1 +scalarSWE | 1 +scalarThroughfallSnow | 1 +scalarThroughfallRain | 1 +scalarSnowSublimation | 1 +scalarInfiltration | 1 +scalarExfiltration | 1 +scalarSurfaceRunoff | 1 +scalarSurfaceTemp | 1 +scalarSenHeatTotal | 1 +scalarLatHeatTotal | 1 +mLayerHeight | 1 +iLayerHeight | 1 +iLayerLiqFluxSoil | 1 +mLayerTemp | 1 +mLayerDepth | 1 +mLayerLiqFluxSoil | 1 +mLayerVolFracIce | 1 +mLayerVolFracLiq | 1 +mLayerVolFracWat | 1 +mLayerMatricHead | 1 +basin__TotalArea | 1 +basin__SurfaceRunoff | 1 +basin__ColumnOutflow | 1 +basin__AquiferStorage | 1 +basin__AquiferRecharge | 1 +basin__AquiferBaseflow | 1 +basin__AquiferTranspire | 1 +averageInstantRunoff | 1 +averageRoutedRunoff | 1 +fieldCapacity | 1 +scalarLAI | 1 +scalarSAI | 1 diff --git a/utils/laugh_tests/vanderborght2005/settings/SOILPARM.TBL b/utils/laugh_tests/vanderborght2005/settings/SOILPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..b87d1bae502460279b1e6389ff34c2d3ce842510 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/SOILPARM.TBL @@ -0,0 +1,59 @@ +Soil Parameters +STAS +19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 2.79, 0.010, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.010, 0.92, 'SAND' +2, 4.26, 0.028, -1.044, 0.421, 0.383, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.82, 'LOAMY SAND' +3, 4.74, 0.047, -0.569, 0.434, 0.383, 0.141, 5.23E-6, 0.805E-5, 0.047, 0.60, 'SANDY LOAM' +4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.25, 'SILT LOAM' +5, 5.33, 0.084, 0.162, 0.476, 0.383, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.10, 'SILT' +6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.40, 'LOAM' +7, 6.66, 0.067, -1.491, 0.404, 0.314, 0.135, 4.45E-6, 0.990E-5, 0.067, 0.60, 'SANDY CLAY LOAM' +8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.04E-6, 0.237E-4, 0.120, 0.10, 'SILTY CLAY LOAM' +9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 0.113E-4, 0.103, 0.35, 'CLAY LOAM' +10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 0.187E-4, 0.100, 0.52, 'SANDY CLAY' +11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 0.964E-5, 0.126, 0.10, 'SILTY CLAY' +12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 0.112E-4, 0.138, 0.25, 'CLAY' +13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 'WATER' +15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.07, 'BEDROCK' +16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.25, 'OTHER(land-ice)' +17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 'LAVA' +19, 2.79, 0.01, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.01, 0.92, 'WHITE SAND' +Soil Parameters +STAS-RUC +19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 4.05, 0.045, 1.47, 0.395, 0.236, 0.121, 1.76E-4, 0.608E-6, 0.068, 0.92, 'SAND' +2, 4.38, 0.057, 1.41, 0.410, 0.383, 0.090, 1.56E-4, 0.514E-5, 0.075, 0.82, 'LOAMY SAND' +3, 4.90, 0.065, 1.34, 0.435, 0.383, 0.218, 3.47E-5, 0.805E-5, 0.114, 0.60, 'SANDY LOAM' +4, 5.30, 0.067, 1.27, 0.485, 0.360, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.25, 'SILT LOAM' +5, 5.30, 0.034, 1.27, 0.485, 0.383, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.10, 'SILT' +6, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.40, 'LOAM' +7, 7.12, 0.100, 1.18, 0.420, 0.314, 0.299, 6.30E-6, 0.990E-5, 0.175, 0.60, 'SANDY CLAY LOAM' +8, 7.75, 0.089, 1.32, 0.477, 0.387, 0.356, 1.70E-6, 0.237E-4, 0.218, 0.10, 'SILTY CLAY LOAM' +9, 8.52, 0.095, 1.23, 0.476, 0.382, 0.630, 2.45E-6, 0.113E-4, 0.250, 0.35, 'CLAY LOAM' +10, 10.40, 0.100, 1.18, 0.426, 0.338, 0.153, 2.17E-6, 0.187E-4, 0.219, 0.52, 'SANDY CLAY' +11, 10.40, 0.070, 1.15, 0.492, 0.404, 0.490, 1.03E-6, 0.964E-5, 0.283, 0.10, 'SILTY CLAY' +12, 11.40, 0.068, 1.09, 0.482, 0.412, 0.405, 1.28E-6, 0.112E-4, 0.286, 0.25, 'CLAY' +13, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 'WATER' +15, 4.05, 0.004, 2.03, 0.200, 0.17, 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 'BEDROCK' +16, 4.90, 0.065, 2.10, 0.435, 0.283, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 'OTHER(land-ice)' +17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.060, 0.52, 'LAVA' +19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 'WHITE SAND' +Soil Parameters +ROSETTA +12,1 'theta_res theta_sat vGn_alpha vGn_n k_soil BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1 0.098 0.459 -1.496 1.253 1.70799e-06 1.40 0.068 1.09 0.482 0.412 0.405 1.28E-6 0.112E-4 0.286 0.25 'CLAY' +2 0.079 0.442 -1.581 1.416 9.47297e-07 8.52 0.095 1.23 0.476 0.382 0.630 2.45E-6 0.113E-4 0.250 0.35 'CLAY LOAM' +3 0.061 0.399 -1.112 1.472 1.39472e-06 5.39 0.078 1.21 0.451 0.329 0.478 6.95E-6 0.143E-4 0.155 0.40 'LOAM' +4 0.049 0.390 -3.475 1.746 1.21755e-05 4.38 0.057 1.41 0.410 0.383 0.090 1.56E-4 0.514E-5 0.075 0.82 'LOAMY SAND' +5 0.053 0.375 -3.524 3.177 7.43852e-05 4.05 0.045 1.47 0.395 0.236 0.121 1.76E-4 0.608E-6 0.068 0.92 'SAND' +6 0.117 0.385 -3.342 1.208 1.31367e-06 0.40 0.100 1.18 0.426 0.338 0.153 2.17E-6 0.187E-4 0.219 0.52 'SANDY CLAY' +7 0.063 0.384 -2.109 1.330 1.52576e-06 7.12 0.100 1.18 0.420 0.314 0.299 6.30E-6 0.990E-5 0.175 0.60 'SANDY CLAY LOAM' +8 0.039 0.387 -2.667 1.449 4.43084e-06 4.90 0.065 1.34 0.435 0.383 0.218 3.47E-5 0.805E-5 0.114 0.60 'SANDY LOAM' +9 0.050 0.489 -0.658 1.679 5.06391e-06 5.30 0.034 1.27 0.485 0.383 0.786 7.20E-6 0.239E-4 0.179 0.10 'SILT' +10 0.111 0.481 -1.622 1.321 1.11298e-06 0.40 0.070 1.15 0.492 0.404 0.490 1.03E-6 0.964E-5 0.283 0.10 'SILTY CLAY' +11 0.090 0.482 -0.839 1.521 1.28673e-06 7.75 0.089 1.32 0.477 0.387 0.356 1.70E-6 0.237E-4 0.218 0.10 'SILTY CLAY LOAM' +12 0.065 0.439 -0.506 1.663 2.11099e-06 5.30 0.067 1.27 0.485 0.360 0.786 7.20E-6 0.239E-4 0.179 0.25 'SILT LOAM' diff --git a/utils/laugh_tests/vanderborght2005/settings/VEGPARM.TBL b/utils/laugh_tests/vanderborght2005/settings/VEGPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..be03224ef59386e2503e147729ffeaef9aa12553 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/VEGPARM.TBL @@ -0,0 +1,119 @@ +Vegetation Parameters +USGS +27,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ' +1, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up Land' +2, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Dryland Cropland and Pasture' +3, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 'Irrigated Cropland and Pasture' +4, .80, 3, 40., 100., 36.25, 0.04, 66., 1.00, 4.50, .920, .985, .18, .23, .05, .15, 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'Cropland/Grassland Mosaic' +6, .80, 3, 70., 65., 44.14, 0.04, 60., 2.00, 4.00, .930, .985, .16, .20, .20, .20, 'Cropland/Woodland Mosaic' +7, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grassland' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Shrubland' +9, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Mixed Shrubland/Grassland' +10, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savanna' +11, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +12, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +13, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +14, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +15, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forest' +16, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water Bodies' +17, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 'Herbaceous Wetland' +18, .60, 2, 100., 30., 51.93, 0.02, 50., 2.00, 5.80, .950, .950, .14, .14, .40, .40, 'Wooded Wetland' +19, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +20, .60, 3, 150., 100., 42.00, 0.025, 68., 0.41, 3.35, .920, .920, .15, .20, .10, .10, 'Herbaceous Tundra' +21, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +22, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +23, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Bare Ground Tundra' +24, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow or Ice' +25, .50, 1, 40., 100., 36.25, 0.02, 75., 0.01, 0.01, .890, .890, .30, .30, .01, .01, 'Playa' +26, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .880, .880, .16, .16, .15, .15, 'Lava' +27, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .830, .830, .60, .60, .01, .01, 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 +Vegetation Parameters +MODIFIED_IGBP_MODIS_NOAH +20,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX' +1 .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forests' +6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Closed Shrublands' +7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Open Shrublands' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Woody Savannas' +9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savannas' +10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grasslands' +11 .60, 2, 70., 65., 55.97 0.015 59., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 'Permanent wetlands' +12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Croplands' +13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up' +14 .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'cropland/natural vegetation mosaic' +15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow and Ice' +16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water' +18, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +19, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +20, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Barren Tundra' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +16 +NATURAL +14 +Vegetation Parameters +USGS-RUC +27,1, 'ALBEDO Z0 LEMI PC SHDFAC NROOT RS RGL HS SNUP LAI MAXALB' +1, .18, .50, .88, .40, .10, 1, 200., 999., 999.0, 0.04, 4.0, 40., 'Urban and Built-Up Land' +2, .17, .06, .92, .30, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Dryland Cropland and Pasture' +3, .18, .075, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Irrigated Cropland and Pasture' +4, .18, .065, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .18, .05, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Cropland/Grassland Mosaic' +6, .16, .20, .93, .40, .80, 3, 70., 65., 44.14, 0.04, 4.0, 60., 'Cropland/Woodland Mosaic' +7, .19, .075 .92, .40, .80, 3, 40., 100., 36.35, 0.04, 4.0, 64., 'Grassland' +8, .22, .10, .88, .40, .70, 3, 300., 100., 42.00, 0.03, 4.0, 69., 'Shrubland' +9, .20, .11, .90, .40, .70, 3, 170., 100., 39.18, 0.035, 4.0, 67., 'Mixed Shrubland/Grassland' +10, .20, .15, .92, .40, .50, 3, 70., 65., 54.53, 0.04, 4.0, 45., 'Savanna' +11, .16, .50, .93, .55, .80, 4, 100., 30., 54.53, 0.08, 4.0, 58., 'Deciduous Broadleaf Forest' +12, .14, .50, .94, .55, .70, 4, 150., 30., 47.35, 0.08, 4.0, 54., 'Deciduous Needleleaf Forest' +13, .12, .50, .95, .55, .95, 4, 150., 30., 41.69, 0.08, 4.0, 32., 'Evergreen Broadleaf Forest' +14, .12, .50, .95, .55, .70, 4, 125., 30., 47.35, 0.08, 4.0, 52., 'Evergreen Needleleaf Forest' +15, .13, .50, .94, .55, .80, 4, 125., 30., 51.93, 0.08, 4.0, 53., 'Mixed Forest' +16, .08, .0001, .98, .00, .00, 0, 100., 30., 51.75, 0.01, 4.0, 70., 'Water Bodies' +17, .14, .20, .95, .55, .60, 2, 40., 100., 60.00, 0.01, 4.0, 35., 'Herbaceous Wetland' +18, .14, .40, .95, .55, .60, 2, 100., 30., 51.93, 0.02, 4.0, 30., 'Wooded Wetland' +19, .25, .05, .85, .30, .01, 1, 999., 999., 999.0, 0.02, 4.0, 69., 'Barren or Sparsely Vegetated' +20, .15, .10, .92, .30, .60, 3, 150., 100., 42.00, 0.025, 4.0, 58., 'Herbaceous Tundra' +21, .15, .15, .93, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Wooded Tundra' +22, .15, .10, .92, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Mixed Tundra' +23, .25, .065 .85, .30, .30, 2, 200., 100., 42.00, 0.02, 4.0, 65., 'Bare Ground Tundra' +24, .55, .05, .95, .00, .00, 1, 999., 999., 999.0, 0.02, 4.0, 75., 'Snow or Ice' +25, .30, .01, .85, .30, .50, 1, 40., 100., 36.25, 0.02, 4.0, 69., 'Playa' +26, .16, .15, .85, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'Lava' +27, .60, .01, .90, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp1.txt b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp1.txt new file mode 100644 index 0000000000000000000000000000000000000000..dc9df573e90b6a5691fb24618a620dd82d262011 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp1.txt @@ -0,0 +1,22 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '1990-01-01 00:00' ! +simEndTime '1990-01-01 01:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/output/' ! output_path +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '1990-01-01' +decisionsFile 'summa_zDecisions_vanderborght2005.txt' ! decision +outputControlFile 'Model_Output.txt' ! ouput_file +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_vanderborght2005_exp1.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_vanderborght2005.nc' ! initial_cond +outFilePrefix 'vanderborght2005_exp1' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp2.txt b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp2.txt new file mode 100644 index 0000000000000000000000000000000000000000..95d7d4ce7ea59822d000c65cfcfd50b5df5e137e --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp2.txt @@ -0,0 +1,22 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '1990-01-01 00:00' ! +simEndTime '1990-01-01 01:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/output/' ! output_path +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '1990-01-01' +decisionsFile 'summa_zDecisions_vanderborght2005.txt' ! decision +outputControlFile 'Model_Output.txt' ! ouput_file +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_vanderborght2005_exp2.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_vanderborght2005.nc' ! initial_cond +outFilePrefix 'vanderborght2005_exp2' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp3.txt b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp3.txt new file mode 100644 index 0000000000000000000000000000000000000000..c0ef7a680830413df0c824370fca27b35393acb4 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_vanderborght2005_exp3.txt @@ -0,0 +1,22 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '1990-01-01 00:00' ! +simEndTime '1990-01-01 01:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/output/' ! output_path +forcingFreq 'month' ! the frequeny of forcing files (month, year) +forcingStart '1990-01-01' +decisionsFile 'summa_zDecisions_vanderborght2005.txt' ! decision +outputControlFile 'Model_Output.txt' ! ouput_file +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_vanderborght2005_exp3.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_vanderborght2005.nc' ! initial_cond +outFilePrefix 'vanderborght2005_exp3' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp1.txt b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp1.txt new file mode 100644 index 0000000000000000000000000000000000000000..9a62a876978d4834839e90d158b3a4c9fff35366 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp1.txt @@ -0,0 +1,20 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '1990-01-01 00:00' ! +simEndTime '1990-01-01 01:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/verification_data/' ! output_path +decisionsFile 'summa_zDecisions_vanderborght2005.txt' ! decision +outputControlFile 'Model_Output.txt' ! ouput_file +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_vanderborght2005_exp1.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_vanderborght2005.nc' ! initial_cond +outFilePrefix 'vanderborght2005_exp1' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp2.txt b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp2.txt new file mode 100644 index 0000000000000000000000000000000000000000..6491b089bdfdbdd1a0546ca767b88eac3271b25b --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp2.txt @@ -0,0 +1,20 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '1990-01-01 00:00' ! +simEndTime '1990-01-01 01:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/verification_data/' ! output_path +decisionsFile 'summa_zDecisions_vanderborght2005.txt' ! decision +outputControlFile 'Model_Output.txt' ! ouput_file +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_vanderborght2005_exp2.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_vanderborght2005.nc' ! initial_cond +outFilePrefix 'vanderborght2005_exp2' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp3.txt b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp3.txt new file mode 100644 index 0000000000000000000000000000000000000000..2c6bbe1aec9d3fb4685529d20673c7fdbf4c5508 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_fileManager_verify_vanderborght2005_exp3.txt @@ -0,0 +1,20 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '1990-01-01 00:00' ! +simEndTime '1990-01-01 01:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/settings/' ! setting_path +forcingPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/forcing_data/' ! input_path +outputPath '/Summa-Actors/utils/laugh_tests/vanderborght2005/verification_data/' ! output_path +decisionsFile 'summa_zDecisions_vanderborght2005.txt' ! decision +outputControlFile 'Model_Output.txt' ! ouput_file +globalHruParamFile 'summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'summa_zParamTrial_vanderborght2005_exp3.nc' ! para_trial +forcingListFile 'summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'summa_zInitialCond_vanderborght2005.nc' ! initial_cond +outFilePrefix 'vanderborght2005_exp3' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zBasinParamInfo.txt b/utils/laugh_tests/vanderborght2005/settings/summa_zBasinParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..1926fd71fbc6ce90cd4180f652ae414885e4b611 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_zBasinParamInfo.txt @@ -0,0 +1,35 @@ +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! ***** DEFINITION OF BASIN PARAMETERS ********************************************************************************** +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! *********************************************************************************************************************** +! DEFINE BASIN MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a1), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! *********************************************************************************************************************** +! +! ******************************************************************** +! define format string for parameter descriptions +! ******************************************************************** +'(a25,1x,a1,1x,3(f12.4,1x,a1,1x))' ! format string for parameter descriptions (must be in single quotes) +! ******************************************************************** +! baseflow +! ******************************************************************** +basin__aquiferHydCond | 0.0100 | 0.0001 | 10.0000 +basin__aquiferScaleFactor | 3.5000 | 0.1000 | 100.0000 +basin__aquiferBaseflowExp | 5.0000 | 1.0000 | 10.0000 +! ******************************************************************** +! within-grid routing +! ******************************************************************** +routingGammaShape | 2.5000 | 2.0000 | 3.0000 +routingGammaScale | 20000.0000 | 1.0000 | 5000000.0000 +! ******************************************************************** diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zDecisions_vanderborght2005.txt b/utils/laugh_tests/vanderborght2005/settings/summa_zDecisions_vanderborght2005.txt new file mode 100644 index 0000000000000000000000000000000000000000..6d50dc7f44b4b52a93dc23ff7a0e971910cb467e --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_zDecisions_vanderborght2005.txt @@ -0,0 +1,170 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE MODEL DECISIONS +! *********************************************************************************************************************** +! This file defines the modeling decisions used. +! NOTES: +! (1) lines starting with ! are treated as comment lines -- there is no limit on the number of comment lines +! (2) the name of the decision is followed by the character string defining the decision +! (3) the simulation start/end times must be within single quotes +! *********************************************************************************************************************** +! *********************************************************************************************************************** +soilCatTbl ROSETTA ! (03) soil-category dateset +vegeParTbl USGS ! (04) vegetation category dataset +soilStress NoahType ! (05) choice of function for the soil moisture control on stomatal resistance +stomResist BallBerry ! (06) choice of function for stomatal resistance +! *********************************************************************************************************************** +num_method itertive ! (07) choice of numerical method +fDerivMeth analytic ! (08) method used to calculate flux derivatives +LAI_method monTable ! (09) method used to determine LAI and SAI +f_Richards mixdform ! (10) form of Richard's equation +groundwatr noXplict ! (11) choice of groundwater parameterization +hc_profile constant ! (12) choice of hydraulic conductivity profile +bcUpprTdyn zeroFlux ! (13) type of upper boundary condition for thermodynamics +bcLowrTdyn zeroFlux ! (14) type of lower boundary condition for thermodynamics +bcUpprSoiH liq_flux ! (15) type of upper boundary condition for soil hydrology +bcLowrSoiH drainage ! (16) type of lower boundary condition for soil hydrology +veg_traits CM_QJRMS1988 ! (17) choice of parameterization for vegetation roughness length and displacement height +canopyEmis difTrans ! (18) choice of parameterization for canopy emissivity +snowIncept lightSnow ! (19) choice of parameterization for snow interception +windPrfile logBelowCanopy ! (20) choice of wind profile through the canopy +astability louisinv ! (21) choice of stability function +canopySrad CLM_2stream ! (22) choice of canopy shortwave radiation method +alb_method varDecay ! (23) choice of albedo representation +compaction anderson ! (24) choice of compaction routine +snowLayers CLM_2010 ! (25) choice of method to combine and sub-divide snow layers +thCondSnow jrdn1991 ! (26) choice of thermal conductivity representation for snow +thCondSoil mixConstit ! (27) choice of thermal conductivity representation for soil +spatial_gw localColumn ! (28) choice of method for the spatial representation of groundwater +subRouting timeDlay ! (29) choice of method for sub-grid routing +! *********************************************************************************************** +! ***** description of the options available -- nothing below this point is read **************** +! *********************************************************************************************** +! ----------------------------------------------------------------------------------------------- +! (01) simulation start time +! (02) simulation end time +! ----------------------------------------------------------------------------------------------- +! (03) soil-category dateset +! STAS ! STATSGO dataset +! STAS-RUC ! ?? +! ROSETTA ! merged Rosetta table with STAS-RUC +! ----------------------------------------------------------------------------------------------- +! (04) vegetation category dataset +! USGS ! USGS 24/27 category dataset +! MODIFIED_IGBP_MODIS_NOAH ! MODIS 20-category dataset +! ----------------------------------------------------------------------------------------------- +! (05) choice of function for the soil moisture control on stomatal resistance +! NoahType ! thresholded linear function of volumetric liquid water content +! CLM_Type ! thresholded linear function of matric head +! SiB_Type ! exponential of the log of matric head +! ----------------------------------------------------------------------------------------------- +! (06) choice of function for stomatal resistance +! BallBerry ! Ball-Berry +! Jarvis ! Jarvis +! ----------------------------------------------------------------------------------------------- +! (07) choice of numerical method +! itertive ! iterative +! non_iter ! non-iterative +! itersurf ! iterate only on the surface energy balance +! ----------------------------------------------------------------------------------------------- +! (08) method used to calculate flux derivatives +! numericl ! numerical derivatives +! analytic ! analytical derivatives +! ----------------------------------------------------------------------------------------------- +! (09) method used to determine LAI and SAI +! monTable ! LAI/SAI taken directly from a monthly table for different vegetation classes +! specified ! LAI/SAI computed from green vegetation fraction and winterSAI and summerLAI parameters +! ----------------------------------------------------------------------------------------------- +! (10) form of Richards' equation +! moisture ! moisture-based form of Richards' equation +! mixdform ! mixed form of Richards' equation +! ----------------------------------------------------------------------------------------------- +! (11) choice of groundwater parameterization +! qTopmodl ! topmodel parameterization +! bigBuckt ! a big bucket (lumped aquifer model) +! noXplict ! no explicit groundwater parameterization +! ----------------------------------------------------------------------------------------------- +! (12) choice of hydraulic conductivity profile +! constant ! constant hydraulic conductivity with depth +! pow_prof ! power-law profile +! ----------------------------------------------------------------------------------------------- +! (13) choice of upper boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! nrg_flux ! energy flux +! ----------------------------------------------------------------------------------------------- +! (14) choice of lower boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (15) choice of upper boundary conditions for soil hydrology +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! liq_flux ! liquid water flux +! ----------------------------------------------------------------------------------------------- +! (16) choice of lower boundary conditions for soil hydrology +! drainage ! free draining +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! bottmPsi ! function of matric head in the lower-most layer +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (17) choice of parameterization for vegetation roughness length and displacement height +! Raupach_BLM1994 ! Raupach (BLM 1994) "Simplified expressions..." +! CM_QJRMS1998 ! Choudhury and Monteith (QJRMS 1998) "A four layer model for the heat budget..." +! vegTypeTable ! constant parameters dependent on the vegetation type +! ----------------------------------------------------------------------------------------------- +! (18) choice of parameterization for canopy emissivity +! simplExp ! simple exponential function +! difTrans ! parameterized as a function of diffuse transmissivity +! ----------------------------------------------------------------------------------------------- +! (19) choice of parameterization for snow interception +! stickySnow ! maximum interception capacity an increasing function of temerature +! lightSnow ! maximum interception capacity an inverse function of new snow density +! ----------------------------------------------------------------------------------------------- +! (20) choice of wind profile +! exponential ! exponential wind profile extends to the surface +! logBelowCanopy ! logarithmic profile below the vegetation canopy +! ----------------------------------------------------------------------------------------------- +! (21) choice of stability function +! standard ! standard MO similarity, a la Anderson (1979) +! louisinv ! Louis (1979) inverse power function +! mahrtexp ! Mahrt (1987) exponential function +! ----------------------------------------------------------------------------------------------- +! (22) choice of canopy shortwave radiation method +! noah_mp ! full Noah-MP implementation (including albedo) +! CLM_2stream ! CLM 2-stream model (see CLM documentation) +! UEB_2stream ! UEB 2-stream model (Mahat and Tarboton, WRR 2011) +! NL_scatter ! Simplified method Nijssen and Lettenmaier (JGR 1999) +! BeersLaw ! Beer's Law (as implemented in VIC) +! ----------------------------------------------------------------------------------------------- +! (23) choice of albedo representation +! conDecay ! constant decay rate (e.g., VIC, CLASS) +! varDecay ! variable decay rate (e.g., BATS approach, with destructive metamorphism + soot content) +! ----------------------------------------------------------------------------------------------- +! (24) choice of compaction routine +! consettl ! constant settlement rate +! anderson ! semi-empirical method of Anderson (1976) +! ----------------------------------------------------------------------------------------------- +! (25) choice of method to combine and sub-divide snow layers +! CLM_2010 ! CLM option: combination/sub-dividion rules depend on layer index +! jrdn1991 ! SNTHERM option: same combination/sub-dividion rules applied to all layers +! ----------------------------------------------------------------------------------------------- +! (26) choice of thermal conductivity representation for snow +! tyen1965 ! Yen (1965) +! melr1977 ! Mellor (1977) +! jrdn1991 ! Jordan (1991) +! smnv2000 ! Smirnova et al. (2000) +! ----------------------------------------------------------------------------------------------- +! (27) choice of thermal conductivity representation for soil +! funcSoilWet ! function of soil wetness +! mixConstit ! mixture of constituents +! hanssonVZJ ! test case for the mizoguchi lab experiment, Hansson et al. VZJ 2004 +! ----------------------------------------------------------------------------------------------- +! (28) choice of method for the spatial representation of groundwater +! localColumn ! separate groundwater representation in each local soil column +! singleBasin ! single groundwater store over the entire basin +! ----------------------------------------------------------------------------------------------- +! (29) choice of method for sub-grid routing +! timeDlay ! time-delay histogram +! qInstant ! instantaneous routing +! *********************************************************************************************** +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/vanderborght2005/summa_fileManager_vanderborght2005_exp1.txt +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/vanderborght2005/summa_fileManager_vanderborght2005_exp2.txt +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/vanderborght2005/summa_fileManager_vanderborght2005_exp3.txt diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zForcingFileList.txt b/utils/laugh_tests/vanderborght2005/settings/summa_zForcingFileList.txt new file mode 100644 index 0000000000000000000000000000000000000000..449994a2c271f68eab1f4430eb769ec08e16e1f2 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_zForcingFileList.txt @@ -0,0 +1,8 @@ +! **************************************************************************************************** +! List of forcing data files used +! +! This file includes one "word" per line: +! (1) The name of a forcing file +! --> filename must be in single quotes +! **************************************************************************************************** + 'vanderborght2005_forcing.nc' \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zForcingInfo_vanderborght2005.txt b/utils/laugh_tests/vanderborght2005/settings/summa_zForcingInfo_vanderborght2005.txt new file mode 100644 index 0000000000000000000000000000000000000000..6163dd00baaa63551343468719b645529ad92479 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_zForcingInfo_vanderborght2005.txt @@ -0,0 +1,29 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE FORCING FILE +! *********************************************************************************************************************** +! This file defines the name of the forcing data file, the number of columns in the file, the column index for each data +! variable, the start index of the simulation period, the length of the simulation period, +! and the length of the data time step +! *********************************************************************************************************************** +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "|" must be present (format a1), as these are used to check the integrety of the file +! *********************************************************************************************************************** +'(a15,a1,1x,a)' +filenmData | celia1990_forcing.txt ! name of the forcing data file (must be in single quotes) +ncols | 13 ! number of columns in the forcing file +iyyy | 1 ! year +im | 2 ! month +id | 3 ! day +ih | 4 ! hour +imin | 5 ! minute +pptrate | 7 ! precipitation rate (kg m-2 s-1) +SWRadAtm | 8 ! downwelling shortwave radiaiton (W m-2) +LWRadAtm | 9 ! downwelling longwave radiation (W m-2) +airtemp | 10 ! air temperature (K) +windspd | 11 ! windspeed (m/s) +airpres | 12 ! pressure (Pa) +spechum | 13 ! specific humidity (g/g) +data_step | 1800 ! length of time step (seconds) diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zInitialCond_vanderborght2005.nc b/utils/laugh_tests/vanderborght2005/settings/summa_zInitialCond_vanderborght2005.nc new file mode 100644 index 0000000000000000000000000000000000000000..c7f98a1926eb620c1e93e39efc21ee1f1177903f Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/settings/summa_zInitialCond_vanderborght2005.nc differ diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zLocalAttributes.nc b/utils/laugh_tests/vanderborght2005/settings/summa_zLocalAttributes.nc new file mode 100644 index 0000000000000000000000000000000000000000..f9f04385edc2e453fa0a7df385ac1a1fe9c991d1 Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/settings/summa_zLocalAttributes.nc differ diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zLocalParamInfo.txt b/utils/laugh_tests/vanderborght2005/settings/summa_zLocalParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..5f716d75d7b89700b973fcb3d121513883ab4d92 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/settings/summa_zLocalParamInfo.txt @@ -0,0 +1,226 @@ +! ======================================================================================================================= +! ======================================================================================================================= +! ===== DEFINITION OF MODEL PARAMETERS ================================================================================== +! ======================================================================================================================= +! ======================================================================================================================= +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! ======================================================================================================================= +! DEFINE SITE MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! ======================================================================================================================= +! +! ==================================================================== +! define format string for parameter descriptions +! ==================================================================== +'(a25,1x,3(a1,1x,f12.4,1x))' ! format string (must be in single quotes) +! ==================================================================== +! boundary conditions +! ==================================================================== +upperBoundHead | -0.7500 | -100.0000 | -0.0100 +lowerBoundHead | -10.0000 | -100.0000 | -0.0100 +upperBoundTheta | 0.2004 | 0.1020 | 0.3680 +lowerBoundTheta | 0.1100 | 0.1020 | 0.3680 +upperBoundTemp | 272.1600 | 270.1600 | 280.1600 +lowerBoundTemp | 274.1600 | 270.1600 | 280.1600 +! ==================================================================== +! precipitation partitioning +! ==================================================================== +tempCritRain | 273.1600 | 272.1600 | 274.1600 +tempRangeTimestep | 2.0000 | 0.5000 | 5.0000 +frozenPrecipMultip | 1.0000 | 0.5000 | 1.5000 +! ==================================================================== +! snow properties +! ==================================================================== +snowfrz_scale | 50.0000 | 10.0000 | 1000.0000 +fixedThermalCond_snow | 0.3500 | 0.1000 | 1.0000 +! ==================================================================== +! snow albedo +! ==================================================================== +albedoMax | 0.8400 | 0.7000 | 0.9500 +albedoMinWinter | 0.5500 | 0.6000 | 1.0000 +albedoMinSpring | 0.5500 | 0.3000 | 1.0000 +albedoMaxVisible | 0.9500 | 0.7000 | 0.9500 +albedoMinVisible | 0.7500 | 0.5000 | 0.7500 +albedoMaxNearIR | 0.6500 | 0.5000 | 0.7500 +albedoMinNearIR | 0.3000 | 0.1500 | 0.4500 +albedoDecayRate | 1.0d+6 | 0.1d+6 | 5.0d+6 +albedoSootLoad | 0.3000 | 0.1000 | 0.5000 +albedoRefresh | 1.0000 | 1.0000 | 10.0000 +! ==================================================================== +! radiation transfer within snow +! ==================================================================== +radExt_snow | 20.0000 | 20.0000 | 20.0000 +directScale | 0.0900 | 0.0000 | 0.5000 +Frad_direct | 0.7000 | 0.0000 | 1.0000 +Frad_vis | 0.5000 | 0.0000 | 1.0000 +! ==================================================================== +! new snow density +! ==================================================================== +newSnowDenMin | 100.0000 | 50.0000 | 100.0000 +newSnowDenMult | 100.0000 | 25.0000 | 75.0000 +newSnowDenScal | 5.0000 | 1.0000 | 5.0000 +constSnowDen | 100.0000 | 50.0000 | 250.0000 +newSnowDenAdd | 109.0000 | 80.0000 | 120.0000 +newSnowDenMultTemp | 6.0000 | 1.0000 | 12.0000 +newSnowDenMultWind | 26.0000 | 16.0000 | 36.0000 +newSnowDenMultAnd | 1.0000 | 1.0000 | 3.0000 +newSnowDenBase | 0.0000 | 0.0000 | 0.0000 +! ==================================================================== +! snow compaction +! ==================================================================== +densScalGrowth | 0.0460 | 0.0230 | 0.0920 +tempScalGrowth | 0.0400 | 0.0200 | 0.0600 +grainGrowthRate | 2.7d-6 | 1.0d-6 | 5.0d-6 +densScalOvrbdn | 0.0230 | 0.0115 | 0.0460 +tempScalOvrbdn | 0.0800 | 0.6000 | 1.0000 +baseViscosity | 9.0d+5 | 5.0d+5 | 1.5d+6 +! ==================================================================== +! water flow through snow +! ==================================================================== +Fcapil | 0.0600 | 0.0100 | 0.1000 +k_snow | 0.0150 | 0.0050 | 0.0500 +mw_exp | 3.0000 | 1.0000 | 5.0000 +! ==================================================================== +! turbulent heat fluxes +! ==================================================================== +z0Snow | 0.0010 | 0.0010 | 10.0000 +z0Soil | 0.0100 | 0.0010 | 10.0000 +z0Canopy | 0.1000 | 0.0010 | 10.0000 +zpdFraction | 0.6500 | 0.5000 | 0.8500 +critRichNumber | 0.2000 | 0.1000 | 1.0000 +Louis79_bparam | 9.4000 | 9.2000 | 9.6000 +Louis79_cStar | 5.3000 | 5.1000 | 5.5000 +Mahrt87_eScale | 1.0000 | 0.5000 | 2.0000 +leafExchangeCoeff | 0.0100 | 0.0010 | 0.1000 +windReductionParam | 0.2800 | 0.0000 | 1.0000 +! ==================================================================== +! stomatal conductance +! ==================================================================== +Kc25 | 296.0770 | 296.0770 | 296.0770 +Ko25 | 0.2961 | 0.2961 | 0.2961 +Kc_qFac | 2.1000 | 2.1000 | 2.1000 +Ko_qFac | 1.2000 | 1.2000 | 1.2000 +kc_Ha | 79430.0000 | 79430.0000 | 79430.0000 +ko_Ha | 36380.0000 | 36380.0000 | 36380.0000 +vcmax25_canopyTop | 40.0000 | 20.0000 | 100.0000 +vcmax_qFac | 2.4000 | 2.4000 | 2.4000 +vcmax_Ha | 65330.0000 | 65330.0000 | 65330.0000 +vcmax_Hd | 220000.0000 | 149250.0000 | 149250.0000 +vcmax_Sv | 710.0000 | 485.0000 | 485.0000 +vcmax_Kn | 0.6000 | 0.0000 | 1.2000 +jmax25_scale | 2.0000 | 2.0000 | 2.0000 +jmax_Ha | 43540.0000 | 43540.0000 | 43540.0000 +jmax_Hd | 152040.0000 | 152040.0000 | 152040.0000 +jmax_Sv | 495.0000 | 495.0000 | 495.0000 +fractionJ | 0.1500 | 0.1500 | 0.1500 +quantamYield | 0.0500 | 0.0500 | 0.0500 +vpScaleFactor | 1500.0000 | 1500.0000 | 1500.0000 +cond2photo_slope | 9.0000 | 1.0000 | 10.0000 +minStomatalConductance | 2000.0000 | 2000.0000 | 2000.0000 +! ==================================================================== +! vegetation properties +! ==================================================================== +winterSAI | 1.0000 | 0.0100 | 3.0000 +summerLAI | 3.0000 | 0.0100 | 10.0000 +rootScaleFactor1 | 2.0000 | 1.0000 | 10.0000 +rootScaleFactor2 | 5.0000 | 1.0000 | 10.0000 +rootingDepth | 0.5000 | 0.0100 | 10.0000 +rootDistExp | 1.0000 | 0.0100 | 1.0000 +plantWiltPsi | -150.0000 | -500.0000 | 0.0000 +soilStressParam | 5.8000 | 4.3600 | 6.3700 +critSoilWilting | 0.0750 | 0.0000 | 1.0000 +critSoilTranspire | 0.1750 | 0.0000 | 1.0000 +critAquiferTranspire | 0.2000 | 0.1000 | 10.0000 +minStomatalResistance | 50.0000 | 10.0000 | 200.0000 +leafDimension | 0.0400 | 0.0100 | 0.1000 +heightCanopyTop | 20.0000 | 0.0500 | 100.0000 +heightCanopyBottom | 2.0000 | 0.0000 | 5.0000 +specificHeatVeg | 874.0000 | 500.0000 | 1500.0000 +maxMassVegetation | 25.0000 | 1.0000 | 50.0000 +throughfallScaleSnow | 0.5000 | 0.1000 | 0.9000 +throughfallScaleRain | 0.5000 | 0.1000 | 0.9000 +refInterceptCapSnow | 6.6000 | 1.0000 | 10.0000 +refInterceptCapRain | 1.0000 | 0.0100 | 1.0000 +snowUnloadingCoeff | 0.0000 | 0.0000 | 1.5d-6 +canopyDrainageCoeff | 0.0050 | 0.0010 | 0.0100 +ratioDrip2Unloading | 0.4000 | 0.0000 | 1.0000 +canopyWettingFactor | 0.7000 | 0.0000 | 1.0000 +canopyWettingExp | 1.0000 | 0.0000 | 1.0000 +! ==================================================================== +! soil properties +! ==================================================================== +soil_dens_intr | 2700.0000 | 500.0000 | 4000.0000 +thCond_soil | 5.5000 | 2.9000 | 8.4000 +frac_sand | 0.1600 | 0.0000 | 1.0000 +frac_silt | 0.2800 | 0.0000 | 1.0000 +frac_clay | 0.5600 | 0.0000 | 1.0000 +fieldCapacity | 0.2000 | 0.0000 | 1.0000 +wettingFrontSuction | 0.3000 | 0.1000 | 1.5000 +theta_mp | 0.4010 | 0.3000 | 0.6000 +theta_sat | 0.5500 | 0.3000 | 0.6000 +theta_res | 0.1390 | 0.0010 | 0.1000 +vGn_alpha | -0.8400 | -1.0000 | -0.0100 +vGn_n | 1.3000 | 1.0000 | 3.0000 +mpExp | 5.0000 | 1.0000 | 10.0000 +k_soil | 7.5d-06 | 1.d-07 | 100.d-07 +k_macropore | 1.0d-03 | 1.d-07 | 100.d-07 +kAnisotropic | 1.0000 | 0.0001 | 10.0000 +zScale_TOPMODEL | 2.5000 | 0.1000 | 100.0000 +compactedDepth | 1.0000 | 0.0000 | 1.0000 +aquiferScaleFactor | 0.3500 | 0.1000 | 100.0000 +aquiferBaseflowExp | 2.0000 | 1.0000 | 10.0000 +aquiferBaseflowRate | 2.0000 | 1.0000 | 10.0000 +qSurfScale | 50.0000 | 1.0000 | 100.0000 +specificYield | 0.2000 | 0.1000 | 0.3000 +specificStorage | 1.d-09 | 1.d-05 | 1.d-07 +f_impede | 2.0000 | 1.0000 | 10.0000 +soilIceScale | 0.1300 | 0.0001 | 1.0000 +soilIceCV | 0.4500 | 0.1000 | 5.0000 +! ==================================================================== +! algorithmic control parameters +! ==================================================================== +minwind | 0.1000 | 0.0010 | 1.0000 +minstep | 1.0000 | 1.0000 | 1800.0000 +maxstep | 3600.0000 | 60.0000 | 1800.0000 +wimplicit | 0.0000 | 0.0000 | 1.0000 +maxiter | 100.0000 | 1.0000 | 100.0000 +relConvTol_liquid | 1.0d-3 | 1.0d-5 | 1.0d-1 +absConvTol_liquid | 1.0d-5 | 1.0d-8 | 1.0d-3 +relConvTol_matric | 1.0d-6 | 1.0d-5 | 1.0d-1 +absConvTol_matric | 1.0d-6 | 1.0d-8 | 1.0d-3 +relConvTol_energy | 1.0d-2 | 1.0d-5 | 1.0d-1 +absConvTol_energy | 1.0d-0 | 1.0d-2 | 1.0d+1 +relConvTol_aquifr | 1.0d-0 | 1.0d-2 | 1.0d+1 +absConvTol_aquifr | 1.0d-5 | 1.0d-5 | 1.0d-1 +zmin | 0.0100 | 0.0050 | 0.1000 +zmax | 0.0500 | 0.0100 | 0.5000 +! --- +zminLayer1 | 0.0075 | 0.0075 | 0.0075 +zminLayer2 | 0.0100 | 0.0100 | 0.0100 +zminLayer3 | 0.0500 | 0.0500 | 0.0500 +zminLayer4 | 0.1000 | 0.1000 | 0.1000 +zminLayer5 | 0.2500 | 0.2500 | 0.2500 +! --- +zmaxLayer1_lower | 0.0500 | 0.0500 | 0.0500 +zmaxLayer2_lower | 0.2000 | 0.2000 | 0.2000 +zmaxLayer3_lower | 0.5000 | 0.5000 | 0.5000 +zmaxLayer4_lower | 1.0000 | 1.0000 | 1.0000 +! --- +zmaxLayer1_upper | 0.0300 | 0.0300 | 0.0300 +zmaxLayer2_upper | 0.1500 | 0.1500 | 0.1500 +zmaxLayer3_upper | 0.3000 | 0.3000 | 0.3000 +zmaxLayer4_upper | 0.7500 | 0.7500 | 0.7500 +! ==================================================================== +minTempUnloading | 270.16 | 260.16 | 273.16 +minWindUnloading | 0.0000 | 0.0000 | 10.000 +rateTempUnloading | 1.87d+5 | 1.0d+5 | 3.0d+5 +rateWindUnloading | 1.56d+5 | 1.0d+5 | 3.0d+5 +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/vanderborght2005/summa_fileManager_vanderborght2005_exp1.txt! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/vanderborght2005/summa_fileManager_vanderborght2005_exp2.txt! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/vanderborght2005/summa_fileManager_vanderborght2005_exp3.txt \ No newline at end of file diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zParamTrial_vanderborght2005_exp1.nc b/utils/laugh_tests/vanderborght2005/settings/summa_zParamTrial_vanderborght2005_exp1.nc new file mode 100644 index 0000000000000000000000000000000000000000..03884900e57967574005d2c8ad9f3654f6d28a22 Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/settings/summa_zParamTrial_vanderborght2005_exp1.nc differ diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zParamTrial_vanderborght2005_exp2.nc b/utils/laugh_tests/vanderborght2005/settings/summa_zParamTrial_vanderborght2005_exp2.nc new file mode 100644 index 0000000000000000000000000000000000000000..24168048fb4fc80caa1fbfc17f61367b87da1d2d Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/settings/summa_zParamTrial_vanderborght2005_exp2.nc differ diff --git a/utils/laugh_tests/vanderborght2005/settings/summa_zParamTrial_vanderborght2005_exp3.nc b/utils/laugh_tests/vanderborght2005/settings/summa_zParamTrial_vanderborght2005_exp3.nc new file mode 100644 index 0000000000000000000000000000000000000000..a7961568d210b5c7e983dde3dd5049c41ee5fd72 Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/settings/summa_zParamTrial_vanderborght2005_exp3.nc differ diff --git a/utils/laugh_tests/vanderborght2005/verification_data/runinfo.txt b/utils/laugh_tests/vanderborght2005/verification_data/runinfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..10e395043691fd103d4ac68239f4c0768d68f00f --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/verification_data/runinfo.txt @@ -0,0 +1 @@ + Run start time on system: ccyy=2022 - mm=08 - dd=16 - hh=19 - mi=29 - ss=48.969 diff --git a/utils/laugh_tests/vanderborght2005/verification_data/vanderborght2005_exp1_G1-1_timestep.nc b/utils/laugh_tests/vanderborght2005/verification_data/vanderborght2005_exp1_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..12092bcbc3c3c44661bfaee121ab38d412ac58ba Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/verification_data/vanderborght2005_exp1_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/vanderborght2005/verification_data/vanderborght2005_exp2_G1-1_timestep.nc b/utils/laugh_tests/vanderborght2005/verification_data/vanderborght2005_exp2_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..bf0d8df63e5154522394c43bd4c8b22317f82ca2 Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/verification_data/vanderborght2005_exp2_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/vanderborght2005/verification_data/vanderborght2005_exp3_G1-1_timestep.nc b/utils/laugh_tests/vanderborght2005/verification_data/vanderborght2005_exp3_G1-1_timestep.nc new file mode 100644 index 0000000000000000000000000000000000000000..13cf977cc83ad4ddde41d01206abd8ee0f310842 Binary files /dev/null and b/utils/laugh_tests/vanderborght2005/verification_data/vanderborght2005_exp3_G1-1_timestep.nc differ diff --git a/utils/laugh_tests/vanderborght2005/verify_vanderborght.py b/utils/laugh_tests/vanderborght2005/verify_vanderborght.py new file mode 100644 index 0000000000000000000000000000000000000000..b9d1104d9a473ccfc1f15322366f609f42b6d104 --- /dev/null +++ b/utils/laugh_tests/vanderborght2005/verify_vanderborght.py @@ -0,0 +1,127 @@ +from os import listdir +from os.path import isfile, join +from pathlib import Path +import xarray as xr +import numpy as np + + +def verify(verified_data_path, data_to_compare_path, output_variables, numHRU): + try: + verified_dataset = xr.open_dataset(verified_data_path) + to_compare_dataset = xr.open_dataset(data_to_compare_path) + except FileNotFoundError: + print("Check the variables \'verified_data_path\' and \'data_to_compare_path\'. They may not point to the correct output files or the output filenames may have changed.") + exit() + + # Get the HRUs from the dataset into a list + for iHRU in range(0, numHRU): + verified_hru = verified_dataset.isel(hru=iHRU).copy() + hru_to_compare = to_compare_dataset.isel(hru=iHRU).copy() + + for var in output_variables: + try: + if len(verified_hru[var].values) != len(hru_to_compare[var].values): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_hru[var].values)) + print(" hru_to_compare = ", len(hru_to_compare[var].values)) + + verified_data = [] + to_verify_data = [] + if (verified_hru[var].values.ndim > 1): + # 2D output case + for list in verified_hru[var].values: + for data in list: + verified_data.append(data) + + for list in hru_to_compare[var].values: + for data in list: + to_verify_data.append(data) + + else: + # 1D output case + for data in verified_hru[var].values: + verified_data.append(data) + + for data in hru_to_compare[var].values: + to_verify_data.append(data) + + + # check length + if len(verified_data) != len(to_verify_data): + print("ERROR: output variable", var, "does not contain the same amount of data") + print(" verified_hru = ", len(verified_data)) + print(" hru_to_compare = ", len(to_verify_data)) + + # check values + for elem in range(0, len(verified_data)): + if verified_data[elem] != to_verify_data[elem]: + print("variable -",var, "has different values at", elem) + print(" verified_hru = ", verified_data[elem]) + print(" hru_to_compare = ", to_verify_data[elem]) + break + + except TypeError: + print("variable - ", var, "Cannot be compared with len") + print(" verified_hru = ",verified_hru[var].values) + print(" hru_to_compare = ", hru_to_compare[var].values) + + +numHRU = 1 + +nSnow = "nSnow" +nSoil = "nSoil" +pptrate = "pptrate" +airtemp = "airtemp" +scalarRainPlusMelt = "scalarRainPlusMelt" +scalarSWE = "scalarSWE" +scalarThroughfallSnow = "scalarThroughfallSnow" +scalarThroughfallRain = "scalarThroughfallRain" +scalarSnowSublimation = "scalarSnowSublimation" +scalarInfiltration = "scalarInfiltration" +scalarExfiltration = "scalarExfiltration" +scalarSurfaceRunoff = "scalarSurfaceRunoff" +scalarSurfaceTemp = "scalarSurfaceTemp" +scalarSenHeatTotal = "scalarSenHeatTotal" +scalarLatHeatTotal = "scalarLatHeatTotal" +mLayerHeight = "mLayerHeight" +iLayerHeight = "iLayerHeight" +iLayerLiqFluxSoil = "iLayerLiqFluxSoil" +mLayerTemp = "mLayerTemp" +mLayerDepth = "mLayerDepth" +mLayerLiqFluxSoil = "mLayerLiqFluxSoil" +mLayerVolFracIce = "mLayerVolFracIce" +mLayerVolFracLiq = "mLayerVolFracLiq" +mLayerVolFracWat = "mLayerVolFracWat" +mLayerMatricHead = "mLayerMatricHead" +basin__TotalArea = "basin__TotalArea" +basin__SurfaceRunoff = "basin__SurfaceRunoff" +basin__ColumnOutflow = "basin__ColumnOutflow" +basin__AquiferStorage = "basin__AquiferStorage" +basin__AquiferRecharge = "basin__AquiferRecharge" +basin__AquiferBaseflow = "basin__AquiferBaseflow" +basin__AquiferTranspire = "basin__AquiferTranspire" +averageInstantRunoff = "averageInstantRunoff" +averageRoutedRunoff = "averageRoutedRunoff" +fieldCapacity = "fieldCapacity" +scalarLAI = "scalarLAI" +scalarSAI = "scalarSAI" + +output_variables = [nSnow,nSoil,pptrate,airtemp,scalarRainPlusMelt,scalarSWE,scalarThroughfallSnow, \ + scalarThroughfallRain,scalarSnowSublimation,scalarInfiltration,scalarExfiltration,scalarSurfaceRunoff, \ + scalarSurfaceTemp,scalarSenHeatTotal,scalarLatHeatTotal,mLayerHeight,iLayerHeight,iLayerLiqFluxSoil, \ + mLayerTemp,mLayerDepth,mLayerLiqFluxSoil,mLayerVolFracIce,mLayerVolFracLiq,mLayerVolFracWat, \ + mLayerMatricHead,basin__TotalArea,basin__SurfaceRunoff,basin__ColumnOutflow,basin__AquiferStorage, \ + basin__AquiferRecharge,basin__AquiferBaseflow,basin__AquiferTranspire,averageInstantRunoff, \ + averageRoutedRunoff,fieldCapacity,scalarLAI,scalarSAI] + +verified_data_path = Path("./verification_data/vanderborght2005_exp1_G1-1_timestep.nc") +data_to_compare_path = Path("./output/vanderborght2005_exp1GRU1-1_timestep.nc") +verify(verified_data_path, data_to_compare_path, output_variables, numHRU) + +verified_data_path = Path("./verification_data/vanderborght2005_exp2_G1-1_timestep.nc") +data_to_compare_path = Path("./output/vanderborght2005_exp2GRU1-1_timestep.nc") +verify(verified_data_path, data_to_compare_path, output_variables, numHRU) + +verified_data_path = Path("./verification_data/vanderborght2005_exp3_G1-1_timestep.nc") +data_to_compare_path = Path("./output/vanderborght2005_exp3GRU1-1_timestep.nc") +verify(verified_data_path, data_to_compare_path, output_variables, numHRU) \ No newline at end of file diff --git a/utils/laugh_tests/wigmosta1999/config/Summa_Actors_Settings.json b/utils/laugh_tests/wigmosta1999/config/Summa_Actors_Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..85d67e14de7697397209c43e31815cf2312ce5a5 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/config/Summa_Actors_Settings.json @@ -0,0 +1,32 @@ +{ + "DistributedSettings": { + "distributed-mode": false, + "host": "localhost", + "port": 4444 + }, + + "SimulationSettings": { + "total_hru_count": 100000, + "num_hru_per_batch": 500 + }, + + "SummaActor": { + "OuputStructureSize": 250, + "maxGRUPerJob": 250 + }, + + "FileAccessActor": { + "num_vectors_in_output_manager": 1 + }, + + "JobActor": { + "FileManagerPath": "/gladwell/kck540/SummaActorsSettings/fileManager.txt", + "outputCSV": false, + "csvPath": "/scratch/kck540/csv/" + }, + + "HRUActor": { + "printOutput": true, + "outputFrequency": 1 + } +} \ No newline at end of file diff --git a/utils/laugh_tests/wigmosta1999/forcing_data/sym.pro b/utils/laugh_tests/wigmosta1999/forcing_data/sym.pro new file mode 100644 index 0000000000000000000000000000000000000000..6f7fb851e8844e4714a47f03cadd46615fb636d5 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/forcing_data/sym.pro @@ -0,0 +1,167 @@ +; $Id: sym.pro,v 1.1.1.1 2012-10-20 16:41:41 mclark Exp $ +;------------------------------------------------------------- +;+ +; NAME: +; SYM +; +; PURPOSE: +; define a standard sequence of plotting symbols +; +; CATEGORY: +; utility +; +; CALLING SEQUENCE: +; PLOT,X,Y,PSYM=SYM(NUMBER) +; +; INPUTS: +; NUMBER -> symbol number +; +; 0 : dot +; 1 : filled circle +; 2 : filled upward triangle +; 3 : filled downward triangle +; 4 : filled diamond +; 5 : filled square +; 6 : open circle +; 7 : open upward triangle +; 8 : open downward triangle +; 9 : open diamond +; 10 : open square +; 11 : plus +; 12 : X +; 13 : star +; 14 : filled rightfacing triangle +; 15 : filled leftfacing triangle +; 16 : open rightfacing triangle +; 17 : open leftfacing triangle +; +; KEYWORD PARAMETERS: +; +; OUTPUTS: +; function returns the symbol number to be used with PSYM= in the +; PLOT command +; +; SUBROUTINES: +; SHOWSYM : Can be used to produce a symbol chart for reference +; (Type .r sym, then showsym, optionally with the /PS option). +; Extra keywords are passed to PLOTS, so you can e.g. choose +; a fancy color for your chart. +; +; REQUIREMENTS: +; +; NOTES: +; This function produces a side effect in that the USERSYM procedure +; is used to create a symbol definition. It's meant for usage within +; the PLOT, OPLOT, etc. command +; +; EXAMPLE: +; PLOT,X,Y,PSYM=SYM(0),SYMSIZE=3 +; produces a plot with dots (standard symbol 3) +; FOR I=0,17 DO OPLOT,X+1,Y,PSYM=SYM(I),COLOR=I +; overplots 17 curves each with its own symbol +; +; MODIFICATION HISTORY: +; mgs, 22 Aug 1997: VERSION 1.00 +; mgs, 10 Sep 1999: - added SHOWSYM procedure +; +;- +; Copyright (C) 1997, Martin Schultz, Harvard University +; This software is provided as is without any warranty +; whatsoever. It may be freely used, copied or distributed +; for non-commercial purposes. This copyright notice must be +; kept with any copy of this software. If this software shall +; be used commercially or sold as part of a larger package, +; please contact the author to arrange payment. +; Bugs and comments should be directed to mgs@io.harvard.edu +; with subject "IDL routine sym" +;------------------------------------------------------------- + + +pro showsym,ps=ps,_EXTRA=e + +FORWARD_FUNCTION SYM + + + psflag = keyword_set(PS) + if (psflag) then begin + olddev = !D.NAME + set_plot,'PS' + device,/COLOR,bits=8,xsize=8,ysize=5,yoffset=3,/INCHES, $ + filename='symbols.ps' + endif + + plot,findgen(18),/NODATA,xstyle=4,YSTYLE=4 + for i=0,17 do begin + plots,1,18-i,PSYM=SYM(i),_EXTRA=e + xyouts,0.5,18-i-0.2,strtrim(i,2),align=1. + endfor + + if (psflag) then begin + device,/close + set_plot,olddev + print,'Symbollist created as symbols.ps.' + endif + + return +end + +; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +function sym,number + + on_error,2 ; return to caller + + if(n_elements(number) eq 0) then return,1 ; default + + result=8 ; default: return psym=8, i.e. user defined symbol + +; define some help variables for +; circle : + phi=findgen(32)*(!PI*2/32.) + phi = [ phi, phi(0) ] + + case number of + + 0 : result = 3 ; dot + 1 : usersym, cos(phi), sin(phi), /fill + ; filled circle + 2 : usersym, [ -1, 0, 1, -1 ], [ -1, 1, -1, -1 ], /fill + ; filled upward triangle + 3 : usersym, [ -1, 0, 1, -1 ], [ 1, -1, 1, 1 ], /fill + ; filled downward triangle + 4 : usersym, [ 0, 1, 0, -1, 0 ], [ 1, 0, -1, 0, 1 ], /fill + ; filled diamond + 5 : usersym, [ -1, 1, 1, -1, -1 ], [ 1, 1, -1, -1, 1 ], /fill + ; filled square + 6 : usersym, cos(phi), sin(phi) + ; open circle + 7 : usersym, [ -1, 0, 1, -1 ], [ -1, 1, -1, -1 ] + ; open upward triangle + 8 : usersym, [ -1, 0, 1, -1 ], [ 1, -1, 1, 1 ] + ; open downward triangle + 9 : usersym, [ 0, 1, 0, -1, 0 ], [ 1, 0, -1, 0, 1 ] + ; open diamond + 10 : usersym, [ -1, 1, 1, -1, -1 ], [ 1, 1, -1, -1, 1 ] + ; open square + 11 : result = 1 ; plus + 12 : result = 7 ; X + 13 : result = 2 ; star + 14 : usersym, [ -1, 1, -1, -1 ], [1, 0, -1, 1 ], /fill + ; rightfacing triangle, filled + 15 : usersym, [ 1, -1, 1, 1 ], [1, 0, -1, 1 ], /fill + ; leftfacing triangle, filled + 16 : usersym, [ -1, 1, -1, -1 ], [1, 0, -1, 1 ] + ; rightfacing triangle, open + 17 : usersym, [ 1, -1, 1, 1 ], [1, 0, -1, 1 ] + ; leftfacing triangle, open + + else : begin + print,'invalid symbol number - set to 1' + result = 1 + end + + endcase + + return,result +end + diff --git a/utils/laugh_tests/wigmosta1999/forcing_data/wigmosta_forcing.nc b/utils/laugh_tests/wigmosta1999/forcing_data/wigmosta_forcing.nc new file mode 100644 index 0000000000000000000000000000000000000000..330b9fb6125b3f05a39bfcac3a8f6ec8b9df0b62 Binary files /dev/null and b/utils/laugh_tests/wigmosta1999/forcing_data/wigmosta_forcing.nc differ diff --git a/utils/laugh_tests/wigmosta1999/forcing_data/wigmosta_forcing.pro b/utils/laugh_tests/wigmosta1999/forcing_data/wigmosta_forcing.pro new file mode 100644 index 0000000000000000000000000000000000000000..2406ea9b05b2f3e95d571f1e228bf13b68ab12e4 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/forcing_data/wigmosta_forcing.pro @@ -0,0 +1,72 @@ +pro wigmosta_forcing + +; define constants +Tfreeze = 273.16d + +; define parameters +dt = 3600.d ; (time step) + +; define plotting parameters +window, 0, xs=1000, ys=1000, retain=2 +device, decomposed=0 +LOADCT, 39 +!P.BACKGROUND=255 +!P.CHARSIZE=2.5 +!P.COLOR=0 +erase, color=255 +!P.MULTI=[0,1,4] + +; define the number of days +ndays = 42 + +; define the number of time steps per hour +nprhr = 3600.d/dt + +; define the number of steps per day +nprdy = 86400.d/dt + +; define the number of time steps +ntime = ndays*nprdy + +; define time in seconds +stime = (dindgen(ntime)+1.d)*dt + +; define time in hours +htime = stime/3600. + +; define forcing variables +swrad = 100.d +lwrad = 350.d +awind = 0.d +sphum = 1.d-3 +apres = 101325.d +atemp = 273.16d + 10.d + +; define precipitation +aPrcp = dblarr(ntime) + +; define the precipitation +iRain = where(htime le 550.d, complement=iDry) +aPrcp[iRain] = 20.d/3600.d ; 20 mm/hour +aPrcp[iDry] = 0.d + +; define time +atime = stime/86400.d + julday(1,1,2000,0,0,0.d) + +; make a forcing file +openw, out_unit, 'wigmosta_forcing-exfiltrate.txt', /get_lun + +for itime=0,ntime-1 do begin + ; define date + caldat, atime[itime], im, id, iyyy, ih, imi, dsec + ; print synthetic "data" + printf, out_unit, iyyy, im, id, ih, imi, dsec, aprcp[itime], swrad, lwrad, atemp, awind, apres, sphum, $ + format='(i4,1x,4(i2,1x),f6.1,1x,e14.6,1x,5(f10.3,1x),e12.3)' +endfor + +; free up file unit +free_lun, out_unit + + +stop +end diff --git a/utils/laugh_tests/wigmosta1999/forcing_data/wigmosta_icond.pro b/utils/laugh_tests/wigmosta1999/forcing_data/wigmosta_icond.pro new file mode 100644 index 0000000000000000000000000000000000000000..8aed5b35228240460680fec0839a2c4254350d1c --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/forcing_data/wigmosta_icond.pro @@ -0,0 +1,127 @@ +pro wigmosta_icond + +; used to create initial conditions for the synthetic test case + +; define vGn parameters (used to compute volumetric liquid water content) +alpha = -0.5d ; m-1 +n = 1.5d +m = 1.d - 1.d/n +theta_sat = 0.35d +theta_res = 0.1d +k_sat = 0.00000075d +f_impede = -15.d + +; define the number of nodes +nodes = 8 + +; define soil depth (m) +zsoil = 1.5d + +; define layer thickness +z_lay = zsoil/double(nodes) + +; define vertical grid (m) -- positive downward +z_dep = (dindgen(nodes+1)/double(nodes))*zsoil + +; define the mid-point of each layer +z_m = (z_dep[0:nodes-1] + z_dep[1:nodes])/2.d + +; define the layer thickness +z_i = z_dep[1:nodes] - z_dep[0:nodes-1] + +; define arrays +zpress = replicate(-50000.d, nodes) +z_temp = replicate(283.16d,nodes) +ztheta = dblarr(nodes) + +for ilayer=0,nodes-1 do begin + ztheta[ilayer] = call_function('theta', zpress[ilayer], alpha, theta_res, theta_sat, n, m) +endfor + +; write data to file +openw, out_unit, 'wigmosta_icond.txt', /get_lun + for ilayer=0,nodes-1 do begin + printf, out_unit, 'soil', z_m[ilayer]-0.5d*z_i[ilayer], z_i[ilayer], $ + z_temp[ilayer], 0.d, ztheta[ilayer], zpress[ilayer], $ + format='(a10,1x,2(f12.7,1x),f10.3,1x,f17.6,1x,f16.6,1x,f16.6)' + endfor +free_lun, out_unit + + +stop +end + +; ***************************************************************************************************************** +; ***************************************************************************************************************** + +function k_psi, psi, alpha, k_sat, n, m + +; computes hydraulic conductivity given psi and soil hydraulic parameters alpha, k_sat, n, and m +; psi = pressure (m) +; alpha = scaling parameter (m-1) +; k_sat = saturated hydraulic conductivity (m s-1) +; n = vGn "n" parameter +; m = vGn "m" parameter + +work = dblarr(n_elements(psi)) + +ineg = where(psi lt 0.d, nneg, complement=ipos, ncomplement=npos) +if (nneg gt 0) then work[ineg] = k_sat * $ + ( ( (1.d - (psi[ineg]*alpha)^(n-1.d) * (1.d + (psi[ineg]*alpha)^n)^(-m))^2.d ) / ( (1.d + (psi[ineg]*alpha)^n)^(m/2.d) ) ) +if (npos gt 0) then work[ipos] = k_sat + +return, work + +end + +; ***************************************************************************************************************** +; ***************************************************************************************************************** + +function theta, psi, alpha, theta_res, theta_sat, n, m + +; computes volumetric water content based on psi and soil hydraulic parameters alpha, n, and m + +; psi = pressure (m) +; alpha = scaling parameter (m-1) +; theta_res = residual volumetric water content (-) +; theta_sat = porosity (-) +; n = vGn "n" parameter +; m = vGn "m" parameter + +work = dblarr(n_elements(psi)) + +ineg = where(psi lt 0.d, nneg, complement=ipos, ncomplement=npos) +if (nneg gt 0) then work[ineg] = theta_res + (theta_sat - theta_res)*(1.d + (alpha*psi[ineg])^n)^(-m) +if (npos gt 0) then work[ipos] = theta_sat + +return, work + +end + +; ***************************************************************************************************************** +; ***************************************************************************************************************** + +function dTheta_dPsi, psi, alpha, theta_res, theta_sat, n, m + +; computes the soil moisture capacity function, dTheta_dPsi (m-1) + +; psi = pressure (m) +; alpha = scaling parameter (m-1) +; theta_res = residual volumetric water content (-) +; theta_sat = porosity (-) +; n = vGn "n" parameter +; m = vGn "m" parameter + +work = dblarr(n_elements(psi)) + +ineg = where(psi lt 0.d, nneg, complement=ipos, ncomplement=npos) +if (nneg gt 0) then work[ineg] = (theta_sat-theta_res) * $ + (-m*(1.d + (psi[ineg]*alpha)^n)^(-m-1.d)) * n*(psi[ineg]*alpha)^(n-1.d) * alpha +if (npos gt 0) then work[ipos] = 0.d + +return, work + +end + +; ***************************************************************************************************************** +; ***************************************************************************************************************** diff --git a/utils/laugh_tests/wigmosta1999/run_test_summa.sh b/utils/laugh_tests/wigmosta1999/run_test_summa.sh new file mode 100755 index 0000000000000000000000000000000000000000..afe4927125202154f9eed9373db8c8264c2dc8a8 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/run_test_summa.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerClay.txt +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerLoam.txt +/SUMMA/bin/summa.exe -g 1 1 -m /Summa-Actors/utils/laugh_tests/miller1998/settings/summa_fileManager_verify_millerSand.txt \ No newline at end of file diff --git a/utils/laugh_tests/wigmosta1999/run_test_summa_actors.sh b/utils/laugh_tests/wigmosta1999/run_test_summa_actors.sh new file mode 100755 index 0000000000000000000000000000000000000000..864e583b8aa024e5655c409fd77279f2a00b6088 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/run_test_summa_actors.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/miller1998/config/clay +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/miller1998/config/loam +/Summa-Actors/bin/summaMain -g 1 -n 1 -c /Summa-Actors/utils/laugh_tests/miller1998/config/sand \ No newline at end of file diff --git a/utils/laugh_tests/wigmosta1999/settings/GENPARM.TBL b/utils/laugh_tests/wigmosta1999/settings/GENPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..17fc9172ba276dffbbb9dfa90cdcbc4eecc1070c --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/GENPARM.TBL @@ -0,0 +1,36 @@ +General Parameters +SLOPE_DATA +9 +0.1 +0.6 +1.0 +0.35 +0.55 +0.8 +0.63 +0.0 +0.0 +SBETA_DATA +-2.0 +FXEXP_DATA +2.0 +CSOIL_DATA +2.00E+6 +SALP_DATA +2.6 +REFDK_DATA +2.0E-6 +REFKDT_DATA +3.0 +FRZK_DATA +0.15 +ZBOT_DATA +-8.0 +CZIL_DATA +0.1 +SMLOW_DATA +0.5 +SMHIGH_DATA +3.0 +LVCOEF_DATA +0.5 diff --git a/utils/laugh_tests/wigmosta1999/settings/MPTABLE.TBL b/utils/laugh_tests/wigmosta1999/settings/MPTABLE.TBL new file mode 100644 index 0000000000000000000000000000000000000000..0f0c59c02cc2f03d2a168b8523ffa793773861a7 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/MPTABLE.TBL @@ -0,0 +1,284 @@ +&noah_mp_usgs_veg_categories + VEG_DATASET_DESCRIPTION = "USGS" + NVEG = 27 +/ +&noah_mp_usgs_parameters + ! NVEG = 27 + ! 1: Urban and Built-Up Land + ! 2: Dryland Cropland and Pasture + ! 3: Irrigated Cropland and Pasture + ! 4: Mixed Dryland/Irrigated Cropland and Pasture + ! 5: Cropland/Grassland Mosaic + ! 6: Cropland/Woodland Mosaic + ! 7: Grassland + ! 8: Shrubland + ! 9: Mixed Shrubland/Grassland + ! 10: Savanna + ! 11: Deciduous Broadleaf Forest + ! 12: Deciduous Needleleaf Forest + ! 13: Evergreen Broadleaf Forest + ! 14: Evergreen Needleleaf Forest + ! 15: Mixed Forest + ! 16: Water Bodies + ! 17: Herbaceous Wetland + ! 18: Wooded Wetland + ! 19: Barren or Sparsely Vegetated + ! 20: Herbaceous Tundra + ! 21: Wooded Tundra + ! 22: Mixed Tundra + ! 23: Bare Ground Tundra + ! 24: Snow or Ice + ! 25: Playa + ! 26: Lava + ! 27: White Sand + + ISURBAN = 1 + ISWATER = 16 + ISBARREN = 19 + ISSNOW = 24 + EBLFOREST = 13 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.00, 0.06, 0.06, 0.06, 0.06, 0.15, 0.06, 0.06, 0.06, 0.86, 0.80, 0.85, 1.10, 1.09, 0.80, 0.00, 0.06, 0.05, 0.00, 0.04, 0.06, 0.06, 0.03, 0.00, 0.01, 0.00, 0.00, + HVT = 15.0, 0.50, 0.50, 0.50, 0.50, 1.25, 0.50, 0.50, 0.50, 16.0, 16.0, 18.0, 20.0, 20.0, 16.0, 0.00, 0.50, 0.80, 0.00, 0.50, 0.80, 0.80, 0.50, 0.00, 0.10, 0.00, 0.00, + HVB = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 3.00, 3.50, 3.00, 4.00, 3.50, 3.00, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + DEN = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, + RC = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.00, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.07, 0.10, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.00, 0.11, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.35, 0.45, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.00, 0.58, 0.45, 0.00, 0.45, 0.45, 0.45, 0.45, 0.00, 0.45, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.00, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.00, 0.36, 0.16, 0.00, 0.16, 0.16, 0.16, 0.16, 0.00, 0.16, 0.00, 0.00, + 0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.00, 0.58, 0.39, 0.00, 0.39, 0.39, 0.39, 0.39, 0.00, 0.39, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.00, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.07, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, + 0.00, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.10, 0.10, 0.25, 0.25, 0.10, 0.25, 0.10, 0.25, 0.00, 0.25, 0.25, 0.00, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.000, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.220, 0.001, 0.000, 0.220, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + 0.000, 0.380, 0.380, 0.380, 0.380, 0.380, 0.380, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.380, 0.001, 0.000, 0.380, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + + XL = 0.000, -0.30, -0.30, -0.30, -0.30, -0.30, -0.30, 0.010, 0.250, 0.010, 0.250, 0.010, 0.010, 0.010, 0.250, 0.000, -0.30, 0.250, 0.000, -0.30, 0.250, 0.250, 0.250, 0.000, 0.250, 0.000, 0.000, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.0, 1.6, 1.8, 1.2, 1.2, 1.30, 0.50, 0.65, 0.70, 0.65, 0.55, 0.2, 0.55, 0.5, 0.5, 0.0, 1.4, 1.4, 0.0, 1.2, 1.3, 1.4, 1.0, 0.0, 1.0, 0.0, 0.0, + DILEFC= 0.00, 0.50, 0.50, 0.50, 0.35, 0.20, 0.20, 0.20, 0.50, 0.50, 0.60, 1.80, 0.50, 1.20, 0.80, 0.00, 0.40, 0.40, 0.00, 0.40, 0.30, 0.40, 0.30, 0.00, 0.30, 0.00, 0.00, + DILEFW= 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.20, 0.50, 0.20, 0.20, 4.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.20, 0.20, 0.00, 0.20, 0.00, 0.00, + RMF25 = 0.00, 1.00, 1.40, 1.45, 1.45, 1.45, 1.80, 0.26, 0.26, 0.80, 3.00, 4.00, 0.65, 3.00, 3.00, 0.00, 3.20, 3.20, 0.00, 3.20, 3.00, 3.00, 3.00, 0.00, 3.00, 0.00, 0.00, + SLA = 60, 80, 80, 80, 80, 80, 60, 60, 60, 50, 80, 80, 80, 80, 80, 0, 80, 80, 0, 80, 80, 80, 80, 0, 80, 0, 0, + FRAGR = 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + TMIN = 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 268, 273, 265, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + VCMX25= 0.00, 80.0, 80.0, 80.0, 60.0, 70.0, 40.0, 40.0, 40.0, 40.0, 60.0, 60.0, 60.0, 50.0, 55.0, 0.00, 50.0, 50.0, 0.00, 50.0, 50.0, 50.0, 50.0, 0.00, 50.0, 0.00, 0.00, + TDLEF = 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 268, 278, 278, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + BP = 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 1.E15, + MP = 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0., 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.00, + RMS25 = 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.32, 0.10, 0.64, 0.30, 0.90, 0.80, 0.00, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, + RMR25 = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.20, 0.00, 0.00, 0.01, 0.01, 0.05, 0.05, 0.36, 0.03, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 0.00, + WDPOOL= 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, + WRRAT = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 30.0, 30.0, 30.0, 30.0, 30.0, 0.00, 0.00, 30.0, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, + MRP = 0.00, 0.23, 0.23, 0.23, 0.23, 0.23, 0.17, 0.19, 0.19, 0.40, 0.40, 0.37, 0.23, 0.37, 0.30, 0.00, 0.17, 0.40, 0.00, 0.17, 0.23, 0.20, 0.00, 0.00, 0.20, 0.00, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.3, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.3, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.1, 0.2, 0.1, 0.4, 0.4, 0.5, 0.4, 0.2, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.4, 0.2, 0.3, 0.1, 0.4, 0.7, 0.5, 0.5, 0.4, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.3, 0.3, 0.8, 0.2, 0.5, 0.1, 0.9, 1.3, 0.5, 0.5, 0.4, 0.0, 0.4, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.5, 0.2, 1.3, 0.1, 0.8, 0.1, 1.2, 1.2, 0.5, 0.6, 0.5, 0.0, 0.6, 0.6, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.4, 0.1, 1.1, 0.1, 0.5, 0.1, 1.6, 1.0, 0.5, 0.6, 0.5, 0.0, 0.5, 0.5, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.4, 0.1, 0.2, 0.1, 1.4, 0.8, 0.5, 0.7, 0.6, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.6, 0.6, 0.5, 0.6, 0.5, 0.0, 0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.4, 0.1, 0.2, 0.1, 0.4, 0.5, 0.5, 0.5, 0.3, 0.0, 0.1, 0.1, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + + LAIM = 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 1.6, 1.0, 0.0, 0.5, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 0.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.0, 3.5, 1.6, 1.0, 0.0, 0.6, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.7, 0.7, 0.7, 0.5, 0.7, 1.0, 1.5, 1.0, 1.2, 0.6, 3.5, 1.6, 1.0, 0.0, 0.7, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 1.2, 1.2, 1.2, 1.5, 1.2, 1.0, 2.0, 1.0, 3.0, 1.2, 3.5, 5.3, 2.3, 0.0, 1.2, 0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.0, 3.0, 3.0, 3.0, 2.5, 3.0, 1.0, 2.5, 1.0, 4.7, 2.0, 3.5, 5.5, 3.5, 0.0, 3.0, 0.7, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 3.5, 3.5, 3.5, 3.5, 3.5, 1.0, 3.0, 1.0, 4.5, 2.6, 3.5, 5.3, 4.3, 0.0, 3.5, 1.7, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.0, 1.5, 1.5, 1.5, 3.5, 1.5, 1.0, 2.5, 1.0, 3.4, 1.7, 3.5, 5.3, 3.3, 0.0, 1.5, 3.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.5, 0.7, 0.7, 0.7, 2.0, 0.7, 1.0, 1.5, 1.0, 1.2, 1.0, 3.5, 4.2, 2.2, 0.0, 0.7, 2.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.6, 0.6, 0.6, 1.0, 0.6, 1.0, 1.0, 1.0, 0.3, 0.5, 3.5, 2.2, 1.2, 0.0, 0.6, 1.6, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0, 1.0, 0.0, 0.2, 3.5, 2.2, 1.2, 0.0, 0.5, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.4, 0.4, 0.0, 0.4, 1.0, 1.0, 1.0, 0.0, 0.0, 3.5, 2.2, 1.2, 0.0, 0.4, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + + SLAREA=0.0228,0.0200,0.0200,0.0295,0.0223,0.0277,0.0060,0.0227,0.0188,0.0236,0.0258,0.0200,0.0200,0.0090,0.0223,0.0422,0.0390, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 41.87, 0.00, 0.00, 2.52, 0.04, 17.11, 0.02, 21.62, 0.11, 22.80, 46.86, 0.00, 0.00, 0.46, 30.98, 2.31, 1.63, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.98, 0.00, 0.00, 0.16, 0.09, 0.28, 0.05, 0.92, 0.22, 0.59, 0.38, 0.00, 0.00, 3.34, 0.96, 1.47, 1.07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.82, 0.00, 0.00, 0.23, 0.05, 0.81, 0.03, 1.73, 1.26, 1.37, 1.84, 0.00, 0.00, 1.85, 1.84, 1.70, 1.21, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ + + +&noah_mp_modis_veg_categories + VEG_DATASET_DESCRIPTION = "modified igbp modis noah" + NVEG = 20 +/ + +&noah_mp_modis_parameters +! 1 'Evergreen Needleleaf Forest' -> USGS 14 +! 2, 'Evergreen Broadleaf Forest' -> USGS 13 +! 3, 'Deciduous Needleleaf Forest' -> USGS 12 +! 4, 'Deciduous Broadleaf Forest' -> USGS 11 +! 5, 'Mixed Forests' -> USGS 15 +! 6, 'Closed Shrublands' -> USGS 8 "shrubland" +! 7, 'Open Shrublands' -> USGS 9 "shrubland/grassland" +! 8, 'Woody Savannas' -> USGS 8 "shrubland" +! 9, 'Savannas' -> USGS 10 +! 10, 'Grasslands' -> USGS 7 +! 11 'Permanent wetlands' -> avg of USGS 17 and 18 (herb. wooded wetland) +! 12, 'Croplands' -> USGS 2 "dryland cropland" +! 13, 'Urban and Built-Up' -> USGS 1 +! 14 'cropland/natural vegetation mosaic' -> USGS 5 "cropland/grassland" +! 15, 'Snow and Ice' -> USGS 24 +! 16, 'Barren or Sparsely Vegetated' -> USGS 19 +! 17, 'Water' -> USGS 16 +! 18, 'Wooded Tundra' -> USGS 21 +! 19, 'Mixed Tundra' -> USGS 22 +! 20, 'Barren Tundra' -> USGS 23 + + ISURBAN = 13 + ISWATER = 17 + ISBARREN = 16 + ISSNOW = 15 + EBLFOREST = 2 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + CH2OP = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + DLEAF = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + Z0MVT = 1.09, 1.10, 0.85, 0.80, 0.80, 0.06, 0.06, 0.06, 0.86, 0.06, 0.055, 0.06, 1.00, 0.06, 0.00, 0.00, 0.00, 0.06, 0.06, 0.03, +! Z0MVT = 0.50, 0.50, 0.50, 0.50, 0.50, 0.05, 0.06, 0.05, 0.15, 0.12, 0.30, 0.15, 0.80, 0.14, 0.00, 0.01, 0.00, 0.30, 0.15, 0.10, + HVT = 20.0, 20.0, 18.0, 16.0, 16.0, 0.50, 0.50, 0.50, 16.0, 0.50, 0.65, 0.50, 15.0, 0.50, 0.00, 0.00, 0.00, 0.80, 0.80, 0.50, + HVB = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 5.00, 0.05, 0.075, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + DEN = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, + RC = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, + + ! Row 1: Vis + ! Row 2: Near IR + RHOL = 0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + 0.35, 0.45, 0.35, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.58, 0.515, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.45, 0.45, 0.45, + + ! Row 1: Vis + ! Row 2: Near IR + RHOS = 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, 0.00, 0.36, 0.00, 0.00, 0.00, 0.16, 0.16, 0.16, + 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.58, 0.485, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.39, 0.39, 0.39, + + ! Row 1: Vis + ! Row 2: Near IR + TAUL = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, 0.00, 0.07, 0.00, 0.00, 0.00, 0.05, 0.05, 0.05, + 0.10, 0.25, 0.10, 0.25, 0.25, 0.10, 0.10, 0.10, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, 0.00, 0.25, 0.25, 0.25, + + ! Row 1: Vis + ! Row 2: Near IR + TAUS = 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.220, 0.1105, 0.220, 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.380, 0.1905, 0.380, 0.000, 0.380, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + + XL = 0.010, 0.010, 0.010, 0.250, 0.250, 0.010, 0.250, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, + CWPVT = 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, +! CWPVT = 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, + C3PSN = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + KC25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + AKC = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + KO25 = 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, 3.E4, + AKO = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + AVCMX = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + AQE = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + LTOVRC= 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, 0.70, 0.65, 0.65, 0.50, 1.4, 1.6, 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, 1.4, 1.0, + DILEFC= 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, 0.50, 0.20, 0.50, 0.20, 0.4, 0.50, 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, 0.40, 0.30, + DILEFW= 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, 0.20, 0.20, + RMF25 = 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, + SLA = 80, 80, 80, 80, 80, 60, 60, 60, 50, 60, 80, 80, 60, 80, 0, 0, 0, 80, 80, 80, + FRAGR = 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, 0.10, 0.10, + TMIN = 265, 273, 268, 273, 268, 273, 273, 273, 273, 273, 268, 273, 0, 273, 0, 0, 0, 268, 268, 268, + VCMX25= 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, 50.0, 50.0, + TDLEF = 278, 278, 268, 278, 268, 278, 278, 278, 278, 278, 268, 278, 278, 278, 0, 0, 0, 268, 268, 268, + BP = 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 1.E15, 2.E3, 2.E3, 2.E3, + MP = 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + QE25 = 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, 0.06, 0.06, + RMS25 = 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.00, + RMR25 = 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 0.00, + ARM = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + FOLNMX= 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, 1.5, 1.5, + WDPOOL= 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, + WRRAT = 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, + MRP = 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, 0.19, 0.19, 0.40, 0.17, 0.285, 0.23, 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, 0.20, 0.00, + +! Monthly values, one row for each month: + SAIM = 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.3, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.3, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.4, 0.5, 0.4, 0.4, 0.2, 0.1, 0.2, 0.1, 0.1, 0.3, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + 0.5, 0.5, 0.7, 0.4, 0.4, 0.2, 0.3, 0.2, 0.1, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 1.3, 0.9, 0.4, 0.2, 0.5, 0.2, 0.1, 0.8, 0.4, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 1.2, 1.2, 0.5, 0.1, 0.8, 0.1, 0.1, 1.3, 0.6, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.6, 0.5, 1.0, 1.6, 0.5, 0.1, 0.5, 0.1, 0.1, 1.1, 0.5, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + 0.7, 0.5, 0.8, 1.4, 0.6, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.6, 0.5, 0.6, 0.6, 0.5, 0.1, 0.2, 0.1, 0.1, 0.4, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 0.5, 0.5, 0.5, 0.4, 0.3, 0.1, 0.2, 0.1, 0.1, 0.4, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, + + LAIM = 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.4, 0.3, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.45, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.0, 0.3, 1.0, 1.0, 1.0, 1.0, 1.0, 0.6, 0.5, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.6, 4.5, 0.6, 1.2, 1.0, 1.0, 1.5, 1.0, 1.0, 0.7, 0.55, 0.0, 0.0, 0.7, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 5.3, 4.5, 1.2, 3.0, 2.3, 1.0, 2.0, 1.0, 1.0, 1.2, 0.85, 1.0, 0.0, 1.2, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 5.5, 4.5, 2.0, 4.7, 3.5, 1.0, 2.5, 1.0, 1.0, 3.0, 1.85, 2.0, 0.0, 3.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 5.3, 4.5, 2.6, 4.5, 4.3, 1.0, 3.0, 1.0, 1.0, 3.5, 2.6, 3.0, 0.0, 3.5, 0.0, 0.0, 0.0, 2.0, 2.0, 0.0, + 5.3, 4.5, 1.7, 3.4, 3.3, 1.0, 2.5, 1.0, 1.0, 1.5, 2.25, 3.0, 0.0, 1.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, + 4.2, 4.5, 1.0, 1.2, 2.2, 1.0, 1.5, 1.0, 1.0, 0.7, 1.6, 1.5, 0.0, 0.7, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, + 2.2, 4.5, 0.5, 0.3, 1.2, 1.0, 1.0, 1.0, 1.0, 0.6, 1.1, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + 2.2, 4.5, 0.2, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.5, 0.65, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2.2, 4.5, 0.0, 0.0, 1.2, 1.0, 1.0, 1.0, 1.0, 0.4, 0.4, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + +! LAIM = 5.1, 3.3, 0.0, 1.9, 3.0, 1.0, 0.8, 0.5, 0.5, 0.7, 0.3, 1.8, 0.0, 2.4, 0.0, 0.0, 0.0, 0.6, 0.7, 0.0, +! 5.0, 3.6, 0.0, 1.9, 2.9, 1.0, 0.6, 1.0, 1.0, 0.7, 0.45, 1.9, 0.0, 2.6, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.1, 4.4, 0.0, 2.1, 3.3, 1.0, 0.8, 1.8, 1.7, 1.1, 0.5, 2.6, 0.0, 2.9, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.3, 5.4, 0.6, 2.5, 4.0, 1.0, 0.9, 2.6, 2.9, 1.7, 0.55, 3.9, 0.0, 3.4, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, +! 5.9, 6.2, 1.2, 3.1, 5.0, 1.0, 1.5, 3.4, 3.6, 2.5, 0.85, 5.2, 0.0, 4.0, 0.0, 0.0, 0.0, 0.8, 1.0, 0.0, +! 6.3, 6.4, 2.0, 3.3, 5.4, 1.0, 2.1, 3.6, 3.5, 2.7, 1.85, 5.6, 0.0, 4.2, 0.0, 0.0, 0.0, 2.0, 2.3, 0.0, +! 6.4, 5.9, 2.6, 3.3, 5.4, 1.0, 2.6, 3.4, 2.9, 2.8, 2.6, 5.3, 0.0, 4.1, 0.0, 0.0, 0.0, 3.3, 3.3, 0.0, +! 6.1, 5.6, 1.7, 3.1, 5.0, 1.0, 2.4, 3.2, 2.7, 2.4, 2.25, 4.5, 0.0, 3.8, 0.0, 0.0, 0.0, 3.3, 3.0, 0.0, +! 6.0, 5.3, 1.0, 2.9, 4.8, 1.0, 2.2, 2.9, 2.4, 2.1, 1.6, 4.1, 0.0, 3.7, 0.0, 0.0, 0.0, 2.8, 3.0, 0.0, +! 5.5, 4.7, 0.5, 2.6, 4.1, 1.0, 1.6, 2.3, 1.8, 1.7, 1.1, 3.2, 0.0, 3.2, 0.0, 0.0, 0.0, 1.4, 1.4, 0.0, +! 5.2, 4.0, 0.2, 2.2, 3.4, 1.0, 1.0, 1.5, 1.4, 1.3, 0.65, 2.3, 0.0, 2.7, 0.0, 0.0, 0.0, 0.5, 0.7, 0.0, +! 5.1, 3.2, 0.0, 1.9, 3.0, 1.0, 0.9, 0.7, 0.7, 0.8, 0.4, 1.7, 0.0, 2.4, 0.0, 0.0, 0.0, 0.8, 0.7, 0.0, + + SLAREA=0.0090, 0.0200, 0.0200, 0.0258, 0.0223, 0.0227, 0.0188, 0.0227, 0.0236, 0.0060, 0.0295, 0.0200, 0.0228, 0.0223, 0.02, 0.02, 0.0422, 0.02, 0.02, 0.02, + +! Five types, one row for each type. + EPS = 0.46, 0.00, 0.00, 46.86, 30.98, 21.62, 0.11, 21.62, 22.80, 0.02, 0.815, 0.00, 41.87, 0.04, 0.0, 0.0, 2.31, 0.0, 0.0, 0.0, + 3.34, 0.00, 0.00, 0.38, 0.96, 0.92, 0.22, 0.92, 0.59, 0.05, 0.535, 0.00, 0.98, 0.09, 0.0, 0.0, 1.47, 0.0, 0.0, 0.0, + 1.85, 0.00, 0.00, 1.84, 1.84, 1.73, 1.26, 1.73, 1.37, 0.03, 0.605, 0.00, 1.82, 0.05, 0.0, 0.0, 1.70, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ diff --git a/utils/laugh_tests/wigmosta1999/settings/SOILPARM.TBL b/utils/laugh_tests/wigmosta1999/settings/SOILPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..b87d1bae502460279b1e6389ff34c2d3ce842510 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/SOILPARM.TBL @@ -0,0 +1,59 @@ +Soil Parameters +STAS +19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 2.79, 0.010, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.010, 0.92, 'SAND' +2, 4.26, 0.028, -1.044, 0.421, 0.383, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.82, 'LOAMY SAND' +3, 4.74, 0.047, -0.569, 0.434, 0.383, 0.141, 5.23E-6, 0.805E-5, 0.047, 0.60, 'SANDY LOAM' +4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.25, 'SILT LOAM' +5, 5.33, 0.084, 0.162, 0.476, 0.383, 0.759, 2.81E-6, 0.239E-4, 0.084, 0.10, 'SILT' +6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.40, 'LOAM' +7, 6.66, 0.067, -1.491, 0.404, 0.314, 0.135, 4.45E-6, 0.990E-5, 0.067, 0.60, 'SANDY CLAY LOAM' +8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.04E-6, 0.237E-4, 0.120, 0.10, 'SILTY CLAY LOAM' +9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 0.113E-4, 0.103, 0.35, 'CLAY LOAM' +10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 0.187E-4, 0.100, 0.52, 'SANDY CLAY' +11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 0.964E-5, 0.126, 0.10, 'SILTY CLAY' +12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 0.112E-4, 0.138, 0.25, 'CLAY' +13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 0.143E-4, 0.066, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 'WATER' +15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.07, 'BEDROCK' +16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 0.514E-5, 0.028, 0.25, 'OTHER(land-ice)' +17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 'LAVA' +19, 2.79, 0.01, -0.472, 0.339, 0.236, 0.069, 1.07E-6, 0.608E-6, 0.01, 0.92, 'WHITE SAND' +Soil Parameters +STAS-RUC +19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 4.05, 0.045, 1.47, 0.395, 0.236, 0.121, 1.76E-4, 0.608E-6, 0.068, 0.92, 'SAND' +2, 4.38, 0.057, 1.41, 0.410, 0.383, 0.090, 1.56E-4, 0.514E-5, 0.075, 0.82, 'LOAMY SAND' +3, 4.90, 0.065, 1.34, 0.435, 0.383, 0.218, 3.47E-5, 0.805E-5, 0.114, 0.60, 'SANDY LOAM' +4, 5.30, 0.067, 1.27, 0.485, 0.360, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.25, 'SILT LOAM' +5, 5.30, 0.034, 1.27, 0.485, 0.383, 0.786, 7.20E-6, 0.239E-4, 0.179, 0.10, 'SILT' +6, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.40, 'LOAM' +7, 7.12, 0.100, 1.18, 0.420, 0.314, 0.299, 6.30E-6, 0.990E-5, 0.175, 0.60, 'SANDY CLAY LOAM' +8, 7.75, 0.089, 1.32, 0.477, 0.387, 0.356, 1.70E-6, 0.237E-4, 0.218, 0.10, 'SILTY CLAY LOAM' +9, 8.52, 0.095, 1.23, 0.476, 0.382, 0.630, 2.45E-6, 0.113E-4, 0.250, 0.35, 'CLAY LOAM' +10, 10.40, 0.100, 1.18, 0.426, 0.338, 0.153, 2.17E-6, 0.187E-4, 0.219, 0.52, 'SANDY CLAY' +11, 10.40, 0.070, 1.15, 0.492, 0.404, 0.490, 1.03E-6, 0.964E-5, 0.283, 0.10, 'SILTY CLAY' +12, 11.40, 0.068, 1.09, 0.482, 0.412, 0.405, 1.28E-6, 0.112E-4, 0.286, 0.25, 'CLAY' +13, 5.39, 0.078, 1.21, 0.451, 0.329, 0.478, 6.95E-6, 0.143E-4, 0.155, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 'WATER' +15, 4.05, 0.004, 2.03, 0.200, 0.17, 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 'BEDROCK' +16, 4.90, 0.065, 2.10, 0.435, 0.283, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 'OTHER(land-ice)' +17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.060, 0.52, 'LAVA' +19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 'WHITE SAND' +Soil Parameters +ROSETTA +12,1 'theta_res theta_sat vGn_alpha vGn_n k_soil BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1 0.098 0.459 -1.496 1.253 1.70799e-06 1.40 0.068 1.09 0.482 0.412 0.405 1.28E-6 0.112E-4 0.286 0.25 'CLAY' +2 0.079 0.442 -1.581 1.416 9.47297e-07 8.52 0.095 1.23 0.476 0.382 0.630 2.45E-6 0.113E-4 0.250 0.35 'CLAY LOAM' +3 0.061 0.399 -1.112 1.472 1.39472e-06 5.39 0.078 1.21 0.451 0.329 0.478 6.95E-6 0.143E-4 0.155 0.40 'LOAM' +4 0.049 0.390 -3.475 1.746 1.21755e-05 4.38 0.057 1.41 0.410 0.383 0.090 1.56E-4 0.514E-5 0.075 0.82 'LOAMY SAND' +5 0.053 0.375 -3.524 3.177 7.43852e-05 4.05 0.045 1.47 0.395 0.236 0.121 1.76E-4 0.608E-6 0.068 0.92 'SAND' +6 0.117 0.385 -3.342 1.208 1.31367e-06 0.40 0.100 1.18 0.426 0.338 0.153 2.17E-6 0.187E-4 0.219 0.52 'SANDY CLAY' +7 0.063 0.384 -2.109 1.330 1.52576e-06 7.12 0.100 1.18 0.420 0.314 0.299 6.30E-6 0.990E-5 0.175 0.60 'SANDY CLAY LOAM' +8 0.039 0.387 -2.667 1.449 4.43084e-06 4.90 0.065 1.34 0.435 0.383 0.218 3.47E-5 0.805E-5 0.114 0.60 'SANDY LOAM' +9 0.050 0.489 -0.658 1.679 5.06391e-06 5.30 0.034 1.27 0.485 0.383 0.786 7.20E-6 0.239E-4 0.179 0.10 'SILT' +10 0.111 0.481 -1.622 1.321 1.11298e-06 0.40 0.070 1.15 0.492 0.404 0.490 1.03E-6 0.964E-5 0.283 0.10 'SILTY CLAY' +11 0.090 0.482 -0.839 1.521 1.28673e-06 7.75 0.089 1.32 0.477 0.387 0.356 1.70E-6 0.237E-4 0.218 0.10 'SILTY CLAY LOAM' +12 0.065 0.439 -0.506 1.663 2.11099e-06 5.30 0.067 1.27 0.485 0.360 0.786 7.20E-6 0.239E-4 0.179 0.25 'SILT LOAM' diff --git a/utils/laugh_tests/wigmosta1999/settings/VEGPARM.TBL b/utils/laugh_tests/wigmosta1999/settings/VEGPARM.TBL new file mode 100644 index 0000000000000000000000000000000000000000..be03224ef59386e2503e147729ffeaef9aa12553 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/VEGPARM.TBL @@ -0,0 +1,119 @@ +Vegetation Parameters +USGS +27,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ' +1, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up Land' +2, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Dryland Cropland and Pasture' +3, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 'Irrigated Cropland and Pasture' +4, .80, 3, 40., 100., 36.25, 0.04, 66., 1.00, 4.50, .920, .985, .18, .23, .05, .15, 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'Cropland/Grassland Mosaic' +6, .80, 3, 70., 65., 44.14, 0.04, 60., 2.00, 4.00, .930, .985, .16, .20, .20, .20, 'Cropland/Woodland Mosaic' +7, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grassland' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Shrubland' +9, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Mixed Shrubland/Grassland' +10, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savanna' +11, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +12, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +13, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +14, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +15, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forest' +16, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water Bodies' +17, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 'Herbaceous Wetland' +18, .60, 2, 100., 30., 51.93, 0.02, 50., 2.00, 5.80, .950, .950, .14, .14, .40, .40, 'Wooded Wetland' +19, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +20, .60, 3, 150., 100., 42.00, 0.025, 68., 0.41, 3.35, .920, .920, .15, .20, .10, .10, 'Herbaceous Tundra' +21, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +22, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +23, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Bare Ground Tundra' +24, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow or Ice' +25, .50, 1, 40., 100., 36.25, 0.02, 75., 0.01, 0.01, .890, .890, .30, .30, .01, .01, 'Playa' +26, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .880, .880, .16, .16, .15, .15, 'Lava' +27, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .830, .830, .60, .60, .01, .01, 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 +Vegetation Parameters +MODIFIED_IGBP_MODIS_NOAH +20,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX' +1 .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 'Evergreen Needleleaf Forest' +2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 'Evergreen Broadleaf Forest' +3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 'Deciduous Needleleaf Forest' +4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 'Deciduous Broadleaf Forest' +5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 'Mixed Forests' +6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Closed Shrublands' +7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 'Open Shrublands' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 'Woody Savannas' +9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 'Savannas' +10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 'Grasslands' +11 .60, 2, 70., 65., 55.97 0.015 59., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 'Permanent wetlands' +12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 'Croplands' +13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 'Urban and Built-Up' +14 .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 'cropland/natural vegetation mosaic' +15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 'Snow and Ice' +16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 'Barren or Sparsely Vegetated' +17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 'Water' +18, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 'Wooded Tundra' +19, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 'Mixed Tundra' +20, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 'Barren Tundra' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +16 +NATURAL +14 +Vegetation Parameters +USGS-RUC +27,1, 'ALBEDO Z0 LEMI PC SHDFAC NROOT RS RGL HS SNUP LAI MAXALB' +1, .18, .50, .88, .40, .10, 1, 200., 999., 999.0, 0.04, 4.0, 40., 'Urban and Built-Up Land' +2, .17, .06, .92, .30, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Dryland Cropland and Pasture' +3, .18, .075, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Irrigated Cropland and Pasture' +4, .18, .065, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .18, .05, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.0, 64., 'Cropland/Grassland Mosaic' +6, .16, .20, .93, .40, .80, 3, 70., 65., 44.14, 0.04, 4.0, 60., 'Cropland/Woodland Mosaic' +7, .19, .075 .92, .40, .80, 3, 40., 100., 36.35, 0.04, 4.0, 64., 'Grassland' +8, .22, .10, .88, .40, .70, 3, 300., 100., 42.00, 0.03, 4.0, 69., 'Shrubland' +9, .20, .11, .90, .40, .70, 3, 170., 100., 39.18, 0.035, 4.0, 67., 'Mixed Shrubland/Grassland' +10, .20, .15, .92, .40, .50, 3, 70., 65., 54.53, 0.04, 4.0, 45., 'Savanna' +11, .16, .50, .93, .55, .80, 4, 100., 30., 54.53, 0.08, 4.0, 58., 'Deciduous Broadleaf Forest' +12, .14, .50, .94, .55, .70, 4, 150., 30., 47.35, 0.08, 4.0, 54., 'Deciduous Needleleaf Forest' +13, .12, .50, .95, .55, .95, 4, 150., 30., 41.69, 0.08, 4.0, 32., 'Evergreen Broadleaf Forest' +14, .12, .50, .95, .55, .70, 4, 125., 30., 47.35, 0.08, 4.0, 52., 'Evergreen Needleleaf Forest' +15, .13, .50, .94, .55, .80, 4, 125., 30., 51.93, 0.08, 4.0, 53., 'Mixed Forest' +16, .08, .0001, .98, .00, .00, 0, 100., 30., 51.75, 0.01, 4.0, 70., 'Water Bodies' +17, .14, .20, .95, .55, .60, 2, 40., 100., 60.00, 0.01, 4.0, 35., 'Herbaceous Wetland' +18, .14, .40, .95, .55, .60, 2, 100., 30., 51.93, 0.02, 4.0, 30., 'Wooded Wetland' +19, .25, .05, .85, .30, .01, 1, 999., 999., 999.0, 0.02, 4.0, 69., 'Barren or Sparsely Vegetated' +20, .15, .10, .92, .30, .60, 3, 150., 100., 42.00, 0.025, 4.0, 58., 'Herbaceous Tundra' +21, .15, .15, .93, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Wooded Tundra' +22, .15, .10, .92, .40, .60, 3, 150., 100., 42.00, 0.025, 4.0, 55., 'Mixed Tundra' +23, .25, .065 .85, .30, .30, 2, 200., 100., 42.00, 0.02, 4.0, 65., 'Bare Ground Tundra' +24, .55, .05, .95, .00, .00, 1, 999., 999., 999.0, 0.02, 4.0, 75., 'Snow or Ice' +25, .30, .01, .85, .30, .50, 1, 40., 100., 36.25, 0.02, 4.0, 69., 'Playa' +26, .16, .15, .85, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'Lava' +27, .60, .01, .90, .00, .00, 0, 999., 999., 999.0, 0.02, 4.0, 69., 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 diff --git a/utils/laugh_tests/wigmosta1999/settings/meta/summa_zBasinModelVarMeta.txt b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zBasinModelVarMeta.txt new file mode 100644 index 0000000000000000000000000000000000000000..255507da5241e5c5df051dd37c3a6220e383712b --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zBasinModelVarMeta.txt @@ -0,0 +1,44 @@ +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! ***** DEFINITION OF BASIN VARIABLES ************************************************************************************************* +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "|" must be present (format a1), as these are used to check the integrety of the file +! ************************************************************************************************************************************* +! columns are: +! 1: variable name +! 2: variable description +! 3: variable units +! 4: variable type (scalar, separate parameter for each model layer, separate parameter at the interface of layers) +! 5: write variable to output file? (T/F) +! ************************************************************************************************************************************* +! define format string for parameter descriptions +! ************************************************************************************************************************************* +'(a35,(1x,a1,1x),a65,(1x,a1,1x),a15,(1x,a1,1x),a7,(1x,a1,1x),l1)' ! format string (must be in single quotes) +! ************************************************************************************************************************************* +! define variables +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! scalar variables (runoff and aquifer fluxes) +! ************************************************************************************************************************************* +basin__totalArea | total basin area | m2 | scalarv | T +basin__SurfaceRunoff | surface runoff | m s-1 | scalarv | T +basin__ColumnOutflow | outflow from all "outlet" HRUs (those with no downstream HRU) | m3 s-1 | scalarv | T +basin__AquiferStorage | aquifer storage | m | scalarv | F +basin__AquiferRecharge | recharge to the aquifer | m s-1 | scalarv | F +basin__AquiferBaseflow | baseflow from the aquifer | m s-1 | scalarv | F +basin__AquiferTranspire | transpiration loss from the aquifer | m s-1 | scalarv | F +! ************************************************************************************************************************************* +! runoff +! ************************************************************************************************************************************* +routingRunoffFuture | runoff in future time steps | m s-1 | routing | F +routingFractionFuture | fraction of runoff in future time steps | - | routing | F +averageInstantRunoff | instantaneous runoff | m s-1 | scalarv | T +averageRoutedRunoff | routed runoff | m s-1 | scalarv | T +! ************************************************************************************************************************************* diff --git a/utils/laugh_tests/wigmosta1999/settings/meta/summa_zBasinParamMeta.txt b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zBasinParamMeta.txt new file mode 100644 index 0000000000000000000000000000000000000000..94257c0db81f8ba57e9c80ce68baedc4e9914ba6 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zBasinParamMeta.txt @@ -0,0 +1,32 @@ +! ********************************************************************************************************************** +! ********************************************************************************************************************** +! ***** DEFINITION OF BASIN PARAMETERS ********************************************************************************* +! ********************************************************************************************************************** +! ********************************************************************************************************************** +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: parameter description +! 3: parameter units +! 4: parameter type (scalar, separate parameter for each model layer, separate parameter at the interface of layers) +! 5: write parameter to output file? (T/F) +! ********************************************************************************************************************** +! define format string for parameter descriptions +! ********************************************************************************************************************** +'(a25,(1x,a1,1x),a65,(1x,a1,1x),a10,(1x,a1,1x),a7,(1x,a1,1x),L1)' ! format string (must be in single quotes) +! ********************************************************************************************************************** +! baseflow +! ********************************************************************************************************************** +basin__aquiferHydCond | hydraulic conductivity of the aquifer | m s-1 | scalarv | T +basin__aquiferScaleFactor | scaling factor for aquifer storage in the big bucket | m | scalarv | T +basin__aquiferBaseflowExp | baseflow exponent for the big bucket | - | scalarv | T +! ********************************************************************************************************************** +! sub-grid routing +! ********************************************************************************************************************** +routingGammaShape | shape parameter in Gamma distribution used for sub-grid routing | - | scalarv | T +routingGammaScale | scale parameter in Gamma distribution used for sub-grid routing | s | scalarv | T +! ********************************************************************************************************************** diff --git a/utils/laugh_tests/wigmosta1999/settings/meta/summa_zLocalModelIndexMeta.txt b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zLocalModelIndexMeta.txt new file mode 100644 index 0000000000000000000000000000000000000000..b88778a4ed3b8d9f35afcce2cc97f2225f142718 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zLocalModelIndexMeta.txt @@ -0,0 +1,35 @@ +! ************************************************************************************************************ +! ************************************************************************************************************ +! ***** DEFINITION OF MODEL INDEX VARIABLES ****************************************************************** +! ************************************************************************************************************ +! ************************************************************************************************************ +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! ************************************************************************************************************ +! columns are: +! 1: variable name +! 2: variable description +! 3: variable units +! 4: variable type (scalar, separate parameter for each model layer, separate parameter at the interface of layers) +! 5: write parameter to output file? (T/F) +! ************************************************************************************************************ +! define format string for variable descriptions +! ************************************************************************************************************ +'(a20,(1x,a1,1x),a60,(1x,a1,1x),a10,(1x,a1,1x),a7,(1x,a1,1x),L1)' ! format string (must be in single quotes) +! ************************************************************************************************************ +! define variables +! ************************************************************************************************************ +nSnow | number of snow layers | - | scalarv | T +nSoil | number of soil layers | - | scalarv | T +nLayers | total number of layers | - | scalarv | T +midSnowStartIndex | start index of the midSnow vector for a given timestep | - | scalarv | T +midSoilStartIndex | start index of the midSoil vector for a given timestep | - | scalarv | T +midTotoStartIndex | start index of the midToto vector for a given timestep | - | scalarv | T +ifcSnowStartIndex | start index of the ifcSnow vector for a given timestep | - | scalarv | T +ifcSoilStartIndex | start index of the ifcSoil vector for a given timestep | - | scalarv | T +ifcTotoStartIndex | start index of the ifcToto vector for a given timestep | - | scalarv | T +layerType | index defining type of layer (soil or snow) | - | midToto | F +! ************************************************************************************************************ diff --git a/utils/laugh_tests/wigmosta1999/settings/meta/summa_zLocalModelVarMeta.txt b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zLocalModelVarMeta.txt new file mode 100644 index 0000000000000000000000000000000000000000..a6d8661c6dc7570d2ff1165c373772f87f6f542c --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zLocalModelVarMeta.txt @@ -0,0 +1,285 @@ +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! ***** DEFINITION OF MODEL VARIABLES ************************************************************************************************* +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "|" must be present (format a1), as these are used to check the integrety of the file +! ************************************************************************************************************************************* +! columns are: +! 1: variable name +! 2: variable description +! 3: variable units +! 4: variable type (scalar, separate parameter for each model layer, separate parameter at the interface of layers) +! 5: write variable to output file? (T/F) +! ************************************************************************************************************************************* +! define format string for parameter descriptions +! ************************************************************************************************************************************* +'(a35,(1x,a1,1x),a65,(1x,a1,1x),a15,(1x,a1,1x),a7,(1x,a1,1x),l1)' ! format string (must be in single quotes) +! ************************************************************************************************************************************* +! define variables +! ************************************************************************************************************************************* +! ************************************************************************************************************************************* +! timestep-average fluxes for a few key variables +! ************************************************************************************************************************************* +totalSoilCompress | change in total soil storage due to compression of soil matrix | kg m-2 | scalarv | F +averageThroughfallSnow | snow that reaches the ground without ever touching the canopy | kg m-2 s-1 | scalarv | F +averageThroughfallRain | rain that reaches the ground without ever touching the canopy | kg m-2 s-1 | scalarv | F +averageCanopySnowUnloading | unloading of snow from the vegetion canopy | kg m-2 s-1 | scalarv | F +averageCanopyLiqDrainage | drainage of liquid water from the vegetation canopy | kg m-2 s-1 | scalarv | F +averageCanopyMeltFreeze | melt/freeze of water stored in the canopy | kg m-2 s-1 | scalarv | F +averageCanopyTranspiration | canopy transpiration | kg m-2 s-1 | scalarv | F +averageCanopyEvaporation | canopy evaporation/condensation | kg m-2 s-1 | scalarv | F +averageCanopySublimation | canopy sublimation/frost | kg m-2 s-1 | scalarv | F +averageSnowSublimation | snow sublimation/frost (below canopy or non-vegetated) | kg m-2 s-1 | scalarv | F +averageGroundEvaporation | ground evaporation/condensation (below canopy or non-vegetated) | kg m-2 s-1 | scalarv | T +averageRainPlusMelt | rain plus melt input to soil before calculating surface runoff | m s-1 | scalarv | F +averageSurfaceRunoff | surface runoff | m s-1 | scalarv | F +averageSoilInflux | influx of water at the top of the soil profile | m s-1 | scalarv | F +averageSoilBaseflow | total baseflow from throughout the soil profile | m s-1 | scalarv | T +averageSoilDrainage | drainage from the bottom of the soil profile | m s-1 | scalarv | F +averageAquiferRecharge | recharge to the aquifer | m s-1 | scalarv | F +averageAquiferBaseflow | baseflow from the aquifer | m s-1 | scalarv | F +averageAquiferTranspire | transpiration from the aquifer | m s-1 | scalarv | F +averageColumnOutflow | outflow from each layer in the soil profile | m3 s-1 | midSoil | T +! ************************************************************************************************************************************* +! scalar variables (forcing) +! ************************************************************************************************************************************* +scalarCosZenith | cosine of the solar zenith angle | - | scalarv | F +scalarFractionDirect | fraction of direct radiation (0-1) | - | scalarv | F +spectralIncomingDirect | incoming direct solar radiation in each wave band | W m-2 | wLength | F +spectralIncomingDiffuse | incoming diffuse solar radiation in each wave band | W m-2 | wLength | F +scalarVPair | vapor pressure of the air above the vegetation canopy | Pa | scalarv | F +scalarTwetbulb | wet bulb temperature | K | scalarv | F +scalarRainfall | computed rainfall rate | kg m-2 s-1 | scalarv | F +scalarSnowfall | computed snowfall rate | kg m-2 s-1 | scalarv | F +scalarSnowfallTemp | temperature of fresh snow | K | scalarv | F +scalarNewSnowDensity | density of fresh snow (should snow be falling in this time step) | kg m-3 | scalarv | F +scalarO2air | atmospheric o2 concentration | Pa | scalarv | F +scalarCO2air | atmospheric co2 concentration | Pa | scalarv | F +! ************************************************************************************************************************************* +! scalar variables (state variables) +! ************************************************************************************************************************************* +scalarCanopyIce | mass of ice on the vegetation canopy | kg m-2 | scalarv | F +scalarCanopyLiq | mass of liquid water on the vegetation canopy | kg m-2 | scalarv | F +scalarCanairTemp | temperature of the canopy air space | K | scalarv | F +scalarCanopyTemp | temperature of the vegetation canopy | K | scalarv | F +scalarSnowAge | non-dimensional snow age | - | scalarv | F +scalarSnowAlbedo | snow albedo for the entire spectral band | - | scalarv | F +spectralSnowAlbedoDirect | direct snow albedo for individual spectral bands | - | wLength | F +spectralSnowAlbedoDiffuse | diffuse snow albedo for individual spectral bands | - | wLength | F +scalarSnowDepth | total snow depth | m | scalarv | F +scalarSWE | snow water equivalent | kg m-2 | scalarv | F +scalarSfcMeltPond | ponded water caused by melt of the "snow without a layer" | kg m-2 | scalarv | F +scalarAquiferStorage | water required to bring aquifer to the bottom of the soil profile | m | scalarv | F +scalarSurfaceTemp | surface temperature (just a copy of the upper-layer temperature) | K | scalarv | F +! ************************************************************************************************************************************* +! NOAH-MP vegetation variables (general) +! ************************************************************************************************************************************* +scalarGreenVegFraction | green vegetation fraction (used to compute LAI) | - | scalarv | F +scalarBulkVolHeatCapVeg | bulk volumetric heat capacity of vegetation | J m-3 K-1 | scalarv | F +scalarRootZoneTemp | average temperature of the root zone | K | scalarv | F +scalarLAI | one-sided leaf area index | m2 m-2 | scalarv | F +scalarSAI | one-sided stem area index | m2 m-2 | scalarv | F +scalarExposedLAI | exposed leaf area index (after burial by snow) | m2 m-2 | scalarv | F +scalarExposedSAI | exposed stem area index (after burial by snow) | m2 m-2 | scalarv | F +scalarCanopyIceMax | maximum interception storage capacity for ice | kg m-2 | scalarv | F +scalarCanopyLiqMax | maximum interception storage capacity for liquid water | kg m-2 | scalarv | F +scalarGrowingSeasonIndex | growing season index (0=off, 1=on) | - | scalarv | F +scalarVP_CanopyAir | vapor pressure of the canopy air space | Pa | scalarv | F +! ************************************************************************************************************************************* +! NOAH-MP vegetation variables (shortwave radiation) +! ************************************************************************************************************************************* +scalarCanopySunlitFraction | sunlit fraction of canopy | - | scalarv | F +scalarCanopySunlitLAI | sunlit leaf area | - | scalarv | F +scalarCanopyShadedLAI | shaded leaf area | - | scalarv | F +scalarCanopySunlitPAR | average absorbed par for sunlit leaves | W m-2 | scalarv | F +scalarCanopyShadedPAR | average absorbed par for shaded leaves | W m-2 | scalarv | F +spectralBelowCanopyDirect | downward direct flux below veg layer for each spectral band | W m-2 | wLength | F +spectralBelowCanopyDiffuse | downward diffuse flux below veg layer for each spectral band | W m-2 | wLength | F +scalarBelowCanopySolar | solar radiation transmitted below the canopy | W m-2 | scalarv | F +spectralAlbGndDirect | direct albedo of underlying surface for each spectral band | - | wLength | F +spectralAlbGndDiffuse | diffuse albedo of underlying surface for each spectral band | - | wLength | F +scalarGroundAlbedo | albedo of the ground surface | - | scalarv | F +scalarCanopyAbsorbedSolar | solar radiation absorbed by canopy | W m-2 | scalarv | F +scalarGroundAbsorbedSolar | solar radiation absorbed by ground | W m-2 | scalarv | F +! ************************************************************************************************************************************* +! NOAH-MP vegetation variables (longwave radiation) +! ************************************************************************************************************************************* +scalarCanopyEmissivity | effective canopy emissivity | - | scalarv | F +scalarLWRadCanopy | longwave radiation emitted from the canopy | W m-2 | scalarv | F +scalarLWRadGround | longwave radiation emitted at the ground surface | W m-2 | scalarv | F +scalarLWRadUbound2Canopy | downward atmospheric longwave radiation absorbed by the canopy | W m-2 | scalarv | F +scalarLWRadUbound2Ground | downward atmospheric longwave radiation absorbed by the ground | W m-2 | scalarv | F +scalarLWRadUbound2Ubound | atmospheric radiation refl by ground + lost thru upper boundary | W m-2 | scalarv | F +scalarLWRadCanopy2Ubound | longwave radiation emitted from canopy lost thru upper boundary | W m-2 | scalarv | F +scalarLWRadCanopy2Ground | longwave radiation emitted from canopy absorbed by the ground | W m-2 | scalarv | F +scalarLWRadCanopy2Canopy | canopy longwave reflected from ground and absorbed by the canopy | W m-2 | scalarv | F +scalarLWRadGround2Ubound | longwave radiation emitted from ground lost thru upper boundary | W m-2 | scalarv | F +scalarLWRadGround2Canopy | longwave radiation emitted from ground and absorbed by the canopy | W m-2 | scalarv | F +scalarLWNetCanopy | net longwave radiation at the canopy | W m-2 | scalarv | F +scalarLWNetGround | net longwave radiation at the ground surface | W m-2 | scalarv | F +scalarLWNetUbound | net longwave radiation at the upper atmospheric boundary | W m-2 | scalarv | F +! ************************************************************************************************************************************* +! NOAH-MP vegetation variables (turbulent heat transfer) +! ************************************************************************************************************************************* +scalarLatHeatSubVapCanopy | latent heat of sublimation/vaporization used for veg canopy | J kg-1 | scalarv | F +scalarLatHeatSubVapGround | latent heat of sublimation/vaporization used for ground surface | J kg-1 | scalarv | F +scalarSatVP_CanopyTemp | saturation vapor pressure at the temperature of vegetation canopy | Pa | scalarv | F +scalarSatVP_GroundTemp | saturation vapor pressure at the temperature of the ground | Pa | scalarv | F +scalarZ0Canopy | roughness length of the canopy | m | scalarv | F +scalarWindReductionFactor | canopy wind reduction factor | - | scalarv | F +scalarZeroPlaneDisplacement | zero plane displacement | m | scalarv | F +scalarRiBulkCanopy | bulk Richardson number for the canopy | - | scalarv | F +scalarRiBulkGround | bulk Richardson number for the ground surface | - | scalarv | F +scalarCanopyStabilityCorrection | stability correction for the canopy | - | scalarv | F +scalarGroundStabilityCorrection | stability correction for the ground surface | - | scalarv | F +scalarEddyDiffusCanopyTop | eddy diffusivity for heat at the top of the canopy | m2 s-1 | scalarv | F +scalarFrictionVelocity | friction velocity (canopy momentum sink) | m s-1 | scalarv | F +scalarWindspdCanopyTop | windspeed at the top of the canopy | m s-1 | scalarv | F +scalarWindspdCanopyBottom | windspeed at the height of the bottom of the canopy | m s-1 | scalarv | F +scalarGroundResistance | below canopy aerodynamic resistance | s m-1 | scalarv | F +scalarCanopyResistance | above canopy aerodynamic resistance | s m-1 | scalarv | F +scalarLeafResistance | mean leaf boundary layer resistance per unit leaf area | s m-1 | scalarv | F +scalarSoilResistance | soil surface resistance | s m-1 | scalarv | F +scalarSoilRelHumidity | relative humidity in the soil pores in the upper-most soil layer | - | scalarv | F +scalarSenHeatTotal | sensible heat from the canopy air space to the atmosphere | W m-2 | scalarv | F +scalarSenHeatCanopy | sensible heat from the canopy to the canopy air space | W m-2 | scalarv | F +scalarSenHeatGround | sensible heat from the ground (below canopy or non-vegetated) | W m-2 | scalarv | F +scalarLatHeatTotal | latent heat from the canopy air space to the atmosphere | W m-2 | scalarv | F +scalarLatHeatCanopyEvap | evaporation latent heat from the canopy to the canopy air space | W m-2 | scalarv | F +scalarLatHeatCanopyTrans | transpiration latent heat from the canopy to the canopy air space | W m-2 | scalarv | F +scalarLatHeatGround | latent heat from the ground (below canopy or non-vegetated) | W m-2 | scalarv | F +scalarCanopyAdvectiveHeatFlux | heat advected to the canopy with precipitation (snow + rain) | W m-2 | scalarv | F +scalarGroundAdvectiveHeatFlux | heat advected to the ground with throughfall + unloading/drainage | W m-2 | scalarv | F +scalarCanopyTranspiration | canopy transpiration | kg m-2 s-1 | scalarv | F +scalarCanopyEvaporation | canopy evaporation/condensation | kg m-2 s-1 | scalarv | F +scalarCanopySublimation | canopy sublimation/frost | kg m-2 s-1 | scalarv | F +scalarGroundEvaporation | ground evaporation/condensation (below canopy or non-vegetated) | kg m-2 s-1 | scalarv | F +scalarSnowSublimation | snow sublimation/frost (below canopy or non-vegetated) | kg m-2 s-1 | scalarv | F +! ************************************************************************************************************************************* +! NOAH-MP vegetation variables (transpiration) +! ************************************************************************************************************************************* +scalarTranspireLim | aggregate soil moisture and aquifer control on transpiration | - | scalarv | F +scalarTranspireLimAqfr | aquifer storage control on transpiration | - | scalarv | F +scalarFoliageNitrogenFactor | foliage nitrogen concentration (1=saturated) | - | scalarv | F +scalarStomResistSunlit | stomatal resistance for sunlit leaves | s m-1 | scalarv | F +scalarStomResistShaded | stomatal resistance for shaded leaves | s m-1 | scalarv | F +scalarPhotosynthesisSunlit | sunlit photosynthesis | umolco2 m-2 s-1 | scalarv | F +scalarPhotosynthesisShaded | shaded photosynthesis | umolco2 m-2 s-1 | scalarv | F +! ************************************************************************************************************************************* +! vegetation variables (canopy water) +! ************************************************************************************************************************************* +scalarCanopyWetFraction | fraction canopy that is wet | - | scalarv | F +scalarGroundSnowFraction | fraction ground that is covered with snow | - | scalarv | F +scalarThroughfallSnow | snow that reaches the ground without ever touching the canopy | kg m-2 s-1 | scalarv | F +scalarThroughfallRain | rain that reaches the ground without ever touching the canopy | kg m-2 s-1 | scalarv | F +scalarCanopySnowUnloading | unloading of snow from the vegetation canopy | kg m-2 s-1 | scalarv | F +scalarCanopyLiqDrainage | drainage of liquid water from the vegetation canopy | kg m-2 s-1 | scalarv | F +scalarCanopyMeltFreeze | melt/freeze of water stored in the canopy | kg m-2 s-1 | scalarv | F +! ************************************************************************************************************************************* +! scalar variables (soil and aquifer fluxes) +! ************************************************************************************************************************************* +scalarRainPlusMelt | rain plus melt, used as input to soil before surface runoff | m s-1 | scalarv | T +scalarInfilArea | fraction of unfrozen area where water can infiltrate | - | scalarv | T +scalarFrozenArea | fraction of area that is considered impermeable due to soil ice | - | scalarv | F +scalarInfiltration | infiltration of water into the soil profile | m s-1 | scalarv | T +scalarExfiltration | exfiltration of water from the top of the soil profile | m s-1 | scalarv | T +scalarSurfaceRunoff | surface runoff | m s-1 | scalarv | T +scalarInitAquiferRecharge | recharge to the aquifer at the start-of-step | m s-1 | scalarv | F +scalarAquiferRecharge | recharge to the aquifer at the end-of-step | m s-1 | scalarv | F +scalarInitAquiferTranspire | transpiration loss from the aquifer at the start-of-step | m s-1 | scalarv | F +scalarAquiferTranspire | transpiration loss from the aquifer at the end-of-step | m s-1 | scalarv | F +scalarInitAquiferBaseflow | baseflow from the aquifer at the start-of-step | m s-1 | scalarv | F +scalarAquiferBaseflow | baseflow from the aquifer at the end-of-step | m s-1 | scalarv | F +! ************************************************************************************************************************************* +! scalar variables (sub-step average fluxes for the soil zone) +! ************************************************************************************************************************************* +scalarSoilInflux | sub-step average: influx of water at the top of the soil profile | m s-1 | scalarv | F +scalarSoilCompress | change in total soil storage due to compression of soil matrix | kg m-2 | scalarv | F +scalarSoilBaseflow | sub-step average: total baseflow from the soil profile | m s-1 | scalarv | T +scalarSoilDrainage | sub-step average: drainage from the bottom of the soil profile | m s-1 | scalarv | F +scalarSoilTranspiration | sub-step average: total transpiration from the soil | m s-1 | scalarv | F +! ************************************************************************************************************************************* +! scalar variables (mass balance check) +! ************************************************************************************************************************************* +scalarSoilWatBalError | error in the total soil water balance | kg m-2 | scalarv | F +scalarAquiferBalError | error in the aquifer water balance | kg m-2 | scalarv | F +scalarTotalSoilLiq | total mass of liquid water in the soil | kg m-2 | scalarv | F +scalarTotalSoilIce | total mass of ice in the soil | kg m-2 | scalarv | F +! ************************************************************************************************************************************* +! variables at the mid-point of each layer -- domain geometry +! ************************************************************************************************************************************* +mLayerDepth | depth of each layer | m | midToto | T +mLayerHeight | height of the layer mid-point (top of soil = 0) | m | midToto | T +mLayerRootDensity | fraction of roots in each soil layer | - | midSoil | F +! ************************************************************************************************************************************* +! variables at the mid-point of each layer coupled energy and mass +! ************************************************************************************************************************************* +mLayerTemp | temperature of each layer | K | midToto | F +mLayerVolFracAir | volumetric fraction of air in each layer | - | midToto | F +mLayerVolFracIce | volumetric fraction of ice in each layer | - | midToto | F +mLayerVolFracLiq | volumetric fraction of liquid water in each layer | - | midToto | T +mLayerVolHtCapBulk | volumetric heat capacity in each layer | J m-3 K-1 | midToto | F +mLayerTcrit | critical soil temperature above which all water is unfrozen | K | midSoil | F +mLayerdTheta_dTk | derivative in volumetric liquid water content wrt temperature | K-1 | midToto | F +mLayerThermalC | thermal conductivity at the mid-point of each layer | W m-1 K-1 | midToto | F +mLayerRadCondFlux | temporal derivative in energy of radiative and conductive flux | J m-3 s-1 | midToto | F +mLayerMeltFreeze | ice content change from melt/freeze in each layer | kg m-3 | midToto | F +mLayerInfilFreeze | ice content change by freezing infiltrating flux | kg m-3 | midToto | F +mLayerSatHydCond | saturated hydraulic conductivity in each layer | m s-1 | midSoil | F +mLayerSatHydCondMP | saturated hydraulic conductivity of macropores in each layer | m s-1 | midSoil | F +mLayerMatricHead | matric head of water in the soil | m | midSoil | F +mLayerdTheta_dPsi | derivative in the soil water characteristic w.r.t. psi | m-1 | midSoil | F +mLayerdPsi_dTheta | derivative in the soil water characteristic w.r.t. theta | m | midSoil | F +mLayerThetaResid | residual volumetric water content in each snow layer | - | midSnow | F +mLayerPoreSpace | total pore space in each snow layer | - | midSnow | F +mLayerCompress | change in volumetric water content due to compression of soil | - | midSoil | F +mLayerTranspireLim | soil moist & veg limit on transpiration for each layer | - | midSoil | F +mLayerInitTranspire | transpiration loss from each soil layer at the start-of-step | m s-1 | midSoil | F +mLayerTranspire | transpiration loss from each soil layer | m s-1 | midSoil | F +mLayerInitQMacropore | liquid flux from micropores to macropores at the start-of-step | m s-1 | midSoil | F +mLayerQMacropore | liquid flux from micropores to macropores | m s-1 | midSoil | F +mLayerInitBaseflow | baseflow from each soil layer at the start of the time step | m s-1 | midSoil | F +mLayerBaseflow | baseflow from each soil layer | m s-1 | midSoil | F +mLayerColumnInflow | total inflow to each layer in a given soil column | m3 s-1 | midSoil | F +mLayerColumnOutflow | total outflow from each layer in a given soil column | m3 s-1 | midSoil | F +! ************************************************************************************************************************************* +! variables at the interface of each layer +! ************************************************************************************************************************************* +iLayerHeight | height of the layer interface (top of soil = 0) | m | ifcToto | T +iLayerThermalC | thermal conductivity at the interface of each layer | W m-1 K-1 | ifcToto | F +iLayerConductiveFlux | conductive energy flux at layer interfaces at end of time step | W m-2 | ifcToto | F +iLayerAdvectiveFlux | advective energy flux at layer interfaces at end of time step | W m-2 | ifcToto | F +iLayerInitNrgFlux | energy flux at layer interfaces at the start of the time step | W m-2 | ifcToto | F +iLayerNrgFlux | energy flux at layer interfaces at end of the time step | W m-2 | ifcToto | F +iLayerSatHydCond | saturated hydraulic conductivity in each layer interface | m s-1 | ifcSoil | F +iLayerInitLiqFluxSnow | liquid flux at snow layer interfaces at start of the time step | m s-1 | ifcSnow | F +iLayerInitLiqFluxSoil | liquid flux at soil layer interfaces at start of the time step | m s-1 | ifcSoil | F +iLayerInitFluxReversal | start of step liquid flux at soil layer interfaces from impedance | m s-1 | ifcSoil | F +iLayerLiqFluxSnow | liquid flux at snow layer interfaces at end of the time step | m s-1 | ifcSnow | F +iLayerLiqFluxSoil | liquid flux at soil layer interfaces at end of the time step | m s-1 | ifcSoil | F +iLayerFluxReversal | end of step liquid flux at soil layer interfaces from impedance | m s-1 | ifcSoil | F +! ************************************************************************************************************************************* +! time stepping +! ************************************************************************************************************************************* +dt_init | length of initial time step at start of next data interval | s | scalarv | F +! ************************************************************************************************************************************* +! "short-cut" variables +! ************************************************************************************************************************************* +scalarVGn_m | van Genuchten "m" parameter | - | scalarv | F +scalarKappa | constant in the freezing curve function | m K-1 | scalarv | F +scalarVolHtCap_air | volumetric heat capacity air | J m-3 K-1 | scalarv | F +scalarVolHtCap_ice | volumetric heat capacity ice | J m-3 K-1 | scalarv | F +scalarVolHtCap_soil | volumetric heat capacity dry soil | J m-3 K-1 | scalarv | F +scalarVolHtCap_water | volumetric heat capacity liquid wat | J m-3 K-1 | scalarv | F +scalarLambda_drysoil | thermal conductivity of dry soil | W m-1 | scalarv | F +scalarLambda_wetsoil | thermal conductivity of wet soil | W m-1 | scalarv | F +scalarVolLatHt_fus | volumetric latent heat of fusion | J m-3 | scalarv | F +scalarAquiferRootFrac | fraction of roots below the soil profile (in the aquifer) | - | scalarv | F +! ************************************************************************************************************************************* diff --git a/utils/laugh_tests/wigmosta1999/settings/meta/summa_zLocalParamMeta.txt b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zLocalParamMeta.txt new file mode 100644 index 0000000000000000000000000000000000000000..63709321bed33305dbc2efde6855bf744007edaf --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/meta/summa_zLocalParamMeta.txt @@ -0,0 +1,179 @@ +! ********************************************************************************************************************** +! ********************************************************************************************************************** +! ***** DEFINITION OF MODEL PARAMETERS ********************************************************************************* +! ********************************************************************************************************************** +! ********************************************************************************************************************** +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: parameter description +! 3: parameter units +! 4: parameter type (scalar, separate parameter for each model layer, separate parameter at the interface of layers) +! 5: write parameter to output file? (T/F) +! ********************************************************************************************************************** +! define format string for parameter descriptions +! ********************************************************************************************************************** +'(a25,(1x,a1,1x),a65,(1x,a1,1x),a10,(1x,a1,1x),a7,(1x,a1,1x),L1)' ! format string (must be in single quotes) +! ********************************************************************************************************************** +! boundary conditions +! ********************************************************************************************************************** +upperBoundHead | matric head at the upper boundary | m | scalarv | T +lowerBoundHead | matric head at the lower boundary | m | scalarv | T +upperBoundTheta | volumetric liquid water content at the upper boundary | - | scalarv | T +lowerBoundTheta | volumetric liquid water content at the lower boundary | - | scalarv | T +upperBoundTemp | temperature of the upper boundary | K | scalarv | T +lowerBoundTemp | temperature of the lower boundary | K | scalarv | T +! ********************************************************************************************************************** +! precipitation partitioning +! ********************************************************************************************************************** +tempCritRain | critical temperature where precipitation is rain | K | scalarv | T +tempRangeTimestep | temperature range over the time step | K | scalarv | T +frozenPrecipMultip | frozen precipitation multiplier | - | scalarv | T +! ********************************************************************************************************************** +! freezing curve for snow +! ********************************************************************************************************************** +snowfrz_scale | scaling parameter for the freezing curve for snow | K-1 | scalarv | T +! ********************************************************************************************************************** +! snow albedo +! ********************************************************************************************************************** +albedoMax | maximum snow albedo (single spectral band) | - | scalarv | T +albedoMinWinter | minimum snow albedo during winter (single spectral band) | - | scalarv | T +albedoMinSpring | minimum snow albedo during spring (single spectral band) | - | scalarv | T +albedoMaxVisible | maximum snow albedo in the visible part of the spectrum | - | scalarv | T +albedoMinVisible | minimum snow albedo in the visible part of the spectrum | - | scalarv | T +albedoMaxNearIR | maximum snow albedo in the near infra-red part of the spectrum | - | scalarv | T +albedoMinNearIR | minimum snow albedo in the near infra-red part of the spectrum | - | scalarv | T +albedoDecayRate | albedo decay rate | s | scalarv | T +albedoSootLoad | soot load factor | - | scalarv | T +albedoRefresh | critical mass necessary for albedo refreshment | kg m-2 | scalarv | T +! ********************************************************************************************************************** +! radiation transfer +! ********************************************************************************************************************** +radExt_snow | extinction coefficient for radiation penetration into snowpack | m-1 | scalarv | T +directScale | scaling factor for fractional driect radiaion parameterization | - | scalarv | T +Frad_direct | fraction direct solar radiation | - | scalarv | T +Frad_vis | fraction radiation in visible part of spectrum | - | scalarv | T +! ********************************************************************************************************************** +! new snow density +! ********************************************************************************************************************** +newSnowDenMin | minimum new snow density | kg m-3 | scalarv | T +newSnowDenMult | multiplier for new snow density | kg m-3 | scalarv | T +newSnowDenScal | scaling factor for new snow density | K | scalarv | T +! ********************************************************************************************************************** +! snow compaction +! ********************************************************************************************************************** +densScalGrowth | density scaling factor for grain growth | kg-1 m3 | scalarv | T +tempScalGrowth | temperature scaling factor for grain growth | K-1 | scalarv | T +grainGrowthRate | rate of grain growth | s-1 | scalarv | T +densScalOvrbdn | density scaling factor for overburden pressure | kg-1 m3 | scalarv | T +tempScalOvrbdn | temperature scaling factor for overburden pressure | K-1 | scalarv | T +base_visc | viscosity coefficient at T=T_frz and snow density=0 | kg s m-2 | scalarv | T +! ********************************************************************************************************************** +! water flow through snow +! ********************************************************************************************************************** +Fcapil | capillary retention (fraction of total pore volume) | - | scalarv | T +k_snow | hydraulic conductivity of snow | m s-1 | scalarv | T +mw_exp | exponent for meltwater flow | - | scalarv | T +! ********************************************************************************************************************** +! turbulent heat fluxes +! ********************************************************************************************************************** +z0Snow | roughness length of snow | m | scalarv | T +z0Soil | roughness length of bare soil below the canopy | m | scalarv | T +z0Canopy | roughness length of the canopy | m | scalarv | T +zpdFraction | zero plane displacement / canopy height | - | scalarv | T +critRichNumber | critical value for the bulk Richardson number | - | scalarv | T +Louis79_bparam | parameter in Louis (1979) stability function | - | scalarv | T +Louis79_cStar | parameter in Louis (1979) stability function | - | scalarv | T +Mahrt87_eScale | exponential scaling factor in the Mahrt (1987) stability function | - | scalarv | T +leafExchangeCoeff | turbulent exchange coeff between canopy surface and canopy air | m s-(1/2) | scalarv | T +windReductionParam | canopy wind reduction parameter | - | scalarv | T +! ********************************************************************************************************************** +! vegetation properties +! ********************************************************************************************************************** +winterSAI | stem area index prior to the start of the growing season | m2 m-2 | scalarv | T +summerLAI | maximum leaf area index at the peak of the growing season | m2 m-2 | scalarv | T +rootingDepth | rooting depth | m | scalarv | T +rootDistExp | exponent for the vertical distribution of root density | - | scalarv | T +plantWiltPsi | matric head at wilting point | m | scalarv | T +soilStressParam | parameter in the exponential soil stress function | - | scalarv | T +critSoilWilting | critical vol. liq. water content when plants are wilting | - | scalarv | T +critSoilTranspire | critical vol. liq. water content when transpiration is limited | - | scalarv | T +critAquiferTranspire | critical aquifer storage value when transpiration is limited | m | scalarv | T +minStomatalResistance | minimum stomatal resistance | s m-1 | scalarv | T +leafDimension | characteristic leaf dimension | m | scalarv | T +heightCanopyTop | height of top of the vegetation canopy above ground surface | m | scalarv | T +heightCanopyBottom | height of bottom of the vegetation canopy above ground surface | m | scalarv | T +specificHeatVeg | specific heat of vegetation | J kg-1 K-1 | scalarv | T +maxMassVegetation | maximum mass of vegetation (full foliage) | kg m-2 | scalarv | T +throughfallScaleSnow | scaling factor for throughfall (snow) | - | scalarv | T +throughfallScaleRain | scaling factor for throughfall (rain) | - | scalarv | T +refInterceptCapSnow | reference canopy interception capacity per unit leaf area (snow) | kg m-2 | scalarv | T +refInterceptCapRain | canopy interception capacity per unit leaf area (rain) | kg m-2 | scalarv | T +snowUnloadingCoeff | time constant for unloading of snow from the forest canopy | s-1 | scalarv | T +canopyDrainageCoeff | time constant for drainage of liquid water from the forest canopy | s-1 | scalarv | T +ratioDrip2Unloading | ratio of canopy drip to unloading of snow from the forest canopy | - | scalarv | T +! ********************************************************************************************************************** +! soil properties +! ********************************************************************************************************************** +soil_dens_intr | intrinsic soil density | kg m-3 | scalarv | T +thCond_soil | thermal conductivity of soil (includes quartz and other minerals) | W m-1 K-1 | scalarv | T +frac_sand | fraction of sand | - | scalarv | T +frac_silt | fraction of silt | - | scalarv | T +frac_clay | fraction of clay | - | scalarv | T +fieldCapacity | soil field capacity (vol liq water content when baseflow begins) | - | scalarv | T +wettingFrontSuction | Green-Ampt wetting front suction | m | scalarv | T +theta_mp | volumetric liquid water content when macropore flow begins | - | scalarv | T +theta_sat | soil porosity | - | scalarv | T +theta_res | volumetric residual water content | - | scalarv | T +vGn_alpha | van Genuchten "alpha" parameter | m-1 | scalarv | T +vGn_n | van Genuchten "n" parameter | - | scalarv | T +mpExp | empirical exponent in macropore flow equation | - | scalarv | T +k_soil | saturated hydraulic conductivity | m s-1 | scalarv | T +k_macropore | saturated hydraulic conductivity for macropores | m s-1 | scalarv | T +kAnisotropic | anisotropy factor for lateral hydraulic conductivity | - | scalarv | T +zScale_TOPMODEL | TOPMODEL scaling factor used in lower boundary condition for soil | m | scalarv | T +compactedDepth | depth where k_soil reaches the compacted value given by CH78 | m | scalarv | T +aquiferScaleFactor | scaling factor for aquifer storage in the big bucket | m | scalarv | T +aquiferBaseflowExp | baseflow exponent | - | scalarv | T +qSurfScale | scaling factor in the surface runoff parameterization | - | scalarv | T +specificYield | specific yield | - | scalarv | T +specificStorage | specific storage coefficient | m-1 | scalarv | T +f_impede | ice impedence factor | - | scalarv | T +soilIceScale | scaling factor for depth of soil ice, used to get frozen fraction | m | scalarv | T +soilIceCV | CV of depth of soil ice, used to get frozen fraction | - | scalarv | T +! ********************************************************************************************************************** +! algorithmic control parameters +! ********************************************************************************************************************** +minwind | minimum wind speed | m s-1 | scalarv | F +minstep | minimum length of the time step | s | scalarv | F +maxstep | maximum length of the time step | s | scalarv | F +wimplicit | weight assigned to the start-of-step fluxes (alpha) | - | scalarv | T +maxiter | maximum number of iterations | - | scalarv | F +relConvTol_liquid | relative convergence tolerance for vol frac liq water | - | scalarv | F +absConvTol_liquid | absolute convergence tolerance for vol frac liq water | - | scalarv | F +relConvTol_matric | relative convergence tolerance for matric head | - | scalarv | F +absConvTol_matric | absolute convergence tolerance for matric head | m | scalarv | F +relConvTol_energy | relative convergence tolerance for energy | - | scalarv | F +absConvTol_energy | absolute convergence tolerance for energy | J m-3 | scalarv | F +relConvTol_aquifr | relative convergence tolerance for aquifer storage | - | scalarv | F +absConvTol_aquifr | absolute convergence tolerance for aquifer storage | m | scalarv | F +zmin | minimum layer depth | m | scalarv | F +zmax | maximum layer depth | m | scalarv | F +zminLayer1 | minimum layer depth for the 1st (top) layer | m | scalarv | F +zminLayer2 | minimum layer depth for the 2nd layer | m | scalarv | F +zminLayer3 | minimum layer depth for the 3rd layer | m | scalarv | F +zminLayer4 | minimum layer depth for the 4th layer | m | scalarv | F +zminLayer5 | minimum layer depth for the 5th (bottom) layer | m | scalarv | F +zmaxLayer1_lower | maximum layer depth for the 1st (top) layer when only 1 layer | m | scalarv | F +zmaxLayer2_lower | maximum layer depth for the 2nd layer when only 2 layers | m | scalarv | F +zmaxLayer3_lower | maximum layer depth for the 3rd layer when only 3 layers | m | scalarv | F +zmaxLayer4_lower | maximum layer depth for the 4th layer when only 4 layers | m | scalarv | F +zmaxLayer1_upper | maximum layer depth for the 1st (top) layer when > 1 layer | m | scalarv | F +zmaxLayer2_upper | maximum layer depth for the 2nd layer when > 2 layers | m | scalarv | F +zmaxLayer3_upper | maximum layer depth for the 3rd layer when > 3 layers | m | scalarv | F +zmaxLayer4_upper | maximum layer depth for the 4th layer when > 4 layers | m | scalarv | F +! ********************************************************************************************************************** diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_fileManager-exp1.txt b/utils/laugh_tests/wigmosta1999/settings/summa_fileManager-exp1.txt new file mode 100644 index 0000000000000000000000000000000000000000..17a108a7d25ac2c09f180de3e8fce5a4f4c606d1 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/summa_fileManager-exp1.txt @@ -0,0 +1,21 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 01:00' ! +simEndTime '2000-02-11 23:00' ! +tmZoneInfo 'localTime' ! +settingsPath '/code/summaTestCases/settings/' ! setting_path +forcingPath '/code/summaTestCases/testCases_data/inputData/syntheticData/wigmosta1999/' ! input_path +outputPath '/code/summaTestCases/output/syntheticTestCases/wigmosta1999/' ! output_path +decisionsFile 'syntheticTestCases/wigmosta1999/summa_zDecisions.txt' ! decision +outputControlFile 'meta/Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'syntheticTestCases/wigmosta1999/summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'syntheticTestCases/wigmosta1999/summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'syntheticTestCases/wigmosta1999/summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'syntheticTestCases/wigmosta1999/summa_zParamTrial-exp1.nc' ! para_trial +forcingListFile 'syntheticTestCases/wigmosta1999/summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'syntheticTestCases/wigmosta1999/summa_zInitialCond.nc' ! initial_cond +outFilePrefix 'syntheticHillslope-exp1' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/wigmosta1999/summa_fileManager-exp1.txt \ No newline at end of file diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_fileManager-exp2.txt b/utils/laugh_tests/wigmosta1999/settings/summa_fileManager-exp2.txt new file mode 100644 index 0000000000000000000000000000000000000000..63600322b5418f4e55665e55075cec4ec6c5d23a --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/summa_fileManager-exp2.txt @@ -0,0 +1,21 @@ +controlVersion 'SUMMA_FILE_MANAGER_V3.0.0' ! fman_ver +simStartTime '2000-01-01 01:00' ! +simEndTime '2000-02-11 23:00' ! +tmZoneInfo 'localTime' ! Time zone info +settingsPath '/home/stiff/summaTestCases_3.0/settings/' ! setting_path +forcingPath '/home/stiff/summaTestCases_3.0/testCases_data/inputData/syntheticData/wigmosta1999/' ! input_path +outputPath '/home/stiff/summaTestCases_3.0/output/syntheticTestCases/wigmosta1999/' ! output_path +decisionsFile 'syntheticTestCases/wigmosta1999/summa_zDecisions.txt' ! decision +outputControlFile 'meta/Model_Output.txt' ! OUTPUT_CONTROL +globalHruParamFile 'syntheticTestCases/wigmosta1999/summa_zLocalParamInfo.txt' ! local_par +globalGruParamFile 'syntheticTestCases/wigmosta1999/summa_zBasinParamInfo.txt' ! basin_par +attributeFile 'syntheticTestCases/wigmosta1999/summa_zLocalAttributes.nc' ! local_attr +trialParamFile 'syntheticTestCases/wigmosta1999/summa_zParamTrial-exp2.nc' ! para_trial +forcingListFile 'syntheticTestCases/wigmosta1999/summa_zForcingFileList.txt' ! forcing_list +initConditionFile 'syntheticTestCases/wigmosta1999/summa_zInitialCond.nc' ! initial_cond +outFilePrefix 'syntheticHillslope-exp2' ! output_prefix +vegTableFile 'VEGPARM.TBL' ! +soilTableFile 'SOILPARM.TBL' ! +generalTableFile 'GENPARM.TBL' ! +noahmpTableFile 'MPTABLE.TBL' ! +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/wigmosta1999/summa_fileManager-exp2.txt diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_zBasinParamInfo.txt b/utils/laugh_tests/wigmosta1999/settings/summa_zBasinParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..1926fd71fbc6ce90cd4180f652ae414885e4b611 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/summa_zBasinParamInfo.txt @@ -0,0 +1,35 @@ +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! ***** DEFINITION OF BASIN PARAMETERS ********************************************************************************** +! *********************************************************************************************************************** +! *********************************************************************************************************************** +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! *********************************************************************************************************************** +! DEFINE BASIN MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a1), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! *********************************************************************************************************************** +! +! ******************************************************************** +! define format string for parameter descriptions +! ******************************************************************** +'(a25,1x,a1,1x,3(f12.4,1x,a1,1x))' ! format string for parameter descriptions (must be in single quotes) +! ******************************************************************** +! baseflow +! ******************************************************************** +basin__aquiferHydCond | 0.0100 | 0.0001 | 10.0000 +basin__aquiferScaleFactor | 3.5000 | 0.1000 | 100.0000 +basin__aquiferBaseflowExp | 5.0000 | 1.0000 | 10.0000 +! ******************************************************************** +! within-grid routing +! ******************************************************************** +routingGammaShape | 2.5000 | 2.0000 | 3.0000 +routingGammaScale | 20000.0000 | 1.0000 | 5000000.0000 +! ******************************************************************** diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_zDecisions.txt b/utils/laugh_tests/wigmosta1999/settings/summa_zDecisions.txt new file mode 100644 index 0000000000000000000000000000000000000000..3548441f737f8fe5c4036ae6092ea814099e63b8 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/summa_zDecisions.txt @@ -0,0 +1,169 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE MODEL DECISIONS +! *********************************************************************************************************************** +! This file defines the modeling decisions used. +! NOTES: +! (1) lines starting with ! are treated as comment lines -- there is no limit on the number of comment lines +! (2) the name of the decision is followed by the character string defining the decision +! (3) the simulation start/end times must be within single quotes +! *********************************************************************************************************************** +! *********************************************************************************************************************** +soilCatTbl ROSETTA ! (03) soil-category dateset +vegeParTbl USGS ! (04) vegetation category dataset +soilStress NoahType ! (05) choice of function for the soil moisture control on stomatal resistance +stomResist BallBerry ! (06) choice of function for stomatal resistance +! *********************************************************************************************************************** +num_method itertive ! (07) choice of numerical method +fDerivMeth analytic ! (08) method used to calculate flux derivatives +LAI_method specified ! (09) method used to determine LAI and SAI +f_Richards mixdform ! (10) form of Richard's equation +groundwatr qTopmodl ! (11) choice of groundwater parameterization +hc_profile pow_prof ! (12) choice of hydraulic conductivity profile +bcUpprTdyn nrg_flux ! (13) type of upper boundary condition for thermodynamics +bcLowrTdyn zeroFlux ! (14) type of lower boundary condition for thermodynamics +bcUpprSoiH liq_flux ! (15) type of upper boundary condition for soil hydrology +bcLowrSoiH zeroFlux ! (16) type of lower boundary condition for soil hydrology +veg_traits CM_QJRMS1988 ! (17) choice of parameterization for vegetation roughness length and displacement height +canopyEmis simplExp ! (18) choice of parameterization for canopy emissivity +snowIncept lightSnow ! (19) choice of parameterization for snow interception +windPrfile logBelowCanopy ! (20) choice of wind profile through the canopy +astability louisinv ! (21) choice of stability function +canopySrad CLM_2stream ! (22) choice of canopy shortwave radiation method +alb_method varDecay ! (23) choice of albedo representation +compaction anderson ! (24) choice of compaction routine +snowLayers CLM_2010 ! (25) choice of method to combine and sub-divide snow layers +thCondSnow jrdn1991 ! (26) choice of thermal conductivity representation for snow +thCondSoil mixConstit ! (27) choice of thermal conductivity representation for soil +spatial_gw localColumn ! (28) choice of method for the spatial representation of groundwater +subRouting timeDlay ! (29) choice of method for sub-grid routing +! *********************************************************************************************** +! ***** description of the options available -- nothing below this point is read **************** +! *********************************************************************************************** +! ----------------------------------------------------------------------------------------------- +! (01) simulation start time +! (02) simulation end time +! ----------------------------------------------------------------------------------------------- +! (03) soil-category dateset +! STAS ! STATSGO dataset +! STAS-RUC ! ?? +! ROSETTA ! merged Rosetta table with STAS-RUC +! ----------------------------------------------------------------------------------------------- +! (04) vegetation category dataset +! USGS ! USGS 24/27 category dataset +! MODIFIED_IGBP_MODIS_NOAH ! MODIS 20-category dataset +! ----------------------------------------------------------------------------------------------- +! (05) choice of function for the soil moisture control on stomatal resistance +! NoahType ! thresholded linear function of volumetric liquid water content +! CLM_Type ! thresholded linear function of matric head +! SiB_Type ! exponential of the log of matric head +! ----------------------------------------------------------------------------------------------- +! (06) choice of function for stomatal resistance +! BallBerry ! Ball-Berry +! Jarvis ! Jarvis +! ----------------------------------------------------------------------------------------------- +! (07) choice of numerical method +! itertive ! iterative +! non_iter ! non-iterative +! itersurf ! iterate only on the surface energy balance +! ----------------------------------------------------------------------------------------------- +! (08) method used to calculate flux derivatives +! numericl ! numerical derivatives +! analytic ! analytical derivatives +! ----------------------------------------------------------------------------------------------- +! (09) method used to determine LAI and SAI +! monTable ! LAI/SAI taken directly from a monthly table for different vegetation classes +! specified ! LAI/SAI computed from green vegetation fraction and winterSAI and summerLAI parameters +! ----------------------------------------------------------------------------------------------- +! (10) form of Richards' equation +! moisture ! moisture-based form of Richards' equation +! mixdform ! mixed form of Richards' equation +! ----------------------------------------------------------------------------------------------- +! (11) choice of groundwater parameterization +! qTopmodl ! topmodel parameterization +! bigBuckt ! a big bucket (lumped aquifer model) +! noXplict ! no explicit groundwater parameterization +! ----------------------------------------------------------------------------------------------- +! (12) choice of hydraulic conductivity profile +! constant ! constant hydraulic conductivity with depth +! pow_prof ! power-law profile +! ----------------------------------------------------------------------------------------------- +! (13) choice of upper boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! nrg_flux ! energy flux +! ----------------------------------------------------------------------------------------------- +! (14) choice of lower boundary conditions for thermodynamics +! presTemp ! prescribed temperature +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (15) choice of upper boundary conditions for soil hydrology +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! liq_flux ! liquid water flux +! ----------------------------------------------------------------------------------------------- +! (16) choice of lower boundary conditions for soil hydrology +! drainage ! free draining +! presHead ! prescribed head (volumetric liquid water content for mixed form of Richards' eqn) +! bottmPsi ! function of matric head in the lower-most layer +! zeroFlux ! zero flux +! ----------------------------------------------------------------------------------------------- +! (17) choice of parameterization for vegetation roughness length and displacement height +! Raupach_BLM1994 ! Raupach (BLM 1994) "Simplified expressions..." +! CM_QJRMS1988 ! Choudhury and Monteith (QJRMS 1998) "A four layer model for the heat budget..." +! vegTypeTable ! constant parameters dependent on the vegetation type +! ----------------------------------------------------------------------------------------------- +! (18) choice of parameterization for canopy emissivity +! simplExp ! simple exponential function +! difTrans ! parameterized as a function of diffuse transmissivity +! ----------------------------------------------------------------------------------------------- +! (19) choice of parameterization for snow interception +! stickySnow ! maximum interception capacity an increasing function of temerature +! lightSnow ! maximum interception capacity an inverse function of new snow density +! ----------------------------------------------------------------------------------------------- +! (20) choice of wind profile +! exponential ! exponential wind profile extends to the surface +! logBelowCanopy ! logarithmic profile below the vegetation canopy +! ----------------------------------------------------------------------------------------------- +! (21) choice of stability function +! standard ! standard MO similarity, a la Anderson (1979) +! louisinv ! Louis (1979) inverse power function +! mahrtexp ! Mahrt (1987) exponential function +! ----------------------------------------------------------------------------------------------- +! (22) choice of canopy shortwave radiation method +! noah_mp ! full Noah-MP implementation (including albedo) +! CLM_2stream ! CLM 2-stream model (see CLM documentation) +! UEB_2stream ! UEB 2-stream model (Mahat and Tarboton, WRR 2011) +! NL_scatter ! Simplified method Nijssen and Lettenmaier (JGR 1999) +! BeersLaw ! Beer's Law (as implemented in VIC) +! ----------------------------------------------------------------------------------------------- +! (23) choice of albedo representation +! conDecay ! constant decay rate (e.g., VIC, CLASS) +! varDecay ! variable decay rate (e.g., BATS approach, with destructive metamorphism + soot content) +! ----------------------------------------------------------------------------------------------- +! (24) choice of compaction routine +! consettl ! constant settlement rate +! anderson ! semi-empirical method of Anderson (1976) +! ----------------------------------------------------------------------------------------------- +! (25) choice of method to combine and sub-divide snow layers +! CLM_2010 ! CLM option: combination/sub-dividion rules depend on layer index +! jrdn1991 ! SNTHERM option: same combination/sub-dividion rules applied to all layers +! ----------------------------------------------------------------------------------------------- +! (26) choice of thermal conductivity representation for snow +! tyen1965 ! Yen (1965) +! melr1977 ! Mellor (1977) +! jrdn1991 ! Jordan (1991) +! smnv2000 ! Smirnova et al. (2000) +! ----------------------------------------------------------------------------------------------- +! (27) choice of thermal conductivity representation for soil +! funcSoilWet ! function of soil wetness +! mixConstit ! mixture of constituents +! hanssonVZJ ! test case for the mizoguchi lab experiment, Hansson et al. VZJ 2004 +! ----------------------------------------------------------------------------------------------- +! (28) choice of method for the spatial representation of groundwater +! localColumn ! separate groundwater representation in each local soil column +! singleBasin ! single groundwater store over the entire basin +! ----------------------------------------------------------------------------------------------- +! (29) choice of method for sub-grid routing +! timeDlay ! time-delay histogram +! qInstant ! instantaneous routing +! *********************************************************************************************** +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/wigmosta1999/summa_fileManager-exp1.txt +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/wigmosta1999/summa_fileManager-exp2.txt diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_zForcingFileList.txt b/utils/laugh_tests/wigmosta1999/settings/summa_zForcingFileList.txt new file mode 100644 index 0000000000000000000000000000000000000000..58407becc29c6c84acb4bd7d5b9a93e7e76a5b6c --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/summa_zForcingFileList.txt @@ -0,0 +1,8 @@ +! **************************************************************************************************** +! List of forcing data files used +! +! This file includes one "word" per line: +! (1) The name of a forcing file +! --> filename must be in single quotes +! **************************************************************************************************** + 'wigmosta_forcing.nc' diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_zForcingInfo.txt b/utils/laugh_tests/wigmosta1999/settings/summa_zForcingInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..f06e5c1a49fcf1f549e8e8123e9077782d07cc1d --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/summa_zForcingInfo.txt @@ -0,0 +1,29 @@ +! *********************************************************************************************************************** +! DEFINITION OF THE FORCING FILE +! *********************************************************************************************************************** +! This file defines the name of the forcing data file, the number of columns in the file, the column index for each data +! variable, the start index of the simulation period, the length of the simulation period, +! and the length of the data time step +! *********************************************************************************************************************** +! NOTES: +! (1) lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines +! (2) the format definition defines the format of the file, which can be changed +! (3) the format definition must be the first non-comment line +! (4) the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! *********************************************************************************************************************** +'(a15,a1,1x,a)' +filenmData | wigmosta_forcing.txt ! name of the forcing data file (must be in single quotes) +ncols | 13 ! number of columns in the forcing file +iyyy | 1 ! year +im | 2 ! month +id | 3 ! day +ih | 4 ! hour +imin | 5 ! minute +pptrate | 7 ! precipitation rate (kg m-2 s-1) +SWRadAtm | 8 ! downwelling shortwave radiaiton (W m-2) +LWRadAtm | 9 ! downwelling longwave radiation (W m-2) +airtemp | 10 ! air temperature (K) +windspd | 11 ! windspeed (m/s) +airpres | 12 ! pressure (Pa) +spechum | 13 ! specific humidity (g/g) +data_step | 3600 ! length of time step (seconds) diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_zInitialCond.nc b/utils/laugh_tests/wigmosta1999/settings/summa_zInitialCond.nc new file mode 100644 index 0000000000000000000000000000000000000000..b1a9223e7e039a637a7665700609828ac5f381a6 Binary files /dev/null and b/utils/laugh_tests/wigmosta1999/settings/summa_zInitialCond.nc differ diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_zLocalAttributes.nc b/utils/laugh_tests/wigmosta1999/settings/summa_zLocalAttributes.nc new file mode 100644 index 0000000000000000000000000000000000000000..d8ead995c9d1b1a2f2286c24f5f4760ddb35c421 Binary files /dev/null and b/utils/laugh_tests/wigmosta1999/settings/summa_zLocalAttributes.nc differ diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_zLocalParamInfo.txt b/utils/laugh_tests/wigmosta1999/settings/summa_zLocalParamInfo.txt new file mode 100644 index 0000000000000000000000000000000000000000..e501f363b443358a7f4cb06906cdd3e66e1da278 --- /dev/null +++ b/utils/laugh_tests/wigmosta1999/settings/summa_zLocalParamInfo.txt @@ -0,0 +1,226 @@ +! ======================================================================================================================= +! ======================================================================================================================= +! ===== DEFINITION OF MODEL PARAMETERS ================================================================================== +! ======================================================================================================================= +! ======================================================================================================================= +! Note: lines starting with "!" are treated as comment lines -- there is no limit on the number of comment lines. +! +! ======================================================================================================================= +! DEFINE SITE MODEL PARAMETERS +! ------------------------------------ +! the format definition defines the format of the file, which can be changed +! the delimiters "| " must be present (format a2), as these are used to check the integrety of the file +! columns are: +! 1: parameter name +! 2: default parameter value +! 3: lower parameter limit +! 4: upper parameter limit +! ======================================================================================================================= +! +! ==================================================================== +! define format string for parameter descriptions +! ==================================================================== +'(a25,1x,3(a1,1x,f12.4,1x))' ! format string (must be in single quotes) +! ==================================================================== +! boundary conditions +! ==================================================================== +upperBoundHead | -0.7500 | -100.0000 | -0.0100 +lowerBoundHead | 0.0000 | -100.0000 | -0.0100 +upperBoundTheta | 0.2004 | 0.1020 | 0.3680 +lowerBoundTheta | 0.1100 | 0.1020 | 0.3680 +upperBoundTemp | 272.1600 | 270.1600 | 280.1600 +lowerBoundTemp | 274.1600 | 270.1600 | 280.1600 +! ==================================================================== +! precipitation partitioning +! ==================================================================== +tempCritRain | 273.1600 | 272.1600 | 274.6600 +tempRangeTimestep | 2.0000 | 0.5000 | 5.0000 +frozenPrecipMultip | 1.0000 | 0.5000 | 1.5000 +! ==================================================================== +! snow properties +! ==================================================================== +snowfrz_scale | 50.0000 | 10.0000 | 1000.0000 +fixedThermalCond_snow | 0.3500 | 0.1000 | 1.0000 +! ==================================================================== +! snow albedo +! ==================================================================== +albedoMax | 0.8400 | 0.7000 | 0.9500 +albedoMinWinter | 0.5500 | 0.6000 | 1.0000 +albedoMinSpring | 0.5500 | 0.3000 | 1.0000 +albedoMaxVisible | 0.9500 | 0.7000 | 0.9500 +albedoMinVisible | 0.7500 | 0.5000 | 0.7500 +albedoMaxNearIR | 0.6500 | 0.5000 | 0.7500 +albedoMinNearIR | 0.3000 | 0.1500 | 0.4500 +albedoDecayRate | 1.0d+6 | 0.1d+6 | 5.0d+6 +albedoSootLoad | 0.3000 | 0.1000 | 0.5000 +albedoRefresh | 1.0000 | 1.0000 | 10.0000 +! ==================================================================== +! radiation transfer within snow +! ==================================================================== +radExt_snow | 20.0000 | 20.0000 | 20.0000 +directScale | 0.0900 | 0.0000 | 0.5000 +Frad_direct | 0.7000 | 0.0000 | 1.0000 +Frad_vis | 0.5000 | 0.0000 | 1.0000 +! ==================================================================== +! new snow density +! ==================================================================== +newSnowDenMin | 100.0000 | 50.0000 | 100.0000 +newSnowDenMult | 100.0000 | 25.0000 | 75.0000 +newSnowDenScal | 5.0000 | 1.0000 | 5.0000 +constSnowDen | 100.0000 | 50.0000 | 250.0000 +newSnowDenAdd | 109.0000 | 80.0000 | 120.0000 +newSnowDenMultTemp | 6.0000 | 1.0000 | 12.0000 +newSnowDenMultWind | 26.0000 | 16.0000 | 36.0000 +newSnowDenMultAnd | 1.0000 | 1.0000 | 3.0000 +newSnowDenBase | 0.0000 | 0.0000 | 0.0000 +! ==================================================================== +! snow compaction +! ==================================================================== +densScalGrowth | 0.0460 | 0.0230 | 0.0920 +tempScalGrowth | 0.0400 | 0.0200 | 0.0600 +grainGrowthRate | 2.7d-6 | 1.0d-6 | 5.0d-6 +densScalOvrbdn | 0.0230 | 0.0115 | 0.0460 +tempScalOvrbdn | 0.0800 | 0.6000 | 1.0000 +baseViscosity | 9.0d+5 | 5.0d+5 | 1.5d+6 +! ==================================================================== +! water flow through snow +! ==================================================================== +Fcapil | 0.0600 | 0.0100 | 0.1000 +k_snow | 0.0150 | 0.0050 | 0.0500 +mw_exp | 3.0000 | 1.0000 | 5.0000 +! ==================================================================== +! turbulent heat fluxes +! ==================================================================== +z0Snow | 0.0010 | 0.0010 | 10.0000 +z0Soil | 0.0100 | 0.0010 | 10.0000 +z0Canopy | 0.1000 | 0.0010 | 10.0000 +zpdFraction | 0.6500 | 0.5000 | 0.8500 +critRichNumber | 0.2000 | 0.1000 | 1.0000 +Louis79_bparam | 9.4000 | 9.2000 | 9.6000 +Louis79_cStar | 5.3000 | 5.1000 | 5.5000 +Mahrt87_eScale | 1.0000 | 0.5000 | 2.0000 +leafExchangeCoeff | 0.0100 | 0.0010 | 0.1000 +windReductionParam | 0.2800 | 0.0000 | 1.0000 +! ==================================================================== +! stomatal conductance +! ==================================================================== +Kc25 | 296.0770 | 296.0770 | 296.0770 +Ko25 | 0.2961 | 0.2961 | 0.2961 +Kc_qFac | 2.1000 | 2.1000 | 2.1000 +Ko_qFac | 1.2000 | 1.2000 | 1.2000 +kc_Ha | 79430.0000 | 79430.0000 | 79430.0000 +ko_Ha | 36380.0000 | 36380.0000 | 36380.0000 +vcmax25_canopyTop | 40.0000 | 20.0000 | 100.0000 +vcmax_qFac | 2.4000 | 2.4000 | 2.4000 +vcmax_Ha | 65330.0000 | 65330.0000 | 65330.0000 +vcmax_Hd | 220000.0000 | 149250.0000 | 149250.0000 +vcmax_Sv | 710.0000 | 485.0000 | 485.0000 +vcmax_Kn | 0.6000 | 0.0000 | 1.2000 +jmax25_scale | 2.0000 | 2.0000 | 2.0000 +jmax_Ha | 43540.0000 | 43540.0000 | 43540.0000 +jmax_Hd | 152040.0000 | 152040.0000 | 152040.0000 +jmax_Sv | 495.0000 | 495.0000 | 495.0000 +fractionJ | 0.1500 | 0.1500 | 0.1500 +quantamYield | 0.0500 | 0.0500 | 0.0500 +vpScaleFactor | 1500.0000 | 1500.0000 | 1500.0000 +cond2photo_slope | 9.0000 | 1.0000 | 10.0000 +minStomatalConductance | 2000.0000 | 2000.0000 | 2000.0000 +! ==================================================================== +! vegetation properties +! ==================================================================== +winterSAI | 0.0000 | 0.0100 | 3.0000 +summerLAI | 0.0000 | 0.0100 | 10.0000 +rootScaleFactor1 | 2.0000 | 1.0000 | 10.0000 +rootScaleFactor2 | 5.0000 | 1.0000 | 10.0000 +rootingDepth | 1.0000 | 0.0100 | 10.0000 +rootDistExp | 1.0000 | 0.0100 | 1.0000 +plantWiltPsi | -150.0000 | -500.0000 | 0.0000 +soilStressParam | 5.8000 | 4.3600 | 6.3700 +critSoilWilting | 0.3500 | 0.0000 | 1.0000 +critSoilTranspire | 0.1750 | 0.0000 | 1.0000 +critAquiferTranspire | 0.2000 | 0.1000 | 10.0000 +minStomatalResistance | 50.0000 | 10.0000 | 200.0000 +leafDimension | 0.0400 | 0.0100 | 0.1000 +heightCanopyTop | 0.0100 | 0.0500 | 100.0000 +heightCanopyBottom | 0.0010 | 0.0000 | 5.0000 +specificHeatVeg | 874.0000 | 500.0000 | 1500.0000 +maxMassVegetation | 25.0000 | 1.0000 | 50.0000 +throughfallScaleSnow | 0.5000 | 0.1000 | 0.9000 +throughfallScaleRain | 0.5000 | 0.1000 | 0.9000 +refInterceptCapSnow | 6.6000 | 1.0000 | 14.0000 +refInterceptCapRain | 1.0000 | 0.0100 | 1.0000 +snowUnloadingCoeff | 1.3d-6 | 0.0000 | 1.5d-6 +canopyDrainageCoeff | 0.0050 | 0.0010 | 0.0100 +ratioDrip2Unloading | 0.4000 | 0.0000 | 1.0000 +canopyWettingFactor | 0.7000 | 0.0000 | 1.0000 +canopyWettingExp | 1.0000 | 0.0000 | 1.0000 +! ==================================================================== +! soil properties +! ==================================================================== +soil_dens_intr | 2700.0000 | 500.0000 | 4000.0000 +thCond_soil | 5.5000 | 2.9000 | 8.4000 +frac_sand | 0.1600 | 0.0000 | 1.0000 +frac_silt | 0.2800 | 0.0000 | 1.0000 +frac_clay | 0.5600 | 0.0000 | 1.0000 +fieldCapacity | 0.1000 | 0.0000 | 1.0000 +wettingFrontSuction | 0.3000 | 0.1000 | 1.5000 +theta_mp | 0.3750 | 0.3000 | 0.6000 +theta_sat | 0.3500 | 0.3000 | 0.6000 +theta_res | 0.1000 | 0.0010 | 0.1000 +vGn_alpha | -0.5000 | -1.0000 | -0.0100 +vGn_n | 1.5000 | 1.0000 | 3.0000 +mpExp | 5.0000 | 1.0000 | 10.0000 +k_soil | 0.0008333333 | 1.d-07 | 100.d-07 +k_macropore | 0.0008333333 | 1.d-07 | 100.d-07 +kAnisotropic | 1.0000 | 0.0001 | 10.0000 +zScale_TOPMODEL | 3.0000 | 0.1000 | 100.0000 +compactedDepth | 0.0000 | 0.0000 | 1.0000 +aquiferScaleFactor | 0.3500 | 0.1000 | 100.0000 +aquiferBaseflowExp | 2.0000 | 1.0000 | 10.0000 +aquiferBaseflowRate | 2.0000 | 1.0000 | 10.0000 +qSurfScale | 100.0000 | 1.0000 | 100.0000 +specificYield | 0.2000 | 0.1000 | 0.3000 +specificStorage | 1.d-06 | 1.d-05 | 1.d-07 +f_impede | 0.0000 | 1.0000 | 10.0000 +soilIceScale | 0.1300 | 0.0001 | 1.0000 +soilIceCV | 0.4500 | 0.1000 | 5.0000 +! ==================================================================== +! algorithmic control parameters +! ==================================================================== +minwind | 0.1000 | 0.0010 | 1.0000 +minstep | 1.0000 | 1.0000 | 1800.0000 +maxstep | 3600.0000 | 60.0000 | 1800.0000 +wimplicit | 0.0000 | 0.0000 | 1.0000 +maxiter | 20.0000 | 1.0000 | 100.0000 +relConvTol_liquid | 1.0d-3 | 1.0d-5 | 1.0d-1 +absConvTol_liquid | 1.0d-5 | 1.0d-8 | 1.0d-3 +relConvTol_matric | 1.0d-5 | 1.0d-5 | 1.0d-1 +absConvTol_matric | 1.0d-5 | 1.0d-8 | 1.0d-3 +relConvTol_energy | 1.0d-2 | 1.0d-5 | 1.0d-1 +absConvTol_energy | 1.0d-0 | 1.0d-2 | 1.0d+1 +relConvTol_aquifr | 1.0d-0 | 1.0d-2 | 1.0d+1 +absConvTol_aquifr | 1.0d-5 | 1.0d-5 | 1.0d-1 +zmin | 0.0100 | 0.0050 | 0.1000 +zmax | 0.0500 | 0.0100 | 0.5000 +! --- +zminLayer1 | 0.0075 | 0.0075 | 0.0075 +zminLayer2 | 0.0100 | 0.0100 | 0.0100 +zminLayer3 | 0.0500 | 0.0500 | 0.0500 +zminLayer4 | 0.1000 | 0.1000 | 0.1000 +zminLayer5 | 0.2500 | 0.2500 | 0.2500 +! --- +zmaxLayer1_lower | 0.0500 | 0.0500 | 0.0500 +zmaxLayer2_lower | 0.2000 | 0.2000 | 0.2000 +zmaxLayer3_lower | 0.5000 | 0.5000 | 0.5000 +zmaxLayer4_lower | 1.0000 | 1.0000 | 1.0000 +! --- +zmaxLayer1_upper | 0.0300 | 0.0300 | 0.0300 +zmaxLayer2_upper | 0.1500 | 0.1500 | 0.1500 +zmaxLayer3_upper | 0.3000 | 0.3000 | 0.3000 +zmaxLayer4_upper | 0.7500 | 0.7500 | 0.7500 +! ==================================================================== +minTempUnloading | 270.16 | 260.16 | 273.16 +minWindUnloading | 0.0000 | 0.0000 | 10.000 +rateTempUnloading | 1.87d+5 | 1.0d+5 | 3.0d+5 +rateWindUnloading | 1.56d+5 | 1.0d+5 | 3.0d+5 +! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/wigmosta1999/summa_fileManager-exp1.txt! history Mon Jul 20 16:08:17 2020: /pool0/home/andrbenn/data/summa_3/utils/convert_summa_config_v2_v3.py ./syntheticTestCases/wigmosta1999/summa_fileManager-exp2.txt \ No newline at end of file diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_zParamTrial-exp1.nc b/utils/laugh_tests/wigmosta1999/settings/summa_zParamTrial-exp1.nc new file mode 100644 index 0000000000000000000000000000000000000000..4dd01a1221d97fe1e39e9002dffe93bae7779fba Binary files /dev/null and b/utils/laugh_tests/wigmosta1999/settings/summa_zParamTrial-exp1.nc differ diff --git a/utils/laugh_tests/wigmosta1999/settings/summa_zParamTrial-exp2.nc b/utils/laugh_tests/wigmosta1999/settings/summa_zParamTrial-exp2.nc new file mode 100644 index 0000000000000000000000000000000000000000..675ae086f8ce79897076a7e72dd813cb4cc2ccd5 Binary files /dev/null and b/utils/laugh_tests/wigmosta1999/settings/summa_zParamTrial-exp2.nc differ