def build_output_graph(): from awrams.utils.nodegraph import nodes,graph from awrams.models import awral from awrams.models.awral import ffi_wrapper as fw from awrams.models.awral.template import DEFAULT_TEMPLATE output_map = awral.get_output_nodes(DEFAULT_TEMPLATE) print(output_map) outpath = '/data/cwd_awra_data/awra_test_outputs/sbaronha/sim_test_outputs/' output_map.mapping.update({ 's0_avg': nodes.transform(nodes.average,['s0_dr','s0_sr']), 's0_avg_save': nodes.write_to_annual_ncfile(outpath,'s0_avg'), 'ss_avg': nodes.transform(nodes.average,['ss_dr','ss_sr']), 'ss_avg_save': nodes.write_to_annual_ncfile(outpath,'ss_avg'), # 'sd_avg': nodes.transform(nodes.average,['s0_dr','s0_sr']), # 'sd_avg_save': nodes.write_to_annual_ncfile('./','s0_avg'), # # 'qtot_avg_save': nodes.write_to_annual_ncfile('./','qtot'), # 'etot_avg_save': nodes.write_to_annual_ncfile('./','etot') }) outputs = graph.OutputGraph(output_map.mapping) # print(outputs.get_dataspecs()) # print(outputs.get_dataspecs(flat=True)) return outputs
def build_output_graph(): from awrams.utils.nodegraph import nodes, graph from awrams.models import awral from awrams.models.awral import ffi_wrapper as fw from awrams.models.awral.template import DEFAULT_TEMPLATE output_map = awral.get_output_nodes(DEFAULT_TEMPLATE) print(output_map) output_map.mapping.update({ 's0_avg': nodes.transform(nodes.average, ['s0_dr', 's0_sr']), 's0_avg_save': nodes.write_to_annual_ncfile('./', 's0_avg') }) outputs = graph.OutputGraph(output_map.mapping) print(outputs.get_dataspecs()) print(outputs.get_dataspecs(flat=True)) return outputs
def get_input_mapping(model_settings=None): """ Return the default input mapping for this model This is a dict of key:GraphNode mappings Return: mapping (dict) """ if model_settings is None: model_settings = get_settings() mapping = {} #for k,spec in config_options['PARAMETER_SPECS'].items(): # mapping[k] = nodes.parameter_from_json( # model_settings['PARAMETER_FILE'], k, spec[0],spec[1],spec[2]) param_df = parameters.wirada_json_to_param_df(model_settings['PARAMETER_FILE']) mapping = parameters.param_df_to_mapping(param_df,mapping) SPATIAL_GRIDS = ['f_tree', 'height', 'hveg_dr', 'k0sat_v5', 'k_gw', 'kdsat_v5', 'kssat_v5', 'lai_max', 'meanPET', 'ne', 'pref', 's0fracAWC', 'slope', 'ssfracAWC', 'windspeed'] for grid in SPATIAL_GRIDS: mapping[grid.lower()+'_grid'] = nodes.spatial_from_file( model_settings['SPATIAL_FILE'], 'parameters/%s' % grid) FORCING_DATA = model_settings['CLIMATE_DATASET']['FORCING'] CLIMATOLOGY = model_settings['CLIMATE_DATASET']['CLIMATOLOGY'] for k in ['tmin', 'tmax', 'precip']: var_map = FORCING_DATA['MAPPING'][k] mapping[k+'_f'] = nodes.forcing_from_ncfiles(FORCING_DATA['PATH'], var_map[0], var_map[1]) mapping['solar_f'] = nodes.forcing_gap_filler(FORCING_DATA['PATH'],FORCING_DATA['MAPPING']['solar'][0], \ FORCING_DATA['MAPPING']['solar'][1],CLIMATOLOGY['solar'][0]) mapping.update({ 'tmin': nodes.transform(np.minimum, ['tmin_f', 'tmax_f']), 'tmax': nodes.transform(np.maximum, ['tmin_f', 'tmax_f']), 'hypsperc_f': nodes.const_from_hdf5(model_settings['SPATIAL_FILE'], 'dimensions/hypsometric_percentile', ['hypsometric_percentile']), # Model needs 0-1.0, file represents as 0-100 'hypsperc': nodes.mul('hypsperc_f', 0.01), 'fday': transforms.fday(), 'u2t': transforms.u2t('windspeed_grid','fday') }) mapping['height'] = nodes.assign('height_grid') mapping['er_frac_ref_hrusr'] = nodes.mul('er_frac_ref_hrudr', 0.5) mapping['k_rout'] = nodes.transform( transforms.k_rout, ('k_rout_scale', 'k_rout_int', 'meanpet_grid')) mapping['k_gw'] = nodes.mul('k_gw_scale', 'k_gw_grid') mapping['s0max'] = nodes.mul('s0max_scale', 's0fracawc_grid', 100.) mapping['ssmax'] = nodes.mul('ssmax_scale', 'ssfracawc_grid', 900.) mapping['sdmax'] = nodes.mul('ssmax_scale','sdmax_scale','ssfracawc_grid',5000.) mapping['k0sat'] = nodes.mul('k0sat_scale', 'k0sat_v5_grid') mapping['kssat'] = nodes.mul('kssat_scale', 'kssat_v5_grid') mapping['kdsat'] = nodes.mul('kdsat_scale', 'kdsat_v5_grid') mapping['kr_0s'] = nodes.transform( transforms.interlayer_k, ('k0sat', 'kssat')) mapping['kr_sd'] = nodes.transform( transforms.interlayer_k, ('kssat', 'kdsat')) mapping['prefr'] = nodes.mul('pref_gridscale', 'pref_grid') mapping['fhru_hrusr'] = nodes.sub(1.0, 'f_tree_grid') mapping['fhru_hrudr'] = nodes.assign('f_tree_grid') mapping['ne'] = nodes.mul('ne_scale', 'ne_grid') mapping['slope'] = nodes.assign('slope_grid') mapping['hveg_hrudr'] = nodes.assign('hveg_dr_grid') mapping['laimax_hrusr'] = nodes.assign('lai_max_grid') mapping['laimax_hrudr'] = nodes.assign('lai_max_grid') mapping['pair'] = nodes.const(97500.) mapping['pt'] = nodes.assign('precip_f') mapping['rgt'] = nodes.transform(np.maximum, ['solar_f', 0.1]) mapping['tat'] = nodes.mix('tmin', 'tmax', 0.75) mapping['avpt'] = nodes.transform(transforms.pe, 'tmin') mapping['radcskyt'] = transforms.radcskyt() mapping['init_sr'] = nodes.const(0.0) mapping['init_sg'] = nodes.const(100.0) for hru in ('_hrusr', '_hrudr'): mapping['init_mleaf'+hru] = nodes.div(2.0, 'sla'+hru) for state in ["s0", "ss", "sd"]: mapping['init_'+state+hru] = nodes.mul(state+'max', 0.5) return objectify(mapping)
def get_default_mapping(): import json from awrams.utils.nodegraph import graph, nodes from awrams.utils.metatypes import ObjectDict from . import transforms import numpy as np dparams = json.load(open(DEFAULT_PARAMETER_FILE,'r')) #dparams = dict([(k.lower(),v) for k,v in dparams.items()]) for entry in dparams: entry['MemberName'] = entry['MemberName'].lower() mapping = {} # for k,v in dparams.items(): # mapping[k] = nodes.const(v) for entry in dparams: tmp = entry.copy() tmp.pop('MemberName') tmp.pop('Value') mapping[entry['MemberName']] = nodes.const(entry['Value'],**tmp) # Setup a new-style functional input map import h5py ds = h5py.File(SPATIAL_FILE,mode='r') SPATIAL_GRIDS = list(ds['parameters']) ds.close() # FORCING = { # 'tmin': ('tmin*','temp_min_day'), # 'tmax': ('tmax*','temp_max_day'), # 'precip': ('rr*','rain_day'), # 'solar': ('solar*','solar_exposure_day') # } FORCING = { 'tmin': ('temp_min*','temp_min_day'), 'tmax': ('temp_max*','temp_max_day'), 'precip': ('rain*','rain_day'), 'solar': ('solar*','solar_exposure_day') } for k,v in FORCING.items(): mapping[k+'_f'] = nodes.forcing_from_ncfiles(CLIMATE_DATA,v[0],v[1]) for grid in SPATIAL_GRIDS: if grid == 'height': mapping['height'] = nodes.hypso_from_hdf5(SPATIAL_FILE,'parameters/height') else: mapping[grid.lower()+'_grid'] = nodes.spatial_from_hdf5(SPATIAL_FILE,'parameters/%s' % grid) mapping.update({ 'tmin': nodes.transform(np.minimum,['tmin_f','tmax_f']), 'tmax': nodes.transform(np.maximum,['tmin_f','tmax_f']), 'hypsperc_f': nodes.const_from_hdf5(SPATIAL_FILE,'dimensions/hypsometric_percentile',['hypsometric_percentile']), 'hypsperc': nodes.mul('hypsperc_f',0.01), # Model needs 0-1.0, file represents as 0-100 'fday': transforms.fday(), 'u2t': transforms.u2t('windspeed_grid','fday') }) mapping['er_frac_ref_hrusr'] = nodes.mul('er_frac_ref_hrudr',0.5) mapping['k_rout'] = nodes.transform(transforms.k_rout,('k_rout_scale','k_rout_int','meanpet_grid')) mapping['k_gw'] = nodes.mul('k_gw_scale','k_gw_grid') mapping['s0max'] = nodes.mul('s0max_scale','s0fracawc_grid',100.) mapping['ssmax'] = nodes.mul('ssmax_scale','ssfracawc_grid',900.) mapping['sdmax'] = nodes.mul('ssmax_scale','sdmax_scale','ssfracawc_grid',5000.) mapping['k0sat'] = nodes.mul('k0sat_scale','k0sat_v5_grid') mapping['kssat'] = nodes.mul('kssat_scale','kssat_v5_grid') mapping['kdsat'] = nodes.mul('kdsat_scale','kdsat_v5_grid') mapping['kr_0s'] = nodes.transform(transforms.interlayer_k,('k0sat','kssat')) mapping['kr_sd'] = nodes.transform(transforms.interlayer_k,('kssat','kdsat')) mapping['prefr'] = nodes.mul('pref_gridscale','pref_grid') mapping['fhru_hrusr'] = nodes.sub(1.0,'f_tree_grid') mapping['fhru_hrudr'] = nodes.assign('f_tree_grid') mapping['ne'] = nodes.mul('ne_scale','ne_grid') mapping['slope'] = nodes.assign('slope_grid') mapping['hveg_hrudr'] = nodes.assign('hveg_dr_grid') mapping['hveg_hrusr'] = nodes.const(0.5) mapping['laimax_hrusr'] = nodes.assign('lai_max_grid') mapping['laimax_hrudr'] = nodes.assign('lai_max_grid') mapping['pair'] = nodes.const(97500.) mapping['pt'] = nodes.assign('precip_f') mapping['rgt'] = nodes.transform(np.maximum,['solar_f',0.1]) mapping['tat'] = nodes.mix('tmin','tmax',0.75) mapping['avpt'] = nodes.transform(transforms.pe,'tmin') mapping['radcskyt'] = transforms.radcskyt() mapping['init_sr'] = nodes.const(0.0) mapping['init_sg'] = nodes.const(100.0) for hru in ('_hrusr','_hrudr'): mapping['init_mleaf'+hru] = nodes.div(2.0,'sla'+hru) for state in ["s0","ss","sd"]: mapping['init_'+state+hru] = nodes.mul(state+'max',0.5) # +++dims only required due to having to allocate shared-memory buffer before running... dims = ObjectDict(hypsometric_percentile=20,latitude=None,longitude=None,time=None) return ObjectDict(mapping=ObjectDict(mapping),dimensions=dims)
def get_default_mapping(self): """ Return the default input mapping for this model This is a dict of key:GraphNode mappings Return: mapping (dict) """ import json from awrams.utils.nodegraph import graph, nodes from awrams.utils.metatypes import PrettyObjectDict from . import transforms import numpy as np dparams = json.load(open(DEFAULT_PARAMETER_FILE, 'r')) #dparams = dict([(k.lower(),v) for k,v in dparams.items()]) for entry in dparams: entry['MemberName'] = entry['MemberName'].lower() mapping = {} # for k,v in dparams.items(): # mapping[k] = nodes.const(v) for entry in dparams: #tmp = entry.copy() #tmp.pop('MemberName') #tmp.pop('Value') mapping[entry['MemberName']] = nodes.parameter( entry['Value'], entry['Min'], entry['Max'], entry['Fixed'], description=entry['DisplayName']) # Setup a new-style functional input map import h5py ds = h5py.File(SPATIAL_FILE, mode='r') SPATIAL_GRIDS = list(ds['parameters']) ds.close() for k, v in FORCING.items(): mapping[k + '_f'] = nodes.forcing_from_ncfiles( CLIMATE_DATA, v[0], v[1]) for grid in SPATIAL_GRIDS: #if grid == 'height': # mapping['height'] = nodes.hypso_from_hdf5(SPATIAL_FILE,'parameters/height') #else: mapping[grid.lower() + '_grid'] = nodes.spatial_from_file( SPATIAL_FILE, 'parameters/%s' % grid) mapping.update({ 'tmin': nodes.transform(np.minimum, ['tmin_f', 'tmax_f']), 'tmax': nodes.transform(np.maximum, ['tmin_f', 'tmax_f']), 'hypsperc_f': nodes.const_from_hdf5(SPATIAL_FILE, 'dimensions/hypsometric_percentile', ['hypsometric_percentile']), 'hypsperc': nodes.mul('hypsperc_f', 0.01), # Model needs 0-1.0, file represents as 0-100 'fday': transforms.fday(), 'u2t': transforms.u2t('windspeed_grid', 'fday') }) mapping['height'] = nodes.assign('height_grid') mapping['er_frac_ref_hrusr'] = nodes.mul('er_frac_ref_hrudr', 0.5) mapping['k_rout'] = nodes.transform( transforms.k_rout, ('k_rout_scale', 'k_rout_int', 'meanpet_grid')) mapping['k_gw'] = nodes.mul('k_gw_scale', 'k_gw_grid') mapping['s0max'] = nodes.mul('s0max_scale', 's0fracawc_grid', 100.) mapping['ssmax'] = nodes.mul('ssmax_scale', 'ssfracawc_grid', 900.) mapping['sdmax'] = nodes.mul('ssmax_scale', 'sdmax_scale', 'ssfracawc_grid', 5000.) mapping['k0sat'] = nodes.mul('k0sat_scale', 'k0sat_v5_grid') mapping['kssat'] = nodes.mul('kssat_scale', 'kssat_v5_grid') mapping['kdsat'] = nodes.mul('kdsat_scale', 'kdsat_v5_grid') mapping['kr_0s'] = nodes.transform(transforms.interlayer_k, ('k0sat', 'kssat')) mapping['kr_sd'] = nodes.transform(transforms.interlayer_k, ('kssat', 'kdsat')) mapping['prefr'] = nodes.mul('pref_gridscale', 'pref_grid') mapping['fhru_hrusr'] = nodes.sub(1.0, 'f_tree_grid') mapping['fhru_hrudr'] = nodes.assign('f_tree_grid') mapping['ne'] = nodes.mul('ne_scale', 'ne_grid') mapping['slope'] = nodes.assign('slope_grid') mapping['hveg_hrudr'] = nodes.assign('hveg_dr_grid') mapping['laimax_hrusr'] = nodes.assign('lai_max_grid') mapping['laimax_hrudr'] = nodes.assign('lai_max_grid') mapping['pair'] = nodes.const(97500.) mapping['pt'] = nodes.assign('precip_f') mapping['rgt'] = nodes.transform(np.maximum, ['solar_f', 0.1]) mapping['tat'] = nodes.mix('tmin', 'tmax', 0.75) mapping['avpt'] = nodes.transform(transforms.pe, 'tmin') mapping['radcskyt'] = transforms.radcskyt() mapping['init_sr'] = nodes.const(0.0) mapping['init_sg'] = nodes.const(100.0) for hru in ('_hrusr', '_hrudr'): mapping['init_mleaf' + hru] = nodes.div(2.0, 'sla' + hru) for state in ["s0", "ss", "sd"]: mapping['init_' + state + hru] = nodes.mul(state + 'max', 0.5) return PrettyObjectDict(mapping)