__author__ = "schelle" import unittest import logging import sys sys.path = ["../"] + sys.path import wflow.wflow_bmi as bmi import time import os """ Simple test for wflow bmi framework """ class MyTest(unittest.TestCase): def testbmifuncs(self): bmiobj = bmi.wflowbmi_csdms() bmiobj.initialize("wflow_sceleton/wflow_sceleton.ini", loglevel=logging.ERROR) print ("-------------- Grid origin: ") gorigin = bmiobj.get_grid_origin("Altitude") # print(gorigin) self.assertAlmostEquals( sum([45.875934703275561, 5.2088299822062254]), sum(gorigin), places=4 ) print ("-------------- Grid shape: ") print (bmiobj.get_grid_shape("Altitude")) self.assertAlmostEquals( sum([169L, 187L]), sum(bmiobj.get_grid_shape("Altitude")), places=4 ) print ("-------------- Grid spacing: ") print (bmiobj.get_grid_spacing("Altitude")) self.assertAlmostEquals( sum([0.036666665, 0.036666665]), sum(bmiobj.get_grid_spacing("Altitude")), places=4, ) print ("-------------- Grid X: ") print (bmiobj.get_grid_x("Altitude")) self.assertAlmostEquals( 5.22716331, bmiobj.get_grid_x("Altitude")[0, 0], places=4 ) print ("-------------- Grid Y: ") print (bmiobj.get_grid_y("Altitude")) self.assertAlmostEquals( 45.89426804, bmiobj.get_grid_y("Altitude")[0, 0], places=4 ) print ("-------------- Grid Z: ") print (bmiobj.get_grid_z("Altitude")) self.assertAlmostEquals( 218.44944763, bmiobj.get_grid_z("Altitude")[0, 0], places=4 ) print ("-------------- Name: ") print (bmiobj.get_component_name()) self.assertEquals("wflow_sceleton", bmiobj.get_component_name()) print ("-------------- Input var names: ") print (bmiobj.get_input_var_names()) print ("-------------- UNit of var TEMP: ") print (bmiobj.get_var_units("TEMP")) print ("-------------- UNit of var P: ") print (bmiobj.get_var_units("P")) print ("-------------- Output var names: ") print (bmiobj.get_output_var_names()) print ("-------------- Time units: ") print (bmiobj.get_time_units()) print ("-------------- Time step: ") print (bmiobj.get_time_step()) print ("-------------- Start time: ") print (bmiobj.get_start_time()) print ("-------------- Current time: ") print (bmiobj.get_current_time()) a = bmiobj.get_current_time() # print(time.localtime(bmiobj.get_current_time())) os.environ["TZ"] = "Europe/London" print ("-------------- Current time (set to london): ") print (bmiobj.get_current_time()) b = bmiobj.get_current_time() self.assertAlmostEquals(a, b) print ("-------------- update: ") bmiobj.update() print ("-------------- Current time after update: ") print (bmiobj.get_current_time()) print (time.localtime(bmiobj.get_current_time())) print ("-------------- Start time: ") print (bmiobj.get_start_time()) print (time.localtime(bmiobj.get_start_time())) print ("-------------- End time: ") print (bmiobj.get_end_time()) print (time.localtime(bmiobj.get_end_time())) print ("-------------- Grid type: ") print (bmiobj.get_grid_type("Altitude")) print ("-------------- Var type: ") print (bmiobj.get_var_type("Altitude")) print ("-------------- Var rank: ") print (bmiobj.get_var_rank("Altitude")) print ("-------------- Var size: ") print (bmiobj.get_var_size("Altitude")) print ("-------------- Var nbytes: ") print (bmiobj.get_var_nbytes("Altitude")) print ("-------------- Getvalue: ") print (bmiobj.get_value("Altitude")) print ("-------------- Getvalue: ") print (bmiobj.get_value("timestepsecs")) print ("-------------- get_attribute_names: ") names = bmiobj.get_attribute_names() print names print ("-------------- get_attribute_value: ") print names[0] print (bmiobj.get_attribute_value(names[0])) print ("-------------- set_attribute_value: ") print names[0] bmiobj.set_attribute_value(names[0], "SET By TEST") print (bmiobj.get_attribute_value(names[0])) self.assertEquals("SET By TEST", bmiobj.get_attribute_value(names[0])) print ("-------------- set_start_time: ") bmiobj.set_start_time(0) print (bmiobj.get_attribute_value("run:starttime")) print ("-------------- save the state:") bmiobj.save_state(".") self.assertTrue(os.path.exists("TSoil.map")) os.remove("TSoil.map") bmiobj.finalize() def testbmirun(self): bmiobj = bmi.wflowbmi_csdms() bmiobj.initialize("wflow_sceleton/wflow_sceleton.ini", loglevel=logging.DEBUG) bmiobj.set_attribute_value("run:runlengthdetermination", "intervals") print (bmiobj.get_var_type("IF")) et = bmiobj.get_end_time() st = bmiobj.get_start_time() ts = 86400 # Do timesteps and chak bmiobj.update_until(et) bmiobj.get_current_time() bmiobj.finalize() print et - bmiobj.get_current_time() self.assertEquals(et, bmiobj.get_current_time()) def testbmirun_hr(self): bmiobj = bmi.wflowbmi_csdms() bmiobj.initialize( "wflow_sceleton/wflow_sceleton_hr.ini", loglevel=logging.DEBUG ) print (bmiobj.get_var_type("IF")) et = bmiobj.get_end_time() st = bmiobj.get_start_time() ts = 3600 # Do timesteps and chak bmiobj.update_until(et) bmiobj.get_current_time() bmiobj.finalize() print et - bmiobj.get_current_time() self.assertEquals(et, bmiobj.get_current_time()) def testbmirun_l(self): print "Run with update(-1)" bmiobj = bmi.wflowbmi_light() bmiobj.initialize("wflow_sceleton/wflow_sceleton.ini", loglevel=logging.ERROR) print bmiobj.get_current_time() et = bmiobj.get_end_time() st = bmiobj.get_start_time() print bmiobj.get_current_time() bmiobj.update(et - st) print bmiobj.get_current_time() bmiobj.finalize() print bmiobj.get_current_time() print et print st self.assertEquals(et, bmiobj.get_current_time()) def testbmirun_space_in_name(self): print "Run with update(-1)" bmiobj = bmi.wflowbmi_light() bmiobj.initialize("wflow sceleton/wflow_sceleton.ini", loglevel=logging.ERROR) et = bmiobj.get_end_time() st = bmiobj.get_start_time() bmiobj.update(et - st) bmiobj.finalize() self.assertEquals(et, bmiobj.get_current_time()) def testbmirunnetcdf(self): bmiobj = bmi.wflowbmi_csdms() bmiobj.initialize_config("wflow_sbm/wflow_sbm_nc.ini", loglevel=logging.ERROR) bmiobj.set_start_time(1399597200) bmiobj.set_end_time(1399597200 + (4 * 3600)) st = bmiobj.get_start_time() ett = bmiobj.get_end_time() ts = bmiobj.get_time_step() bmiobj.initialize_model() tt = bmiobj.get_value("timestepsecs") curtime = st cnt = 0 lastcurtime = bmiobj.get_current_time() while curtime < ett: avar = bmiobj.get_value("PET") bmiobj.set_value("PET", avar + 10.0) cnt = cnt + 1 bmiobj.update_until(curtime + ts) print (curtime + ts) / ts curtime = bmiobj.get_current_time() print bmiobj.get_current_time() - lastcurtime lastcurtime = bmiobj.get_current_time() bmiobj.finalize() self.assertEquals(ett, bmiobj.get_current_time()) if __name__ == "__main__": unittest.main()