Skip to content

Commit

Permalink
Merge pull request #135 from arbennett/feature/multi_objective_calibr…
Browse files Browse the repository at this point in the history
…ation

Feature/multi objective calibration
  • Loading branch information
arbennett committed Nov 24, 2020
2 parents c6519a3 + 7e96ef2 commit 69d8f99
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 10 deletions.
27 changes: 20 additions & 7 deletions pysumma/calibration/meta/model_executable.template
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@ import pysumma as ps
import pysumma.evaluation as pse
import shutil
import xarray as xr
import numpy as np
$importStrings

if __name__ == '__main__':
# Template variables
summa_exe = '$summaExe'
file_manager = '$fileManager'
obs_data_file = '$obsDataFile'
sim_calib_var = '$simVarName'
obs_calib_var = '$obsVarName'
sim_calib_vars = $simVarList
obs_calib_vars = $obsVarList
out_file = '$outFile'
metrics_log = '$metricsLog'
param_mapping_file = '$paramMappingFile'
Expand Down Expand Up @@ -78,11 +79,23 @@ if __name__ == '__main__':
obs_ds = obs_ds.sel(time=time_slice)
sim_filt, obs_filt = filter(sim_ds, obs_ds)

kge = pse.kling_gupta_efficiency(sim_filt[sim_calib_var], conversion(obs_filt[obs_calib_var]))
mae = pse.mean_absolute_error(sim_filt[sim_calib_var], conversion(obs_filt[obs_calib_var]))
mse = pse.mean_squared_error(sim_filt[sim_calib_var], conversion(obs_filt[obs_calib_var]))
rmse = pse.root_mean_square_error(sim_filt[sim_calib_var], conversion(obs_filt[obs_calib_var]))
nse = pse.nash_sutcliffe_efficiency(sim_filt[sim_calib_var], conversion(obs_filt[obs_calib_var]))
kge_list = []
mae_list = []
mse_list = []
rmse_list = []
nse_list = []
for simvar, obsvar in zip(sim_calib_vars, obs_calib_vars):
kge_list.append(pse.kling_gupta_efficiency(sim_filt[simvar], conversion(obs_filt[obsvar])))
mae_list.append(pse.mean_absolute_error(sim_filt[simvar], conversion(obs_filt[obsvar])))
mse_list.append(pse.mean_squared_error(sim_filt[simvar], conversion(obs_filt[obsvar])))
rmse_list.append(pse.root_mean_square_error(sim_filt[simvar], conversion(obs_filt[obsvar])))
nse_list.append(pse.nash_sutcliffe_efficiency(sim_filt[simvar], conversion(obs_filt[obsvar])))

kge = np.mean(kge_list)
mae = np.mean(mae_list)
mse = np.mean(mse_list)
rmse = np.mean(rmse_list)
nse = np.mean(nse_list)

# save diagnostics in form that ostrich can read
with open(out_file, 'w+') as f:
Expand Down
4 changes: 2 additions & 2 deletions pysumma/calibration/ostrich.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,8 +264,8 @@ def map_vars_to_run_template(self):
'summaExe': self.summa,
'fileManager': self.simulation.manager_path,
'obsDataFile': self.obs_data_file,
'simVarName': self.sim_calib_var,
'obsVarName': self.obs_calib_var,
'simVarList': self.sim_calib_vars,
'obsVarList': self.obs_calib_vars,
'outFile': self.metrics_file,
'metricsLog': self.metrics_log,
'importStrings': self.import_strings,
Expand Down
2 changes: 1 addition & 1 deletion pysumma/ensemble.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ def rerun_failed(self, run_option: str, prerun_cmds=None,
def _submit(s: Simulation, name: str, run_option: str, prerun_cmds, config):
s.initialize()
s.apply_config(config)
s.run(run_option, run_suffix=name, prerun_cmds=prerun_cmds)
s.run(run_option, run_suffix=name, prerun_cmds=prerun_cmds, freq_restart='e')
s.process = None
return s

Expand Down

0 comments on commit 69d8f99

Please sign in to comment.