From 813f442e097771861c3175decf7dd9f9e40a937b Mon Sep 17 00:00:00 2001 From: Matt Williamson <87771120+mattw-nws@users.noreply.github.com> Date: Wed, 2 Aug 2023 20:58:25 +0000 Subject: [PATCH] Removes LSTM internal model --- CMakeLists.txt | 14 - .../lstm/example_lstm_realization_config.json | 67 ----- data/lstm/initial_states.csv | 65 ----- data/lstm/input_scaling.csv | 13 - data/lstm/lstm_mean_std.csv | 13 - data/lstm/sugar_creek_trained.pt | Bin 89921 -> 0 bytes .../catchment/Formulation_Constructors.hpp | 8 - .../catchment/LSTM_Realization.hpp | 131 ---------- models/lstm/include/LSTM.h | 144 ---------- models/lstm/include/lstm_config.h | 42 --- models/lstm/include/lstm_fluxes.h | 26 -- models/lstm/include/lstm_params.h | 36 --- models/lstm/include/lstm_state.h | 45 ---- src/models/lstm/CMakeLists.txt | 22 -- src/models/lstm/LSTM.cpp | 246 ------------------ src/realizations/catchment/CMakeLists.txt | 11 - .../catchment/LSTM_Realization.cpp | 130 --------- test/CMakeLists.txt | 19 -- test/data/model/lstm/initial_states.csv | 65 ----- test/data/model/lstm/input_scaling.csv | 13 - test/data/model/lstm/lstm_mean_std.csv | 13 - test/data/model/lstm/sugar_creek_trained.pt | Bin 89921 -> 0 bytes test/models/lstm/include/LSTM_Test.cpp | 69 ----- .../catchments/LSTM_Realization_Test.cpp | 56 ---- 24 files changed, 1248 deletions(-) delete mode 100644 data/lstm/example_lstm_realization_config.json delete mode 100644 data/lstm/initial_states.csv delete mode 100644 data/lstm/input_scaling.csv delete mode 100755 data/lstm/lstm_mean_std.csv delete mode 100644 data/lstm/sugar_creek_trained.pt delete mode 100644 include/realizations/catchment/LSTM_Realization.hpp delete mode 100644 models/lstm/include/LSTM.h delete mode 100644 models/lstm/include/lstm_config.h delete mode 100644 models/lstm/include/lstm_fluxes.h delete mode 100644 models/lstm/include/lstm_params.h delete mode 100644 models/lstm/include/lstm_state.h delete mode 100644 src/models/lstm/CMakeLists.txt delete mode 100644 src/models/lstm/LSTM.cpp delete mode 100644 src/realizations/catchment/LSTM_Realization.cpp delete mode 100644 test/data/model/lstm/initial_states.csv delete mode 100644 test/data/model/lstm/input_scaling.csv delete mode 100755 test/data/model/lstm/lstm_mean_std.csv delete mode 100644 test/data/model/lstm/sugar_creek_trained.pt delete mode 100644 test/models/lstm/include/LSTM_Test.cpp delete mode 100644 test/realizations/catchments/LSTM_Realization_Test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index d3af83df07..19b8ec8755 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,11 +80,6 @@ if(MPI_ACTIVE) add_compile_definitions(NGEN_MPI_ACTIVE) endif() -if(LSTM_TORCH_LIB_ACTIVE) - find_package(Torch REQUIRED) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") -endif() - find_package(SQLite3) if(SQLite3_FOUND) set(NGEN_WITH_SQLITE3 ON) @@ -260,15 +255,6 @@ if(NGEN_ACTIVATE_ROUTING) ) endif() -if(LSTM_TORCH_LIB_ACTIVE) - add_compile_definitions(NGEN_LSTM_TORCH_LIB_ACTIVE) - add_subdirectory("src/models/lstm") - target_link_libraries(ngen PUBLIC - NGen::models_lstm - ${TORCH_LIBRARIES} - ) -endif() - # For automated testing with Google Test if(PACKAGE_TESTS) enable_testing() diff --git a/data/lstm/example_lstm_realization_config.json b/data/lstm/example_lstm_realization_config.json deleted file mode 100644 index 1bbdda56b4..0000000000 --- a/data/lstm/example_lstm_realization_config.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "global": { - "formulations": - [ - { - "name": "tshirt", - "params": { - "maxsmc": 0.439, - "wltsmc": 0.066, - "satdk": 0.00000338, - "satpsi": 0.355, - "slope": 1.0, - "scaled_distribution_fn_shape_parameter": 4.05, - "multiplier": 0.0, - "alpha_fc": 0.33, - "Klf": 0.01, - "Kn": 0.03, - "nash_n": 2, - "Cgw": 0.01, - "expon": 6.0, - "max_groundwater_storage_meters": 1.0, - "nash_storage": [ - 0.0, - 0.0 - ], - "soil_storage_percentage": 0.667, - "groundwater_storage_percentage": 0.5, - "timestep": 3600, - "giuh": { - "giuh_path": "../test/data/giuh/GIUH.json", - "crosswalk_path": "../crosswalk.json" - } - } - } - ], - "forcing": { - "file_pattern": ".*{{ID}}.*.csv", - "path": "../forcing/" - } - }, - "time": { - "start_time": "2015-12-01 00:00:00", - "end_time": "2015-12-30 23:00:00", - "output_interval": 3600 - }, - "catchments": { - "cat-67": - { - "formulations": [ - { "name": "lstm", - "params": { - "pytorch_model_path": "./data/lstm/sugar_creek_trained.pt", - "normalization_path": "./data/lstm/input_scaling.csv", - "initial_state_path": "./data/lstm/initial_states.csv", - "latitude": 35.2607453, - "longitude": -80.84020072, - "area_square_km": 15.617167, - "useGPU": false - } - } - ], - "forcing": { - "path": "./data/forcing/cat-67_2015-12-01 00_00_00_2015-12-30 23_00_00.csv" - } - } - } -} diff --git a/data/lstm/initial_states.csv b/data/lstm/initial_states.csv deleted file mode 100644 index 074170b569..0000000000 --- a/data/lstm/initial_states.csv +++ /dev/null @@ -1,65 +0,0 @@ -h_t,c_t -0.1536959,0.5977953 -0.34566152,13.687507 --0.16843161,-3.228266 --0.1047104,-0.53653455 --0.57301396,-1.1193033 -0.26273784,1.6482165 --0.053256456,-0.34890324 --0.24596663,-2.3661792 -0.010543859,0.048195954 --0.006508373,-0.0979699 -0.022129519,2.768485 -0.5791072,5.1234913 --0.35121858,-1.9823049 --0.014008848,-0.08184317 -0.17693731,0.30314082 --0.75739604,-2.006318 --0.26804605,-0.6875008 --0.21218267,-0.3091483 -0.3962413,0.59882385 --0.036771704,-2.008611 -0.003212482,0.03500252 -0.3082906,4.7202616 -0.3171625,7.4866033 --0.20165843,-10.195228 -0.6830855,8.287675 --0.010220701,-0.12318495 --0.043027107,-0.5066032 --0.33712575,-34.11917 --0.30045974,-19.456871 -0.13517518,5.1954875 --0.008104391,-0.069324456 -0.09392611,0.4168161 --0.13266622,-5.3705645 -0.004889662,0.2060275 --0.000135662,-0.000607314 --0.31847715,-0.437886 --0.20750743,-15.356831 --0.23644102,-0.33845335 --0.18697523,-0.46342096 -0.006417224,0.03174661 --0.009578296,-0.08877465 -0.5017063,14.311281 --0.19963627,-1.5812411 --0.007490416,-0.26415315 -0.011976934,0.43083748 -0.014015907,0.09131075 -0.2011106,27.510174 -0.48911452,4.35671 -0.08763203,2.643056 --0.006044372,-0.18535723 --0.45652187,-3.4137676 --0.006026973,-0.038571917 --0.30038968,-1.6894548 --0.21969596,-5.375217 --0.4489063,-21.319094 -0.35732156,25.704021 -0.34422526,0.5003569 --0.33628726,-7.381399 -0.15154575,0.9492416 -0.5321333,37.394684 --0.1178656,-10.278872 -0.590509,0.9518527 --0.63163435,-39.448425 -0.53634644,29.58782 diff --git a/data/lstm/input_scaling.csv b/data/lstm/input_scaling.csv deleted file mode 100644 index 11f81ce851..0000000000 --- a/data/lstm/input_scaling.csv +++ /dev/null @@ -1,13 +0,0 @@ -variable,mean,std -Latitude,39.949427,4.182431 -Longitude,-96.920133,16.651526 -Area_Square_km,474.2365,510.592316 -DLWRF_surface_W_per_meters_squared,302.84995,65.58242 -PRES_surface_Pa,94364.266,8891.513 -SPFH_2maboveground_kg_per_kg,0.006817294,0.004297631 -Precip_rate,4.67E-05,0.00022482131 -DSWRF_surface_W_per_meters_squared,182.7724,253.21057 -TMP_2maboveground_K,283.25012,10.967861 -UGRD_10maboveground_meters_per_second,1.0540344,3.040779 -VGRD_10maboveground_meters_per_second,0.7839034,3.262279 -obs,9.174726,25.801239 diff --git a/data/lstm/lstm_mean_std.csv b/data/lstm/lstm_mean_std.csv deleted file mode 100755 index ee5bd04296..0000000000 --- a/data/lstm/lstm_mean_std.csv +++ /dev/null @@ -1,13 +0,0 @@ -,mean,std -area_sqkm,474.2365,510.592316 -lat,39.949427,4.182431 -lon,-96.920133,16.651526 -LWDOWN,302.85,65.58242 -PSFC,94364.266,8891.514 -Q2D,0.006817295,0.00429763 -RAINRATE,4.67E-05,0.000224821 -SWDOWN,182.7724,253.21062 -T2D,283.25006,10.96786 -U2D,1.0540345,3.0407786 -V2D,0.7839038,3.2622793 -obs,9.174725,25.801247 diff --git a/data/lstm/sugar_creek_trained.pt b/data/lstm/sugar_creek_trained.pt deleted file mode 100644 index e998a1a629cfe775141bf853a805126aeb23cdbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89921 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

sJOI*CclD+95E>GnTvQnL$rGckzUg9?q42 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

HcK?Dyq25B-!Ei?-39AZaw+P)q|ea@uOC& z$FjG#ALgr^irm_=e*W>1eYC62?g0xT1rdqHNBh;EB#dlAlPiug1|SY7aAqO@^3a9{DuN54hF>+j#cRP*Rohu?K6^fWc=Czsr!npSmZ5r2cd z^1xIY5)KS=Nx5cKRe9f{=w3&iHIF5JbVcZ0#=P1`8)RYnn=!v6JMj4U>yvw}=O!(= zo}|Pk3jEfn7^?G)k8`R>5je0BaZd@PVa4b}iBsNR%jl)KZ;J2zHmC?aOWi0=6~0xY zeS!zf-+{8oLB%`9mQRd(cP&^~q~soRlZz3sdvPK#>e#wh&Qk-7x2Cq#f2`Hj($Z|?het&JuJmP(}#UUB4V z)DBBZlsp-vaXoQLVU*$isgT81?+7=k+atN+-Sg3atk{hQxK&ekRi?-|{K(SkZaH9) z6>yFtenIO*Dx6w6*6A09Lc+f4qga{<-w=!l_F- z8&(@v>T1ef=z2O>=3nXjE9rpT8vg#RL-cs8qjgYdRQ(k)YmA)cPmyQjR5bkHbT<3) zUi^8hLvkL^Y)9KIdG-5WWc*m&%enWR99^9G97{e`d?}v()ZOVf-1b24&eq7|;vyD% zqm_fWhK8K-&N;;KT=;M+{yb0Z+23?XopO%*?41UQUamj$wC{K1vc_#gX`&pfvg#D$ z7tWe}I`PIOt#OA22{xTCo|oA5|8#aG;83k^d@Plvtlgq(8KD|Ww#YJwtPL}RK{9AE zBQhooiQB)FT}&HE3!0Ql5yC}r$5M%FP(qfm+)}nnrBs9e8M@}o+$*>HJ4e@HR({lDwbhR2;mvIPhIMiIoxl-M8~fBMni&m)?SXdH;p(-BqP?85)jyM}}Lo z))^H+V;?CpS4%)RTW)dkPc@YhwW!0%j_4f8m#Myf9Jy})lPMDgDR zehUkg^9usY(@*H$fGvBXH#74T zxhKLGRoMGW#L?D2?2{&j1lE+!;hN+saC}))o%alI=9E1(+ea@7m)B_N8gIL%<1kz~ z{D?T_fyuI5#Ya4|Z?9S6YypZWV_+zt7u&Z&(7^BHCc+~sGZfEka(H?2ZQKOKv(+oJ zn(j+mSt*s#72hi&p|&D}vL|=XPiG9y?VXlSu2%(lTC_aj$4<<@5rpv`2yEmZcX+^&#*d zG%h%>)?d!doJI#7S)S5D)o6;voa03ti+SvFVBjjBu{IKE|#>vztx7F(R8%lQ4h6Z*Y&G3A8+x~(w%y;*oZ%Vcc53vZh z@~gslhtA%>`#yC&w|dk&ZTW+sc+u;+0%u*0QPvo}Y!J809l{;N@79>1QbUsc+j*=v zzjEJy(!nZ=N)}Q>_el`O(Dmx8m;y35sNYof6SsC`_eFqjdsCLw;4WtuO--AsASz6} zx%oooOb#K+zHctKFq4^j*m&AMNJGxaH+96Is$t4*Cg!N;oAz|8V@|X4-Qlu#Q^^?6 z9k$=PBqyjx=HPd;6Ntko2={CcD=g@Q+$OT$u9nwu5y z;pg1;^;=KuWSSfe&>JNc`0b-(Gt0t!;3w8@C{s4ir-@EbUP>c=j%R2j=D(sI66;;Akf?47hWsxC{lzb*dh9F$!ebp)pU{duJ#+0R`e5y zX-wLfA`&*RUhdBrdO1!fb&nZJ7|GBtN-#p*{>%#jz3vYu!zu(my76$jV%wk`I z+|FV(6k~i!(pswIpa!hl@(eX3JakL_#iEDxW%~6AXKch1E`Qt-?1)sTj~Kl&h3vTE zMsHks#LPj7za8C*j*P6@Va+G8MnYY}^my!fq3FZ=O&>%ZSBKLdWYWL(e?C^z<1bq> z;eLPMh3ClOmR_C5Z4ViuJ-@rCW{WE&Ic@ZKRD}K1$4huGMTaRKc%Y#_MlpP9FU@b*bYmKPJ7cO7kv8w8$(n334Dz05N2 z()|%7wW`cONBPN!$K%92Q*>9{=tzQ}l61Ts?oWotDbiIR@xZG=q~LX;vpx~OVX}PA z_M11%>R+war$&nxnFLz;K@s>tSv^()j`tgsw~KK!gH`6c8S?=uTwpk~tt|~?@?vroS^h69yHhQW#4hNapoZd7e%%3}wvoTvR^{L|JMt;%y=4(v( zS3wsMXKNeKi587%p4B%zOP&|>)zI>CF5H+&YHT`Z;OyBVd5WB$vB7p_XK??ttBJ8E z@r#%Ktf)w(n;Ew6;A#qjnMzx){#kq=UzM4!T(x$45Jmi;>-4699wA1-A7ScWzs8$} zF*UY}nfl`5y4n2!53pqB$ZOsJ#QT7XLlYkEvmT0bz2`-{?6v3Clgoyt zMU!4XD1(PEAHNR9`)^HeaC#h;L?@8LUr*DMUt3kc=v99Hq)wC4pS4j*OoH;UwkKX) z@3xn`ACIk@ZnPS^x;}Gt@BCeDuw;6CCy>iI2IPa6_SX^+g^(9G90uQ= zqKk9&pDK~Ouz5cnpdskGJbz?0#C)LvhX}!B;NE0qZt~w%&o@U$h~>jtGWI(I?hC@& z&2X%YjOj@v}jHs8W6<>YHd`M2E2e9d00)0mKOu(**;!aRb4$A5I`z4-C}h27=T6EGh)Mq=12}@wEVD^8&yr z<#lWvQ2X8Ro6f(n1h{2@^OsN#8F%1I$zb1pTngq#k diff --git a/include/realizations/catchment/Formulation_Constructors.hpp b/include/realizations/catchment/Formulation_Constructors.hpp index fe106de361..dfd34ada31 100644 --- a/include/realizations/catchment/Formulation_Constructors.hpp +++ b/include/realizations/catchment/Formulation_Constructors.hpp @@ -20,10 +20,6 @@ #include "NetCDFPerFeatureDataProvider.hpp" #endif -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - #include "LSTM_Realization.hpp" -#endif - namespace realization { typedef std::shared_ptr (*constructor)(std::string, shared_ptr, utils::StreamHandler); @@ -46,10 +42,6 @@ namespace realization { #ifdef ACTIVATE_PYTHON {"bmi_python", create_formulation_constructor()}, #endif // ACTIVATE_PYTHON -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - , - {"lstm", create_formulation_constructor()} -#endif }; static bool formulation_exists(std::string formulation_type) { diff --git a/include/realizations/catchment/LSTM_Realization.hpp b/include/realizations/catchment/LSTM_Realization.hpp deleted file mode 100644 index 00c6dda436..0000000000 --- a/include/realizations/catchment/LSTM_Realization.hpp +++ /dev/null @@ -1,131 +0,0 @@ -#ifndef NGEN_LSTM_REALIZATION_HPP -#define NGEN_LSTM_REALIZATION_HPP - -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - -#include "Catchment_Formulation.hpp" -#include -#include "lstm/include/LSTM.h" -#include "lstm/include/lstm_params.h" -#include "lstm/include/lstm_config.h" -#include - -namespace realization { - - class LSTM_Realization : public Catchment_Formulation { - - public: - - typedef long time_step_t; - - - /** - * Parameterized constructor for LSTM Realization with lstm_params and lstm_config - * already constructed. - * - * @param catchment_id - * @param forcing - * @param output_stream - * @param params - * @param config - */ - LSTM_Realization( - std::string catchment_id, - std::shared_ptr gdp, - utils::StreamHandler output_stream, - lstm::lstm_params params, - lstm::lstm_config config - ); - - /** - * Parameterized constructor for LSTM Realization with only - * catchment_id, GenericDataProvider, and output_stream as parameters. - * - * @param catchment_id - * @param forcing - * @param output_stream - */ - LSTM_Realization( - std::string catchment_id, - std::shared_ptr gdp, - utils::StreamHandler output_stream - ) : Catchment_Formulation(catchment_id, gdp, output_stream) {} - - virtual ~LSTM_Realization(){}; - - /** - * Execute the backing model formulation for the given time step, where it is of the specified size, and - * return the total discharge. - * - * Function reads multiple inputs from ``forcing`` member variable. - * - * @param t_index The index of the time step for which to run model calculations. - * @param d_delta_s The duration, in seconds, of the time step for which to run model calculations. - * @return The total discharge for this time step. - */ - double get_response(time_step_t t_index, time_step_t t_delta_s) override; - - //double calc_et(double soil_m) override {return 0.0;} - - double calc_et() override {return 0.0;} - - std::string get_formulation_type() override { - return "lstm"; - } - - /** @TODO: Consider updating the below function to match the Tshirt realization and be able to return the - flux for a given time step. */ - /** - * Get a formatted line of output values for the current time step only, regardless of the time step given, - * as a delimited string. This function for this LSTM realization can later be updated to match the Tshirt - * realization and be able to return the flux for the given time step. - * - * For this type, the output consists of only the total discharge amount per time step; i.e., the same value - * that was returned by ``get_response``. - * - * This method is useful for preparing calculated data in a representation useful for output files, such as - * CSV files. - * - * The resulting string will contain calculated values for applicable output variables for the particular - * formulation, as determined for the current time step. However, the string will not contain any - * representation of the time step itself. - * - * An empty string is returned if the time step value is not in the range of valid time steps for which there - * are calculated values for all variables. - * - * The default delimiter is a comma. - * - * @param timestep The time step for which data is desired. (Not currently applicable for this realization) - * @return A delimited string with all the output variable values for the given time step. - */ - std::string get_output_line_for_timestep(int timestep, std::string delimiter=",") override; - - void create_formulation(boost::property_tree::ptree &config, geojson::PropertyMap *global = nullptr) override; - - void create_formulation(geojson::PropertyMap properties) override; - - const std::vector& get_required_parameters() override { - return REQUIRED_PARAMETERS; - } - - private: - std::string catchment_id; - lstm::lstm_params params; - lstm::lstm_config config; - std::unique_ptr model; - - std::vector REQUIRED_PARAMETERS = { - "pytorch_model_path", - "normalization_path", - "initial_state_path", - "latitude", - "longitude", - "area_square_km", - }; - - }; - -} - -#endif //NGEN_LSTM_TORCH_LIB_ACTIVE -#endif //NGEN_LSTM_REALIZATION_HPP diff --git a/models/lstm/include/LSTM.h b/models/lstm/include/LSTM.h deleted file mode 100644 index e49e67cc04..0000000000 --- a/models/lstm/include/LSTM.h +++ /dev/null @@ -1,144 +0,0 @@ -#ifndef LSTM_H -#define LSTM_H - -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - -#include "all.h" -#include "lstm_fluxes.h" -#include "lstm_params.h" -#include "lstm_config.h" -#include "lstm_state.h" -#include - -#include - -typedef std::unordered_map< std::string, std::unordered_map< std::string, double> > ScaleParams; - -using namespace std; - -namespace lstm { - - class lstm_model { - - public: - - /** @TODO: Make option to construct model without an initial state. */ - - /** - * Constructor for model object with parameters only. - * - * Constructor creates a "default" initial state, with soil_storage_meters and groundwater_storage_meters set to - * 0.0, and then otherwise proceeds as the constructor accepting the second parameter for initial state. - * - * @param model_params Model parameters lstm_params struct. - */ - lstm_model(lstm_config config, lstm_params model_params); - - /** - * Initialize LSTM Model State. - * Reads the initial state from a specified CSV file. This function - * might need to change if there is an option to initialize a blank - * state. - * @param initial_state_path - * @return - */ - void initialize_state(std::string initial_state_path); - - /** - * Return the smart pointer to the lstm::lstm_model struct for holding this object's current state. - * - * @return The smart pointer to the lstm_model struct for holding this object's current state. - */ - shared_ptr get_current_state(); - - /** - * Return the shared pointer to the lstm::lstm_fluxes struct for holding this object's current fluxes. - * - * @return The shared pointer to the lstm_fluxes struct for holding this object's current fluxes. - */ - shared_ptr get_fluxes(); - - /** - * Run the model to one time step, after performing initial housekeeping steps via a call to - * `manage_state_before_next_time_step_run`. - * - * @param dt the time step - * @param DLWRF_surface_W_per_meters_squared - * @param PRES_surface_Pa - * @param SPFH_2maboveground_kg_per_kg - * @param precip_meters_per_second - * @param DSWRF_surface_W_per_meters_squared - * @param TMP_2maboveground_K - * @param UGRD_10maboveground_meters_per_second - * @param VGRD_10maboveground_meters_per_second - * @return Returns 0 if the function successfully completes. - * Any other value returned means an error occurred. - */ - int run(double dt, double DLWRF_surface_W_per_meters_squared, double PRES_surface_Pa, - double SPFH_2maboveground_kg_per_kg, double precip_meters_per_second, - double DSWRF_surface_W_per_meters_squared, double TMP_2maboveground_K, - double UGRD_10maboveground_meters_per_second, double VGRD_10maboveground_meters_per_second); - - /** - * Denormalizes output from LSTM model. - * - * @param forcing_variable_string - * @param normalized_output - * @return denormalized_output - */ - double denormalize(std::string forcing_variable_string, double normalized_output); - - /** - * Normalizes inputs to LSTM model. - * - * @param forcing_variable_string - * @param forcing_variable - * @return normalized_input - */ - double normalize(std::string forcing_variable_string, double forcing_variable); - - protected: - - /** - * Perform necessary steps prior to the execution of model calculations for a new time step, for managing member - * variables that contain model state. - * - * This function is intended to be run only at the start of a new execution of the lstm_model::run method. It - * performs three housekeeping tasks needed before running the next group of time step modeling operations: - * - * * the initial maintained `current_state` is moved to `previous_state` - * * a new `current_state` is created - * * a new `fluxes` is created - */ - virtual void manage_state_before_next_time_step_run(); - - private: - /** torch confiruation variables */ - bool useGPU; - torch::Device device; - - /** Model state for the "current" time step, which may not be calculated yet. */ - shared_ptr current_state; - - /** Model execution parameters. */ - lstm_params model_params; - - /** Model configuration parameters */ - lstm_config config; - - /** Model state from that previous time step before the current. */ - shared_ptr previous_state; - - /** Model fluxes */ - shared_ptr fluxes; - - /** torch model */ - torch::jit::script::Module model; - - /** Parameter scaling */ - ScaleParams scale; - }; -} - -#endif //NGEN_LSTM_TORCH_LIB_ACTIVE -#endif //LSTM_H diff --git a/models/lstm/include/lstm_config.h b/models/lstm/include/lstm_config.h deleted file mode 100644 index 80cf30bfff..0000000000 --- a/models/lstm/include/lstm_config.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef NGEN_LSTM_CONFIGURATION_H -#define NGEN_LSTM_CONFIGURATION_H - -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - -#include - -namespace lstm { - - /** - * Structure for containing and organizing the parameters of the lstm hydrological model. - */ - struct lstm_config { - std::string pytorch_model_path; - std::string normalization_path; - std::string initial_state_path; - bool useGPU; - /** - * Constructor for instances, initializing members that correspond one-to-one with a parameter and deriving - * @param pytorch_model_path string path to the pytorch .pt or .ptc trace file - * @param normalization_path string path to the csv file containing input normalization parameters (mean and standard deviation) - * @param initial_state_path string path to the csv file containing serialized state tensors h_t and c_t - */ - lstm_config( - std::string pytorch_model_path, - std::string normalization_path, - std::string initial_state_path, - bool useGPU - ) : - pytorch_model_path(pytorch_model_path), - normalization_path(normalization_path), - initial_state_path(initial_state_path), - useGPU(useGPU) - {} - lstm_config() - : pytorch_model_path(""), normalization_path(""), initial_state_path(""), useGPU(false) - {} - }; -} - -#endif //NGEN_LSTM_TORCH_LIB_ACTIVE -#endif //NGEN_LSTM_CONIGURATION_H diff --git a/models/lstm/include/lstm_fluxes.h b/models/lstm/include/lstm_fluxes.h deleted file mode 100644 index 20e4e6dc9d..0000000000 --- a/models/lstm/include/lstm_fluxes.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef NGEN_LSTM_FLUXES_H -#define NGEN_LSTM_FLUXES_H - -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - -namespace lstm { - - /** - * Structure for containing and organizing the calculated flux values of the lstm hydrological model. - */ - struct lstm_fluxes { - double flow; - - lstm_fluxes(double f) - : flow(f) { - } - lstm_fluxes() - { - flow = 0.0; - } - }; - -} - -#endif //NGEN_LSTM_TORCH_LIB_ACTIVE -#endif //NGEN_LSTM_FLUXES_H diff --git a/models/lstm/include/lstm_params.h b/models/lstm/include/lstm_params.h deleted file mode 100644 index 79875b7549..0000000000 --- a/models/lstm/include/lstm_params.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef NGEN_LSTM_PARAMS_H -#define NGEN_LSTM_PARAMS_H - -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - -namespace lstm { - - /** - * Structure for containing and organizing the parameters of the lstm hydrological model. - */ - struct lstm_params { - double latitude; - double longitude; - double area; - - /** - * Constructor for instances, initializing members that correspond one-to-one with a parameter and deriving - * remaining (non-const and hard-coded) members. - * - * @param lat Initialization param for latitude member. - * @param lon Initialization param for longitude member. - * @param area Initialization param for basin area member in km. - */ - lstm_params(double lat, double lon, double area) : - latitude(lat), - longitude(lon), - area(area) - {} - lstm_params() - : latitude(0), longitude(0), area(0) - {} - }; -} - -#endif //NGEN_LSTM_TORCH_LIB_ACTIVE -#endif //NGEN_LSTM_PARAMS_H diff --git a/models/lstm/include/lstm_state.h b/models/lstm/include/lstm_state.h deleted file mode 100644 index 961fc35cc9..0000000000 --- a/models/lstm/include/lstm_state.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef NGEN_LSTM_STATE_H -#define NGEN_LSTM_STATE_H - -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - -#include - -namespace lstm { - - /** - * Structure for containing and organizing the state values of the lstm hydrological model. - */ - struct lstm_state { - //TODO exapnd these names and document what "state" they represent to the lstm model - torch::Tensor h_t; - torch::Tensor c_t; - - lstm_state(torch::Tensor h, torch::Tensor c) - : h_t(h), c_t(c) {} - /* - * Construct state tensors from vector - */ - lstm_state(std::vector h, std::vector c) - { - auto options = torch::TensorOptions().dtype(torch::kFloat64); - h_t = torch::from_blob(h.data(), {1, 1, int(h.size())}, options).clone(); - c_t = torch::from_blob(c.data(), {1, 1, int(c.size())}, options).clone(); - } - lstm_state() - { - auto options = torch::TensorOptions().dtype(torch::kFloat64); - h_t = torch::zeros({1, 1, 64}, options); - c_t = torch::zeros({1, 1, 64}, options); - } - }; - - inline void to_device( lstm_state& state, torch::Device device ) - { - state.h_t.to(device); - state.c_t.to(device); - } -} //namespace lstm - -#endif //NGEN_LSTM_TORCH_LIB_ACTIVE -#endif //NGEN_LSTM_STATE_H diff --git a/src/models/lstm/CMakeLists.txt b/src/models/lstm/CMakeLists.txt deleted file mode 100644 index 77a01b535b..0000000000 --- a/src/models/lstm/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -if(LSTM_TORCH_LIB_ACTIVE) - - add_library(models_lstm STATIC - LSTM.cpp) - - add_library(NGen::models_lstm ALIAS models_lstm) - - target_include_directories(models_lstm PUBLIC - ${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/include/utilities - ${PROJECT_SOURCE_DIR}/models/lstm/include - ${TORCH_INCLUDE_DIRS} - ) - -target_link_libraries(models_lstm PUBLIC - Boost::boost # Headers-only Boost - ${TORCH_LIBRARIES} - ) - -endif() diff --git a/src/models/lstm/LSTM.cpp b/src/models/lstm/LSTM.cpp deleted file mode 100644 index 6ac5ffdd82..0000000000 --- a/src/models/lstm/LSTM.cpp +++ /dev/null @@ -1,246 +0,0 @@ -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - -#include "LSTM.h" -#include "lstm_fluxes.h" -#include "lstm_state.h" -#include "CSV_Reader.h" -#include -#include - -using namespace std; - -typedef std::unordered_map< std::string, std::unordered_map< std::string, double> > ScaleParams; - -ScaleParams read_scale_params(std::string path) -{ - //Read the mean and standard deviation and put them into a map - ScaleParams params; - CSVReader reader(path); - auto data = reader.getData(); - std::vector header = data[0]; - //Advance the iterator to the first data row (skip the header) - auto row = data.begin(); - std::advance(row, 1); - //Loop from first row to end of data - for(; row != data.end(); ++row) - { - for(int i = 0; i < (*row).size(); i++) - { //row has var, mean, std_dev - //read into map keyed on var name, param name - params[ (*row)[0] ]["mean"] = strtof( (*row)[1].c_str(), NULL); - params[ (*row)[0] ]["std_dev"] = strtof( (*row)[2].c_str(), NULL); - } - } - - return params; -} - -namespace lstm { - - /** @TODO: Make option to construct model without an initial state. - * Consider initializing the empty state with: - * lstm_model(config, model_params, make_shared(lstm_state())) {} - */ - - /** - * Constructor for model object based on model parameters only. - * - * @param model_params Model parameters lstm_params struct. - */ - lstm_model::lstm_model(lstm_config config, lstm_params model_params) - : config(config), model_params(model_params), - device( torch::Device(torch::kCPU) ) - { - // ********** Set fluxes to null for now: it is bogus until first call of run function, which initializes it - fluxes = nullptr; - useGPU = config.useGPU && torch::cuda::is_available(); - device = torch::Device( useGPU ? torch::kCUDA : torch::kCPU ); - - lstm_model::initialize_state(config.initial_state_path.c_str()); - - //FIXME need to initialize the model states by running a "warmup" - //so when the model is constructed, run it on N timesteps prior to prediction period - //OR read those states in and create the initial state tensors - - //std::cout<<"model_params.pytorch_model_path: " << config.pytorch_model_path; - - model = torch::jit::load(config.pytorch_model_path); - model.to( device ); - // Set to `eval` model (just like Python) - model.eval(); - - //no_grad disables gradient calculations on the tensors. - //Since gradient calculations are not needed on the forward pass, - //no_grad reduces memory consumption. - torch::NoGradGuard no_grad_; - - this->scale = read_scale_params(config.normalization_path); - this->fluxes = std::make_shared(lstm::lstm_fluxes()); - - } - - /** - * Initialize LSTM Model State. - * Reads the initial state from a specified CSV file. This function - * might need to change if there is an option to initialize a blank - * state. - * @param initial_state_path - * @return - */ - void lstm_model::initialize_state(std::string initial_state_path) - { - - vector h_vec; - vector c_vec; - CSVReader reader(initial_state_path); - auto data = reader.getData(); - std::vector header = data[0]; - //Advance the iterator to the first data row (skip the header) - auto row = data.begin(); - std::advance(row, 1); - //Loop form first row to end of data - - //Check to ensure that there are 2 columns - if(row[0].size() != 2) - { - throw std::runtime_error("ERROR: LSTM Model requires two columns for the initial states input."); - } - - for(; row != data.end(); ++row) - { - h_vec.push_back( std::strtof( (*row)[0].c_str(), NULL ) ); - c_vec.push_back( std::strtof( (*row)[1].c_str(), NULL ) ); - } - - current_state = std::make_shared(lstm_state(h_vec, c_vec)); - previous_state = std::make_shared(lstm_state(h_vec, c_vec)); - - lstm::to_device(*current_state, device); - lstm::to_device(*previous_state, device); - - return; - } - - /** - * Return the smart pointer to the lstm::lstm_model struct for holding this object's current state. - * - * @return The smart pointer to the lstm_model struct for holding this object's current state. - */ - shared_ptr lstm_model::get_current_state() { - return current_state; - } - - /** - * Return the shared pointer to the lstm::lstm_fluxes struct for holding this object's current fluxes. - * - * @return The shared pointer to the lstm_fluxes struct for holding this object's current fluxes. - */ - shared_ptr lstm_model::get_fluxes() { - return fluxes; - } - - /** - * Run the model to one time step, after performing initial housekeeping steps via a call to - * `manage_state_before_next_time_step_run`. - * - * @param dt the time step size in seconds - * @param DLWRF_surface_W_per_meters_squared - * @param PRES_surface_Pa - * @param SPFH_2maboveground_kg_per_kg - * @param precip_meters_per_second - * @param DSWRF_surface_W_per_meters_squared - * @param TMP_2maboveground_K - * @param UGRD_10maboveground_meters_per_second - * @param VGRD_10maboveground_meters_per_second - * @return Returns 0 if the function successfully completes. - * Any other value returned means an error occurred. - */ - int lstm_model::run(double dt, double DLWRF_surface_W_per_meters_squared, - double PRES_surface_Pa, double SPFH_2maboveground_kg_per_kg, - double precip_meters_per_second, double DSWRF_surface_W_per_meters_squared, - double TMP_2maboveground_K, double UGRD_10maboveground_meters_per_second, - double VGRD_10maboveground_meters_per_second) { - // Do resetting/housekeeping for new calculations and new state values - - manage_state_before_next_time_step_run(); - - std::vector inputs; - torch::Tensor forcing = torch::zeros({1, 11}); - - forcing[0][0] = lstm_model::normalize("Precip_rate", precip_meters_per_second); - forcing[0][1] = lstm_model::normalize("SPFH_2maboveground_kg_per_kg", SPFH_2maboveground_kg_per_kg); - forcing[0][2] = lstm_model::normalize("TMP_2maboveground_K", TMP_2maboveground_K); - forcing[0][3] = lstm_model::normalize("DLWRF_surface_W_per_meters_squared", DLWRF_surface_W_per_meters_squared); - forcing[0][4] = lstm_model::normalize("DSWRF_surface_W_per_meters_squared", DSWRF_surface_W_per_meters_squared); - forcing[0][5] = lstm_model::normalize("PRES_surface_Pa", PRES_surface_Pa); - forcing[0][6] = lstm_model::normalize("UGRD_10maboveground_meters_per_second", UGRD_10maboveground_meters_per_second); - forcing[0][7] = lstm_model::normalize("VGRD_10maboveground_meters_per_second", VGRD_10maboveground_meters_per_second); - forcing[0][8] = lstm_model::normalize("Area_Square_km", model_params.area); - forcing[0][9] = lstm_model::normalize("Latitude", model_params.latitude); - forcing[0][10] = lstm_model::normalize("Longitude", model_params.longitude); - - // Create the model input for one time step - inputs.push_back(forcing.to(device)); - inputs.push_back(previous_state->h_t); - inputs.push_back(previous_state->c_t); - // Run the model - auto output = model.forward(inputs).toTuple()->elements(); - //Get the outputs - double out_flow = lstm_model::denormalize( "obs", output[0].toTensor().item() ); - out_flow = out_flow * 0.028316847; //convert cfs to cms - fluxes = std::make_shared( lstm_fluxes( out_flow ) ) ; - - current_state = std::make_shared( lstm_state(output[1].toTensor(), output[2].toTensor()) ); - - return 0; - } - - /** - * Denormalizes output from LSTM model. - * - * @param forcing_variable_string - * @param normalized_output - * @return denormalized_output - */ - double lstm_model::denormalize(std::string forcing_variable_string, double normalized_output) - { - double mean, std_dev; - mean = this->scale[ forcing_variable_string ]["mean"]; - std_dev = this->scale[ forcing_variable_string ]["std_dev"]; - return (normalized_output * std_dev) + mean; - } - - /** - * Normalizes inputs to LSTM model. - * - * @param forcing_variable_string - * @param forcing_variable - * @return normalized_input - */ - double lstm_model::normalize(std::string forcing_variable_string, double forcing_variable) - { - double mean, std_dev; - mean = this->scale[ forcing_variable_string ]["mean"]; - std_dev = this->scale[ forcing_variable_string ]["std_dev"]; - return (forcing_variable - mean) / std_dev; - } - - /** - * Perform necessary steps prior to the execution of model calculations for a new time step, for managing member - * variables that contain model state. - * - * This function is intended to be run only at the start of a new execution of the lstm_model::run method. It - * performs three housekeeping tasks needed before running the next group of time step modeling operations: - * - * * the initial maintained `current_state` is moved to `previous_state` - * * a new `current_state` is created - * * a new `fluxes` is created - */ - void lstm_model::manage_state_before_next_time_step_run() - { - previous_state = current_state; - } - -} - -#endif //NGEN_LSTM_TORCH_LIB_ACTIVE diff --git a/src/realizations/catchment/CMakeLists.txt b/src/realizations/catchment/CMakeLists.txt index efe671d2df..a3d1c6f7b1 100644 --- a/src/realizations/catchment/CMakeLists.txt +++ b/src/realizations/catchment/CMakeLists.txt @@ -34,14 +34,3 @@ if (${BMI_FORTRAN_ACTIVE}) find_library(BMI_FORTRAN_ISO_C_LIB_PATH "${BMI_FORTRAN_ISO_C_LIB_NAME}" PATHS "${BMI_FORTRAN_ISO_C_LIB_DIR}") target_link_libraries(realizations_catchment PRIVATE "${BMI_FORTRAN_ISO_C_LIB_PATH}") endif() - -if(LSTM_TORCH_LIB_ACTIVE) - add_compile_definitions(NGEN_LSTM_TORCH_LIB_ACTIVE) - - target_include_directories(realizations_catchment PUBLIC - ${PROJECT_SOURCE_DIR}/models/lstm/include - ) - target_link_libraries(realizations_catchment PUBLIC - NGen::models_lstm - ) -endif() diff --git a/src/realizations/catchment/LSTM_Realization.cpp b/src/realizations/catchment/LSTM_Realization.cpp deleted file mode 100644 index 29149c6f1f..0000000000 --- a/src/realizations/catchment/LSTM_Realization.cpp +++ /dev/null @@ -1,130 +0,0 @@ -#include "LSTM_Realization.hpp" -#include "Catchment_Formulation.hpp" -#include "CSV_Reader.h" - -#ifdef NGEN_LSTM_TORCH_LIB_ACTIVE - -using namespace realization; - -/** - * Parameterized constructor for LSTM Realization with lstm_params and lstm_config - * already constructed. - * - * @param catchment_id - * @param forcing - * @param output_stream - * @param params - * @param config - */ -LSTM_Realization::LSTM_Realization( - std::string id, - std::shared_ptr gdp, - utils::StreamHandler output_stream, - lstm::lstm_params params, - lstm::lstm_config config - ) : Catchment_Formulation(id, gdp, output_stream), params(params), config(config) { - model = make_unique(lstm::lstm_model(config, params)); - } - - -/** - * Execute the backing model formulation for the given time step, where it is of the specified size, and - * return the total discharge. - * - * Function reads multiple inputs from ``forcing`` member variable. - * - * @param t_index The index of the time step for which to run model calculations. - * @param d_delta_s The duration, in seconds, of the time step for which to run model calculations. - * @return The total discharge for this time step. - */ -double LSTM_Realization::get_response(time_step_t t_index, time_step_t t_delta_s) { - - //Checking the time step used is consistent with that provided in forcing data - time_t t_delta = this->forcing->record_duration(); - if (t_delta != t_delta_s) { //Checking the time step used is consistent with that provided in forcing data - throw std::invalid_argument("Getting response using insonsistent time step with provided forcing data"); - } - //Negative t_index is not allowed - if (t_index < 0) { - throw std::invalid_argument("Getting response of negative time step in Tshirt C Realization is not allowed."); - } - time_t start_time = this->forcing->get_data_start_time(); - time_t stop_time = this->forcing->get_data_stop_time(); - time_t t_current = start_time + t_index * t_delta_s; - //Ensure model run does not exceed the end time of forcing - if (t_current > stop_time) { - throw std::invalid_argument("Getting response beyond time with available forcing."); - } - - int error = model->run(t_delta_s, - this->forcing->get_value(CatchmentAggrDataSelector(this->catchment_id, CSDMS_STD_NAME_SOLAR_LONGWAVE, t_current, t_delta_s, ""), data_access::MEAN), - this->forcing->get_value(CatchmentAggrDataSelector(this->catchment_id, CSDMS_STD_NAME_SURFACE_AIR_PRESSURE, t_current, t_delta_s, ""), data_access::MEAN), - this->forcing->get_value(CatchmentAggrDataSelector(this->catchment_id, NGEN_STD_NAME_SPECIFIC_HUMIDITY, t_current, t_delta_s, ""), data_access::MEAN), - this->forcing->get_value(CatchmentAggrDataSelector(this->catchment_id, CSDMS_STD_NAME_LIQUID_EQ_PRECIP_RATE, t_current, t_delta_s, ""), data_access::SUM), - this->forcing->get_value(CatchmentAggrDataSelector(this->catchment_id, CSDMS_STD_NAME_SOLAR_SHORTWAVE, t_current, t_delta_s, ""), data_access::MEAN), - this->forcing->get_value(CatchmentAggrDataSelector(this->catchment_id, CSDMS_STD_NAME_SURFACE_TEMP, t_current, t_delta_s, ""), data_access::MEAN), - this->forcing->get_value(CatchmentAggrDataSelector(this->catchment_id, CSDMS_STD_NAME_WIND_U_X, t_current, t_delta_s, ""), data_access::MEAN), - this->forcing->get_value(CatchmentAggrDataSelector(this->catchment_id, CSDMS_STD_NAME_WIND_V_Y, t_current, t_delta_s, ""), data_access::MEAN) - ); - - return model->get_fluxes()->flow; -} - -/** @TODO: Consider updating the below function to match the Tshirt realization and be able to return the - flux for a given time step. */ -/** - * Get a formatted line of output values for the current time step only, regardless of the time step given, - * as a delimited string. This function for this LSTM realization can later be updated to match the Tshirt - * realization and be able to return the flux for the given time step. - * - * For this type, the output consists of only the total discharge amount per time step; i.e., the same value - * that was returned by ``get_response``. - * - * This method is useful for preparing calculated data in a representation useful for output files, such as - * CSV files. - * - * The resulting string will contain calculated values for applicable output variables for the particular - * formulation, as determined for the current time step. However, the string will not contain any - * representation of the time step itself. - * - * An empty string is returned if the time step value is not in the range of valid time steps for which there - * are calculated values for all variables. - * - * The default delimiter is a comma. - * - * @param timestep The time step for which data is desired. (Not currently applicable for this realization) - * @return A delimited string with all the output variable values for the given time step. - */ -std::string LSTM_Realization::get_output_line_for_timestep(int timestep, std::string delimiter) { - return std::to_string(model->get_fluxes()->flow); -} - -void LSTM_Realization::create_formulation(geojson::PropertyMap properties) { - this->validate_parameters(properties); - - this->catchment_id = this->get_id(); - - lstm::lstm_params lstm_params{ - properties.at("latitude").as_real_number(), - properties.at("longitude").as_real_number(), - properties.at("area_square_km").as_real_number(), - - }; - lstm::lstm_config config{ - properties.at("pytorch_model_path").as_string(), - properties.at("normalization_path").as_string(), - properties.at("initial_state_path").as_string(), - properties.at("useGPU").as_boolean() - }; - - this->params = lstm_params; - this->config = config; - this->model = make_unique(lstm::lstm_model(config, lstm_params)); -} - -void LSTM_Realization::create_formulation(boost::property_tree::ptree &config, geojson::PropertyMap *global) { - geojson::PropertyMap options = this->interpret_parameters(config, global); - create_formulation(options); -} - -#endif diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 66a08e1c01..4cde202823 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -25,10 +25,6 @@ if(BMI_FORTRAN_ACTIVE) add_compile_definitions(NGEN_BMI_FORTRAN_LIB_TESTS_ACTIVE) endif() -if(LSTM_TORCH_LIB_ACTIVE) - add_compile_definitions(LSTM_TORCH_LIB_TESTS_ACTIVE) -endif() - if(NGEN_ACTIVATE_ROUTING) add_compile_definitions(ROUTING_PYBIND_TESTS_ACTIVE) endif() @@ -246,21 +242,6 @@ add_test( ${NETCDF_LIBRARIES} ) -########################## Internal Torchlib LSTM Tests -if(LSTM_TORCH_LIB_ACTIVE) - add_test( - test_lstm - 2 - models/lstm/include/LSTM_Test.cpp - realizations/catchments/LSTM_Realization_Test.cpp - NGen::core - NGen::realizations_catchment - NGen::core_mediator - libudunits2 - ${NETCDF_LIBRARIES} - ) -endif() - ########################## Routing Tests if(NGEN_ACTIVATE_ROUTING) add_test( diff --git a/test/data/model/lstm/initial_states.csv b/test/data/model/lstm/initial_states.csv deleted file mode 100644 index 074170b569..0000000000 --- a/test/data/model/lstm/initial_states.csv +++ /dev/null @@ -1,65 +0,0 @@ -h_t,c_t -0.1536959,0.5977953 -0.34566152,13.687507 --0.16843161,-3.228266 --0.1047104,-0.53653455 --0.57301396,-1.1193033 -0.26273784,1.6482165 --0.053256456,-0.34890324 --0.24596663,-2.3661792 -0.010543859,0.048195954 --0.006508373,-0.0979699 -0.022129519,2.768485 -0.5791072,5.1234913 --0.35121858,-1.9823049 --0.014008848,-0.08184317 -0.17693731,0.30314082 --0.75739604,-2.006318 --0.26804605,-0.6875008 --0.21218267,-0.3091483 -0.3962413,0.59882385 --0.036771704,-2.008611 -0.003212482,0.03500252 -0.3082906,4.7202616 -0.3171625,7.4866033 --0.20165843,-10.195228 -0.6830855,8.287675 --0.010220701,-0.12318495 --0.043027107,-0.5066032 --0.33712575,-34.11917 --0.30045974,-19.456871 -0.13517518,5.1954875 --0.008104391,-0.069324456 -0.09392611,0.4168161 --0.13266622,-5.3705645 -0.004889662,0.2060275 --0.000135662,-0.000607314 --0.31847715,-0.437886 --0.20750743,-15.356831 --0.23644102,-0.33845335 --0.18697523,-0.46342096 -0.006417224,0.03174661 --0.009578296,-0.08877465 -0.5017063,14.311281 --0.19963627,-1.5812411 --0.007490416,-0.26415315 -0.011976934,0.43083748 -0.014015907,0.09131075 -0.2011106,27.510174 -0.48911452,4.35671 -0.08763203,2.643056 --0.006044372,-0.18535723 --0.45652187,-3.4137676 --0.006026973,-0.038571917 --0.30038968,-1.6894548 --0.21969596,-5.375217 --0.4489063,-21.319094 -0.35732156,25.704021 -0.34422526,0.5003569 --0.33628726,-7.381399 -0.15154575,0.9492416 -0.5321333,37.394684 --0.1178656,-10.278872 -0.590509,0.9518527 --0.63163435,-39.448425 -0.53634644,29.58782 diff --git a/test/data/model/lstm/input_scaling.csv b/test/data/model/lstm/input_scaling.csv deleted file mode 100644 index 11f81ce851..0000000000 --- a/test/data/model/lstm/input_scaling.csv +++ /dev/null @@ -1,13 +0,0 @@ -variable,mean,std -Latitude,39.949427,4.182431 -Longitude,-96.920133,16.651526 -Area_Square_km,474.2365,510.592316 -DLWRF_surface_W_per_meters_squared,302.84995,65.58242 -PRES_surface_Pa,94364.266,8891.513 -SPFH_2maboveground_kg_per_kg,0.006817294,0.004297631 -Precip_rate,4.67E-05,0.00022482131 -DSWRF_surface_W_per_meters_squared,182.7724,253.21057 -TMP_2maboveground_K,283.25012,10.967861 -UGRD_10maboveground_meters_per_second,1.0540344,3.040779 -VGRD_10maboveground_meters_per_second,0.7839034,3.262279 -obs,9.174726,25.801239 diff --git a/test/data/model/lstm/lstm_mean_std.csv b/test/data/model/lstm/lstm_mean_std.csv deleted file mode 100755 index ee5bd04296..0000000000 --- a/test/data/model/lstm/lstm_mean_std.csv +++ /dev/null @@ -1,13 +0,0 @@ -,mean,std -area_sqkm,474.2365,510.592316 -lat,39.949427,4.182431 -lon,-96.920133,16.651526 -LWDOWN,302.85,65.58242 -PSFC,94364.266,8891.514 -Q2D,0.006817295,0.00429763 -RAINRATE,4.67E-05,0.000224821 -SWDOWN,182.7724,253.21062 -T2D,283.25006,10.96786 -U2D,1.0540345,3.0407786 -V2D,0.7839038,3.2622793 -obs,9.174725,25.801247 diff --git a/test/data/model/lstm/sugar_creek_trained.pt b/test/data/model/lstm/sugar_creek_trained.pt deleted file mode 100644 index e998a1a629cfe775141bf853a805126aeb23cdbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89921 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

sJOI*CclD+95E>GnTvQnL$rGckzUg9?q42 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

HcK?Dyq25B-!Ei?-39AZaw+P)q|ea@uOC& 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 diff --git a/test/models/lstm/include/LSTM_Test.cpp b/test/models/lstm/include/LSTM_Test.cpp deleted file mode 100644 index bc5958ad1a..0000000000 --- a/test/models/lstm/include/LSTM_Test.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#ifdef LSTM_TORCH_LIB_TESTS_ACTIVE - -#include "gtest/gtest.h" -#include "lstm/include/LSTM.h" -#include "lstm/include/lstm_params.h" -#include "lstm/include/lstm_config.h" - -class LSTMModelTest : public ::testing::Test { - -protected: - - LSTMModelTest() { - - } - - ~LSTMModelTest() override { - - } - - void SetUp() override; - - void TearDown() override; - - void setupLSTMModel(); - - std::unique_ptr model; -}; - -void LSTMModelTest::SetUp() { - setupLSTMModel(); -} - -void LSTMModelTest::TearDown() { -} - -/** Construct a LSTM Model. */ -void LSTMModelTest::setupLSTMModel() -{ - lstm::lstm_params params{ - 35.2607453, - -80.84020072, - 15.617167 - }; - - lstm::lstm_config config{ - "./test/data/model/lstm/sugar_creek_trained.pt", - "./test/data/model/lstm/input_scaling.csv", - "./test/data/model/lstm/initial_states.csv", - false - }; - - model = std::make_unique(lstm::lstm_model(config, params)); - -} - -/** Test running LSTM model for one timestep. */ -TEST_F(LSTMModelTest, TestLSTMModel) -{ - int error = model->run(3600.0, 369.20001220703125, 99870.0, 0.009800000116229057, - 9.493307095661946e-08, 0.0, 287.0, -1.7000000476837158, 3.4000000953674316); - - double outflow = model->get_fluxes()->flow; - - EXPECT_DOUBLE_EQ (0.17238743535773413, outflow); - - ASSERT_TRUE(true); -} - -#endif // LSTM_TORCH_LIB_TESTS_ACTIVE diff --git a/test/realizations/catchments/LSTM_Realization_Test.cpp b/test/realizations/catchments/LSTM_Realization_Test.cpp deleted file mode 100644 index 33152046f5..0000000000 --- a/test/realizations/catchments/LSTM_Realization_Test.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#ifdef LSTM_TORCH_LIB_TESTS_ACTIVE - -#include "gtest/gtest.h" -#include "realizations/catchment/LSTM_Realization.hpp" -#include "utilities/StreamHandler.hpp" -#include "CsvPerFeatureForcingProvider.hpp" - -class LSTMRealizationTest : public ::testing::Test { - -protected: - - LSTMRealizationTest() { - - } - - ~LSTMRealizationTest() override { - - } -}; - -/** Test create LSTM Realization and get_response function. */ -TEST_F(LSTMRealizationTest, TestLSTMRealization) -{ - utils::StreamHandler output_stream; - - forcing_params forcing_config("./test/data/forcing/cat-10_2015-12-01 00_00_00_2015-12-30 23_00_00.csv", - "CsvPerFeature", "2015-12-01 00:00:00", "2015-12-30 23:00:00"); - auto fp = std::make_shared(forcing_config); - - std::string catchment_id = "cat-87"; - - lstm::lstm_params params{ - 35.2607453, - -80.84020072, - 15.617167 - }; - - lstm::lstm_config config{ - "./test/data/model/lstm/sugar_creek_trained.pt", - "./test/data/model/lstm/input_scaling.csv", - "./test/data/model/lstm/initial_states.csv", - false - }; - - realization::LSTM_Realization lstm_realization1(catchment_id, fp, output_stream, params, config); - - double flow; - - flow = lstm_realization1.get_response(1, 3600); - - EXPECT_DOUBLE_EQ(0.17564937836377131, flow); - - ASSERT_TRUE(true); -} - -#endif // LSTM_TORCH_LIB_TESTS_ACTIVE