[15914] | 1 | %SNOWPACK class definition
|
---|
| 2 | %
|
---|
| 3 | % Usage:
|
---|
| 4 | % snowpack=snowpack();
|
---|
| 5 |
|
---|
| 6 | classdef snowpack
|
---|
| 7 | properties (SetAccess=public)
|
---|
| 8 |
|
---|
| 9 | %first, the configuration fields, by category:
|
---|
| 10 | %snowpack: %{{{
|
---|
| 11 | snowpack_meas_tss = 0;
|
---|
| 12 | snowpack_enforce_measured_snow_heights = 0;
|
---|
| 13 | snowpack_sw_mode = 0;
|
---|
| 14 | snowpack_incoming_longwave = 0;
|
---|
| 15 | snowpack_height_of_wind_value = 0;
|
---|
| 16 | snowpack_height_of_meteo_values = 0;
|
---|
| 17 | snowpack_neutral = 0;
|
---|
| 18 | snowpack_roughness_length = 0;
|
---|
| 19 | snowpack_number_slopes = 0;
|
---|
| 20 | snowpack_snow_redistribution = 0;
|
---|
| 21 | snowpack_calculation_step_length = 0;
|
---|
| 22 | snowpack_change_bc = 0;
|
---|
| 23 | snowpack_thresh_change_bc = 0;
|
---|
| 24 | snowpack_snp_soil = 0;
|
---|
| 25 | snowpack_soil_flux = 0;
|
---|
| 26 | snowpack_geo_heat = 0;
|
---|
| 27 | snowpack_canopy = 0;
|
---|
| 28 | %}}}
|
---|
| 29 | %snowpackadvanced: %{{{
|
---|
| 30 | snowpackadvanced_variant = ''; % use 320 kg m-3 for fixed density
|
---|
| 31 | snowpackadvanced_hn_density = '';
|
---|
| 32 | %}}}
|
---|
| 33 | %general: %{{{
|
---|
| 34 | general_pluginpath = '';
|
---|
| 35 | general_buff_chunk_size = 0;
|
---|
| 36 | general_buff_before = 0;
|
---|
| 37 | %}}}
|
---|
| 38 | %input {{{
|
---|
| 39 | input_coordsys = '';
|
---|
| 40 | input_coordparam = '';
|
---|
| 41 | input_time_zone = 0;
|
---|
| 42 | input_meteo = '';
|
---|
| 43 | input_meteopath = '';
|
---|
| 44 | input_station1 = '';
|
---|
| 45 | input_snowfile1 = '';
|
---|
| 46 | %}}}
|
---|
| 47 | %output {{{
|
---|
| 48 | output_coordsys = '';
|
---|
| 49 | output_coordparam = '';
|
---|
| 50 | output_time_zone = 0;
|
---|
| 51 | output_meteopath = '';
|
---|
| 52 | output_experiment = '';
|
---|
| 53 | output_ts_write = 0;
|
---|
| 54 | output_ts_start = 0;
|
---|
| 55 | output_ts_days_between = 0;
|
---|
| 56 | output_profile = '';
|
---|
| 57 | output_prof_write = 0;
|
---|
| 58 | output_prof_start = 0;
|
---|
| 59 | output_prof_days_between = 0;
|
---|
| 60 | %}}}
|
---|
| 61 | %interpolations1d %{{{
|
---|
| 62 | interpolations1d_window_size = 0; %that is 5 d and 2 h; 1 d = 86400
|
---|
| 63 | interpolations1d_hnw_resample = '';
|
---|
| 64 | interpolations1d_hs_resample = '';
|
---|
| 65 | interpolations1d_tsg_resample = '';
|
---|
| 66 | interpolations1d_rho_hn_resample = '';
|
---|
| 67 | interpolations1d_vw_resample = '';
|
---|
| 68 | interpolations1d_vw_args = '';
|
---|
| 69 | %}}}
|
---|
| 70 | %filters {{{
|
---|
| 71 | filters_ta_filter1 = '';
|
---|
| 72 | filters_ta_arg1 = NaN;
|
---|
| 73 | filters_rh_filter1 = '';
|
---|
| 74 | filters_rh_arg1 = NaN;
|
---|
| 75 | filters_rh_filter2 = '';
|
---|
| 76 | filters_rh_arg2 = NaN;
|
---|
| 77 | filters_iswr_filter1 = '';
|
---|
| 78 | filters_iswr_arg1 = NaN;
|
---|
| 79 | filters_iswr_filter2 = '';
|
---|
| 80 | filters_iswr_arg2 = NaN;
|
---|
| 81 | filters_rswr_filter1 = '';
|
---|
| 82 | filters_rswr_arg1 = NaN;
|
---|
| 83 | filters_rswr_filter2 = '';
|
---|
| 84 | filters_rswr_arg2 = NaN;
|
---|
| 85 |
|
---|
| 86 | %for ta between 190 and 280 k;
|
---|
| 87 | filters_ilwr_filter1 = '';
|
---|
| 88 | filters_ilwr_arg1 = NaN;
|
---|
| 89 | filters_ilwr_filter2 = '';
|
---|
| 90 | filters_ilwr_arg2 = NaN;
|
---|
| 91 | filters_tss_filter1 = '';
|
---|
| 92 | filters_tss_arg1 = NaN;
|
---|
| 93 | filters_tsg_filter1 = '';
|
---|
| 94 | filters_tsg_arg1 = NaN;
|
---|
| 95 | filters_vw_filter1 = '';
|
---|
| 96 | filters_vw_arg1 = NaN;
|
---|
| 97 | filters_vw_filter2 = '';
|
---|
| 98 | filters_vw_arg2 = NaN;
|
---|
| 99 | %}}}
|
---|
| 100 |
|
---|
| 101 | end
|
---|
| 102 | methods
|
---|
| 103 | function obj = snowpack(varargin) % {{{
|
---|
| 104 | switch nargin
|
---|
| 105 | case 0
|
---|
| 106 | obj=setdefaultparameters(obj);
|
---|
| 107 | case 1
|
---|
| 108 | inputstruct=varargin{1};
|
---|
| 109 | list1 = properties('snowpack');
|
---|
| 110 | list2 = fieldnames(inputstruct);
|
---|
| 111 | for i=1:length(list1)
|
---|
| 112 | fieldname = list1{i};
|
---|
| 113 | if ismember(fieldname,list2),
|
---|
| 114 | obj.(fieldname) = inputstruct.(fieldname);
|
---|
| 115 | end
|
---|
| 116 | end
|
---|
| 117 | otherwise
|
---|
| 118 | error('constructor not supported');
|
---|
| 119 | end
|
---|
| 120 | end % }}}
|
---|
| 121 | function obj = setdefaultparameters(obj) % {{{
|
---|
| 122 |
|
---|
| 123 | %snowpack: %{{{
|
---|
| 124 | obj.snowpack_meas_tss = 1;
|
---|
| 125 | obj.snowpack_enforce_measured_snow_heights = 0;
|
---|
| 126 | obj.snowpack_sw_mode = 0;
|
---|
| 127 | obj.snowpack_incoming_longwave = 1;
|
---|
| 128 | obj.snowpack_height_of_wind_value = 12.;
|
---|
| 129 | obj.snowpack_height_of_meteo_values = 12.;
|
---|
| 130 | obj.snowpack_neutral = 0;
|
---|
| 131 | obj.snowpack_roughness_length = 0.002;
|
---|
| 132 | obj.snowpack_number_slopes = 1;
|
---|
| 133 | obj.snowpack_snow_redistribution = 1;
|
---|
| 134 | obj.snowpack_calculation_step_length = 15.0;
|
---|
| 135 | obj.snowpack_change_bc = 0;
|
---|
| 136 | obj.snowpack_thresh_change_bc = -1.0;
|
---|
| 137 | obj.snowpack_snp_soil = 0;
|
---|
| 138 | obj.snowpack_soil_flux = 0;
|
---|
| 139 | obj.snowpack_geo_heat = 0.06;
|
---|
| 140 | obj.snowpack_canopy = 0;
|
---|
| 141 | %}}}
|
---|
| 142 | %snowpackadvanced: %{{{
|
---|
| 143 | obj.snowpackadvanced_variant = 'ANTARCTICA'; % use 320 kg m-3 for fixed density
|
---|
| 144 | obj.snowpackadvanced_hn_density = 'EVENT';
|
---|
| 145 | %}}}
|
---|
| 146 | %general: %{{{
|
---|
| 147 | obj.general_pluginpath = '/usr/local/lib/meteoio/plugins/';
|
---|
| 148 | obj.general_buff_chunk_size = 90;
|
---|
| 149 | obj.general_buff_before = 1.5;
|
---|
| 150 | %}}}
|
---|
| 151 | %input {{{
|
---|
| 152 | obj.input_coordsys = 'ch1903';
|
---|
| 153 | obj.input_coordparam = 'null';
|
---|
| 154 | obj.input_time_zone = 8;
|
---|
| 155 | obj.input_meteo = 'smet';
|
---|
| 156 | obj.input_meteopath = './input';
|
---|
| 157 | obj.input_station1 = 'domec.smet';
|
---|
| 158 | obj.input_snowfile1 = 'domec.sno';
|
---|
| 159 | %}}}
|
---|
| 160 | %output {{{
|
---|
| 161 | obj.output_coordsys = 'ch1903';
|
---|
| 162 | obj.output_coordparam = 'null';
|
---|
| 163 | obj.output_time_zone = 8;
|
---|
| 164 | obj.output_meteopath = './output';
|
---|
| 165 | obj.output_experiment = 'smet';
|
---|
| 166 | obj.output_ts_write = 1;
|
---|
| 167 | obj.output_ts_start = 0.0;
|
---|
| 168 | obj.output_ts_days_between = 0.04166667;
|
---|
| 169 | obj.output_profile = 'ascii';
|
---|
| 170 | obj.output_prof_write = 1;
|
---|
| 171 | obj.output_prof_start = 0.0;
|
---|
| 172 | obj.output_prof_days_between = 0.04166667;
|
---|
| 173 | %}}}
|
---|
| 174 | %interpolations1d %{{{
|
---|
[15919] | 175 | obj.interpolations1d_window_size = 439200; %that is 5 d and 2 h; 1 d = 86400
|
---|
[15914] | 176 | obj.interpolations1d_hnw_resample = 'none';
|
---|
| 177 | obj.interpolations1d_hs_resample = 'linear';
|
---|
| 178 | obj.interpolations1d_tsg_resample = 'linear';
|
---|
| 179 | obj.interpolations1d_rho_hn_resample = 'none';
|
---|
| 180 | obj.interpolations1d_vw_resample = 'nearest_neighbour';
|
---|
| 181 | obj.interpolations1d_vw_args = 'extrapolate';
|
---|
| 182 | %}}}
|
---|
| 183 | %filters {{{
|
---|
| 184 | obj.filters_ta_filter1 = 'min_max';
|
---|
| 185 | obj.filters_ta_arg1 = [190 280];
|
---|
| 186 | obj.filters_rh_filter1 = 'min_max';
|
---|
| 187 | obj.filters_rh_arg1 = [0.01 1.2];
|
---|
| 188 | obj.filters_rh_filter2 = 'min_max';
|
---|
| 189 | obj.filters_rh_arg2 = {'soft' 0.01 1.0};
|
---|
| 190 | obj.filters_iswr_filter1 = 'min_max';
|
---|
| 191 | obj.filters_iswr_arg1 = [-10 1500];
|
---|
| 192 | obj.filters_iswr_filter2 = 'min_max';
|
---|
| 193 | obj.filters_iswr_arg2 = {'soft' 0 1500};
|
---|
| 194 | obj.filters_rswr_filter1 = 'min_max';
|
---|
| 195 | obj.filters_rswr_arg1 = [-10 1500];
|
---|
| 196 | obj.filters_rswr_filter2 = 'min_max';
|
---|
| 197 | obj.filters_rswr_arg2 = {'soft' 0 1500};
|
---|
| 198 |
|
---|
| 199 | %for ta between 190 and 280 k;
|
---|
| 200 | obj.filters_ilwr_filter1 = 'min_max';
|
---|
| 201 | obj.filters_ilwr_arg1 = [30 355];
|
---|
| 202 | obj.filters_ilwr_filter2 = 'min_max';
|
---|
| 203 | obj.filters_ilwr_arg2 = {'soft' 35 350};
|
---|
| 204 | obj.filters_tss_filter1 = 'min_max';
|
---|
| 205 | obj.filters_tss_arg1 = [180 275];
|
---|
| 206 | obj.filters_tsg_filter1 = 'min_max';
|
---|
| 207 | obj.filters_tsg_arg1 = [200 275];
|
---|
| 208 | obj.filters_vw_filter1 = 'min_max';
|
---|
| 209 | obj.filters_vw_arg1 = [-2 70];
|
---|
| 210 | obj.filters_vw_filter2 = 'min_max';
|
---|
| 211 | obj.filters_vw_arg2 = {'soft' 0 50};
|
---|
| 212 | %}}}
|
---|
| 213 |
|
---|
| 214 | end % }}}
|
---|
| 215 | function md = checkconsistency(obj,md,solution,analyses) % {{{
|
---|
| 216 | %snowpack: %{{{
|
---|
| 217 | md=checkfield(md,'snowpack.snowpack_meas_tss','values',[0 1]);
|
---|
| 218 | md=checkfield(md,'snowpack.snowpack_enforce_measured_snow_heights','values',[0 1]);
|
---|
| 219 | md=checkfield(md,'snowpack.snowpack_sw_mode','values',[0 1 2]);
|
---|
| 220 | md=checkfield(md,'snowpack.snowpack_incoming_longwave','values',[0 1]);
|
---|
[15919] | 221 | md=checkfield(md,'snowpack.snowpack_height_of_wind_value','>=',0);
|
---|
[15914] | 222 | md=checkfield(md,'snowpack.snowpack_height_of_meteo_values','>=',0);
|
---|
| 223 | md=checkfield(md,'snowpack.snowpack_neutral','values',[-1 0 1]);
|
---|
| 224 | md=checkfield(md,'snowpack.snowpack_roughness_length','>=',0);
|
---|
| 225 | md=checkfield(md,'snowpack.snowpack_number_slopes','values',[1 3 5 9]);
|
---|
| 226 | md=checkfield(md,'snowpack.snowpack_snow_redistribution','values',[0 1]);
|
---|
| 227 | md=checkfield(md,'snowpack.snowpack_calculation_step_length','>',0);
|
---|
| 228 | md=checkfield(md,'snowpack.snowpack_change_bc','values',[0 1]);
|
---|
| 229 | md=checkfield(md,'snowpack.snowpack_thresh_change_bc','<=',0);
|
---|
| 230 | md=checkfield(md,'snowpack.snowpack_snp_soil','values',[0 1]);
|
---|
[15919] | 231 | md=checkfield(md,'snowpack.snowpack_soil_flux','values',[0 1]);
|
---|
| 232 | md=checkfield(md,'snowpack.snowpack_geo_heat','>=',0);
|
---|
| 233 | md=checkfield(md,'snowpack.snowpack_canopy','values',[0 1]);
|
---|
[15914] | 234 | %}}}
|
---|
| 235 | %snowpackadvanced: %{{{
|
---|
[15919] | 236 | md=checkfield(md,'snowpack.snowpackadvanced_variant','values',{'JAPAN','DEFAULT','ANTARCTICA'});
|
---|
| 237 | md=checkfield(md,'snowpack.snowpackadvanced_hn_density','values',{'PARAMETERIZED','EVENT','MEASURED'});
|
---|
[15914] | 238 | %}}}
|
---|
| 239 | %general: %{{{
|
---|
[15919] | 240 | md=checkfield(md,'snowpack.general_buff_chunk_size','>',0);
|
---|
| 241 | md=checkfield(md,'snowpack.general_buff_before','>',0);
|
---|
[15914] | 242 | %}}}
|
---|
| 243 | %input {{{
|
---|
[15919] | 244 | md=checkfield(md,'snowpack.input_coordsys','values',{'CH1903','UTM','UPS','PROJ4','LOCAL'});
|
---|
| 245 | md=checkfield(md,'snowpack.input_coordparam','values','null');
|
---|
| 246 | md=checkfield(md,'snowpack.input_time_zone','>',-12,'<',12);
|
---|
| 247 | md=checkfield(md,'snowpack.input_meteo','values',{'BORMA','COSMO','GEOTOP','GRIB','GSN','IMIS','SMET','SNOWPACK'});
|
---|
| 248 | md=checkfield(md,'snowpack.input_meteopath','empty',1);
|
---|
| 249 | md=checkfield(md,'snowpack.input_station1 ','empty',1);
|
---|
| 250 | md=checkfield(md,'snowpack.input_snowfile1','empty',1);
|
---|
[15914] | 251 | %}}}
|
---|
| 252 | %output {{{
|
---|
[15919] | 253 | md=checkfield(md,'snowpack.output_coordsys','values',{'CH1903','UTM','UPS','PROJ4','LOCAL'});
|
---|
| 254 | md=checkfield(md,'snowpack.output_coordparam','values','null');
|
---|
| 255 | md=checkfield(md,'snowpack.output_time_zone','>',-12,'<',12);
|
---|
| 256 | md=checkfield(md,'snowpack.output_meteopath','empty',1);
|
---|
| 257 | md=checkfield(md,'snowpack.output_experiment','empty',1);
|
---|
| 258 | md=checkfield(md,'snowpack.output_ts_write','values',[0 1]);
|
---|
| 259 | md=checkfield(md,'snowpack.output_ts_start','>=',0);
|
---|
| 260 | md=checkfield(md,'snowpack.output_ts_days_between','>=',0);
|
---|
| 261 | md=checkfield(md,'snowpack.output_profile','values',{'ASCII','IMIS','ASCII IMIS'});
|
---|
| 262 | md=checkfield(md,'snowpack.output_prof_write','values',[0 1]);
|
---|
| 263 | md=checkfield(md,'snowpack.output_prof_start','>=',0);
|
---|
| 264 | md=checkfield(md,'snowpack.output_prof_days_between','>=',0);
|
---|
[15914] | 265 | %}}}
|
---|
| 266 | %interpolations1d %{{{
|
---|
[15919] | 267 | md=checkfield(md,'snowpack.interpolations1d_window_size','>',0);
|
---|
| 268 | md=checkfield(md,'snowpack.interpolations1d_hnw_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
|
---|
| 269 | md=checkfield(md,'snowpack.interpolations1d_hs_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
|
---|
| 270 | md=checkfield(md,'snowpack.interpolations1d_tsg_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
|
---|
| 271 | md=checkfield(md,'snowpack.interpolations1d_rho_hn_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
|
---|
| 272 | md=checkfield(md,'snowpack.interpolations1d_vw_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
|
---|
| 273 | md=checkfield(md,'snowpack.interpolations1d_vw_args','values',{'EXTRAPOLATE'});
|
---|
[15914] | 274 | %}}}
|
---|
| 275 | %filters {{{
|
---|
[15919] | 276 | filter_values={'MIN_MAX','RATE_FILTER1','RATE_FILTER2','UNHEATED_RAIN_GAUGE_FILTER','WMO_UNDERCATCH_FILTER','WMO_UNDERCATCH_FILTER-SIMPLIFIED','UNVENTILLATED_TEMPERATURE_SENSOR','ADD_AN_OFFSET'};
|
---|
| 277 | md=checkfield(md,'snowpack.filters_ta_filter1','values',{filter_values});
|
---|
| 278 | if strcmpi(md.snowpack.filters_ta_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ta_filter1','size',[1 NaN]); end
|
---|
| 279 | md=checkfield(md,'snowpack.filters_ta_arg1','values',{filter_values});
|
---|
| 280 | if strcmpi(md.snowpack.filters_ta_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ta_arg1','size',[1 NaN]); end
|
---|
| 281 | md=checkfield(md,'snowpack.filters_rh_filter1','values',{filter_values});
|
---|
| 282 | if strcmpi(md.snowpack.filters_rh_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rh_filter1','size',[1 NaN]); end
|
---|
| 283 | md=checkfield(md,'snowpack.filters_rh_arg1','values',{filter_values});
|
---|
| 284 | if strcmpi(md.snowpack.filters_rh_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rh_arg1','size',[1 NaN]); end
|
---|
| 285 | md=checkfield(md,'snowpack.filters_rh_filter2','values',{filter_values});
|
---|
| 286 | if strcmpi(md.snowpack.filters_rh_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rh_filter2','size',[1 NaN]); end
|
---|
| 287 | md=checkfield(md,'snowpack.filters_rh_arg2','values',{filter_values});
|
---|
| 288 | if strcmpi(md.snowpack.filters_rh_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rh_arg2','size',[1 NaN]); end
|
---|
| 289 | md=checkfield(md,'snowpack.filters_iswr_filter1','values',{filter_values});
|
---|
| 290 | if strcmpi(md.snowpack.filters_iswr_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_iswr_filter1','size',[1 NaN]); end
|
---|
| 291 | md=checkfield(md,'snowpack.filters_iswr_arg1','values',{filter_values});
|
---|
| 292 | if strcmpi(md.snowpack.filters_iswr_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_iswr_arg1','size',[1 NaN]); end
|
---|
| 293 | md=checkfield(md,'snowpack.filters_iswr_filter2','values',{filter_values});
|
---|
| 294 | if strcmpi(md.snowpack.filters_iswr_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_iswr_filter2','size',[1 NaN]); end
|
---|
| 295 | md=checkfield(md,'snowpack.filters_iswr_arg2','values',{filter_values});
|
---|
| 296 | if strcmpi(md.snowpack.filters_iswr_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_iswr_arg2','size',[1 NaN]); end
|
---|
| 297 | md=checkfield(md,'snowpack.filters_rswr_filter1','values',{filter_values});
|
---|
| 298 | if strcmpi(md.snowpack.filters_rswr_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rswr_filter1','size',[1 NaN]); end
|
---|
| 299 | md=checkfield(md,'snowpack.filters_rswr_arg1','values',{filter_values});
|
---|
| 300 | if strcmpi(md.snowpack.filters_rswr_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rswr_arg1','size',[1 NaN]); end
|
---|
| 301 | md=checkfield(md,'snowpack.filters_rswr_filter2','values',{filter_values});
|
---|
| 302 | if strcmpi(md.snowpack.filters_rswr_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rswr_filter2','size',[1 NaN]); end
|
---|
| 303 | md=checkfield(md,'snowpack.filters_rswr_arg2','values',{filter_values});
|
---|
| 304 | if strcmpi(md.snowpack.filters_rswr_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rswr_arg2','size',[1 NaN]); end
|
---|
[15914] | 305 |
|
---|
| 306 | %for ta between 190 and 280 k;
|
---|
[15919] | 307 | md=checkfield(md,'snowpack.filters_ilwr_filter1','values',{filter_values});
|
---|
| 308 | if strcmpi(md.snowpack.filters_ilwr_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ilwr_filter1','size',[1 NaN]); end
|
---|
| 309 | md=checkfield(md,'snowpack.filters_ilwr_arg1','values',{filter_values});
|
---|
| 310 | if strcmpi(md.snowpack.filters_ilwr_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ilwr_arg1','size',[1 NaN]); end
|
---|
| 311 | md=checkfield(md,'snowpack.filters_ilwr_filter2','values',{filter_values});
|
---|
| 312 | if strcmpi(md.snowpack.filters_ilwr_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ilwr_filter2','size',[1 NaN]); end
|
---|
| 313 | md=checkfield(md,'snowpack.filters_ilwr_arg2','values',{filter_values});
|
---|
| 314 | if strcmpi(md.snowpack.filters_ilwr_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ilwr_arg2','size',[1 NaN]); end
|
---|
| 315 | md=checkfield(md,'snowpack.filters_tss_filter1','values',{filter_values});
|
---|
| 316 | if strcmpi(md.snowpack.filters_tss_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_tss_filter1','size',[1 NaN]); end
|
---|
| 317 | md=checkfield(md,'snowpack.filters_tss_arg1','values',{filter_values});
|
---|
| 318 | if strcmpi(md.snowpack.filters_tss_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_tss_arg1','size',[1 NaN]); end
|
---|
| 319 | md=checkfield(md,'snowpack.filters_tsg_filter1','values',{filter_values});
|
---|
| 320 | if strcmpi(md.snowpack.filters_tsg_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_tsg_filter1','size',[1 NaN]); end
|
---|
| 321 | md=checkfield(md,'snowpack.filters_tsg_arg1','values',{filter_values});
|
---|
| 322 | if strcmpi(md.snowpack.filters_tsg_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_tsg_arg1','size',[1 NaN]); end
|
---|
| 323 | md=checkfield(md,'snowpack.filters_vw_filter1','values',{filter_values});
|
---|
| 324 | if strcmpi(md.snowpack.filters_vw_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_vw_filter1','size',[1 NaN]); end
|
---|
| 325 | md=checkfield(md,'snowpack.filters_vw_arg1','values',{filter_values});
|
---|
| 326 | if strcmpi(md.snowpack.filters_vw_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_vw_arg1','size',[1 NaN]); end
|
---|
| 327 | md=checkfield(md,'snowpack.filters_vw_filter2','values',{filter_values});
|
---|
| 328 | if strcmpi(md.snowpack.filters_vw_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_vw_filter2','size',[1 NaN]); end
|
---|
| 329 | md=checkfield(md,'snowpack.filters_vw_arg2','values',{filter_values});
|
---|
| 330 | if strcmpi(md.snowpack.filters_vw_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_vw_arg2','size',[1 NaN]); end
|
---|
| 331 |
|
---|
[15914] | 332 | %}}}
|
---|
| 333 | end % }}}
|
---|
| 334 | function disp(obj) % {{{
|
---|
| 335 |
|
---|
[15919] | 336 | disp(sprintf(' Snowpack solution parameters:'));
|
---|
| 337 | disp(sprintf('\n %s','Snowpack parameters:')); % {{{
|
---|
| 338 | fielddisplay(obj,'snowpack_meas_tss',' ');
|
---|
| 339 | fielddisplay(obj,'snowpack_enforce_measured_snow_heights',' ');
|
---|
| 340 | fielddisplay(obj,'snowpack_sw_mode',' ');
|
---|
| 341 | fielddisplay(obj,'snowpack_incoming_longwave',' ');
|
---|
| 342 | fielddisplay(obj,'snowpack_height_of_wind_value',' ');
|
---|
| 343 | fielddisplay(obj,'snowpack_height_of_meteo_values',' ');
|
---|
| 344 | fielddisplay(obj,'snowpack_neutral',' ');
|
---|
| 345 | fielddisplay(obj,'snowpack_roughness_length',' ');
|
---|
| 346 | fielddisplay(obj,'snowpack_number_slopes',' ');
|
---|
| 347 | fielddisplay(obj,'snowpack_snow_redistribution',' ');
|
---|
| 348 | fielddisplay(obj,'snowpack_calculation_step_length',' ');
|
---|
| 349 | fielddisplay(obj,'snowpack_change_bc',' ');
|
---|
| 350 | fielddisplay(obj,'snowpack_thresh_change_bc',' ');
|
---|
| 351 | fielddisplay(obj,'snowpack_snp_soil',' ');
|
---|
| 352 | fielddisplay(obj,'snowpack_soil_flux',' ');
|
---|
| 353 | fielddisplay(obj,'snowpack_geo_heat',' ');
|
---|
| 354 | fielddisplay(obj,'snowpack_canopy',' ');
|
---|
| 355 | % }}}
|
---|
| 356 | disp(sprintf('\n %s','Snowpackadvanced parameters:')); % {{{
|
---|
| 357 | fielddisplay(obj,'snowpackadvanced_variant',''); % use 320 kg m-3 for fixed density
|
---|
| 358 | fielddisplay(obj,'snowpackadvanced_hn_density','');
|
---|
| 359 | % }}}
|
---|
| 360 | disp(sprintf('\n %s','General parameters:')); % {{{
|
---|
| 361 | fielddisplay(obj,'general_pluginpath','');
|
---|
| 362 | fielddisplay(obj,'general_buff_chunk_size',' ');
|
---|
| 363 | fielddisplay(obj,'general_buff_before',' ');
|
---|
| 364 | % }}}
|
---|
| 365 | disp(sprintf('\n %s','Input parameter:')); % {{{
|
---|
| 366 | fielddisplay(obj,'input_coordsys','');
|
---|
| 367 | fielddisplay(obj,'input_coordparam',' ');
|
---|
| 368 | fielddisplay(obj,'input_time_zone',' ');
|
---|
| 369 | fielddisplay(obj,'input_meteo',' ');
|
---|
| 370 | fielddisplay(obj,'input_meteopath',' ');
|
---|
| 371 | fielddisplay(obj,'input_station1',' ');
|
---|
| 372 | fielddisplay(obj,'input_snowfile1',' ');
|
---|
| 373 | % }}}
|
---|
| 374 | disp(sprintf('\n %s','Output parameters:')); % {{{
|
---|
| 375 | fielddisplay(obj,'output_coordsys',' ');
|
---|
| 376 | fielddisplay(obj,'output_coordparam',' ');
|
---|
| 377 | fielddisplay(obj,'output_time_zone',' ');
|
---|
| 378 | fielddisplay(obj,'output_meteopath',' ');
|
---|
| 379 | fielddisplay(obj,'output_experiment',' ');
|
---|
| 380 | fielddisplay(obj,'output_ts_write',' ');
|
---|
| 381 | fielddisplay(obj,'output_ts_start',' ');
|
---|
| 382 | fielddisplay(obj,'output_ts_days_between',' ');
|
---|
| 383 | fielddisplay(obj,'output_profile',' ');
|
---|
| 384 | fielddisplay(obj,'output_prof_write',' ');
|
---|
| 385 | fielddisplay(obj,'output_prof_start',' ');
|
---|
| 386 | fielddisplay(obj,'output_prof_days_between',' ');
|
---|
| 387 | % }}}
|
---|
| 388 | disp(sprintf('\n %s','Interpolations1d parameters:')); % {{{
|
---|
| 389 | fielddisplay(obj,'interpolations1d_window_size',' '); %that is 5 d and 2 h; 1 d = 86400
|
---|
| 390 | fielddisplay(obj,'interpolations1d_hnw_resample',' ');
|
---|
| 391 | fielddisplay(obj,'interpolations1d_hs_resample',' ');
|
---|
| 392 | fielddisplay(obj,'interpolations1d_tsg_resample',' ');
|
---|
| 393 | fielddisplay(obj,'interpolations1d_rho_hn_resample',' ');
|
---|
| 394 | fielddisplay(obj,'interpolations1d_vw_resample',' ');
|
---|
| 395 | fielddisplay(obj,'interpolations1d_vw_args',' ');
|
---|
| 396 | % }}}
|
---|
| 397 | disp(sprintf('\n %s','Filters parameters:')); % {{{
|
---|
| 398 | fielddisplay(obj,'filters_ta_filter1',' ');
|
---|
| 399 | fielddisplay(obj,'filters_ta_arg1','');
|
---|
| 400 | fielddisplay(obj,'filters_rh_filter1',' ');
|
---|
| 401 | fielddisplay(obj,'filters_rh_arg1','');
|
---|
| 402 | fielddisplay(obj,'filters_rh_filter2',' ');
|
---|
| 403 | fielddisplay(obj,'filters_rh_arg2','');
|
---|
| 404 | fielddisplay(obj,'filters_iswr_filter1',' ');
|
---|
| 405 | fielddisplay(obj,'filters_iswr_arg1','');
|
---|
| 406 | fielddisplay(obj,'filters_iswr_filter2',' ');
|
---|
| 407 | fielddisplay(obj,'filters_iswr_arg2','');
|
---|
| 408 | fielddisplay(obj,'filters_rswr_filter1',' ');
|
---|
| 409 | fielddisplay(obj,'filters_rswr_arg1','');
|
---|
| 410 | fielddisplay(obj,'filters_rswr_filter2',' ');
|
---|
| 411 | fielddisplay(obj,'filters_rswr_arg2','');
|
---|
[15914] | 412 |
|
---|
[15919] | 413 | %for ta between 190 and 280 k;
|
---|
| 414 | fielddisplay(obj,'filters_ilwr_filter1',' ');
|
---|
| 415 | fielddisplay(obj,'filters_ilwr_arg1','');
|
---|
| 416 | fielddisplay(obj,'filters_ilwr_filter2',' ');
|
---|
| 417 | fielddisplay(obj,'filters_ilwr_arg2','');
|
---|
| 418 | fielddisplay(obj,'filters_tss_filter1',' ');
|
---|
| 419 | fielddisplay(obj,'filters_tss_arg1','');
|
---|
| 420 | fielddisplay(obj,'filters_tsg_filter1',' ');
|
---|
| 421 | fielddisplay(obj,'filters_tsg_arg1','');
|
---|
| 422 | fielddisplay(obj,'filters_vw_filter1',' ');
|
---|
| 423 | fielddisplay(obj,'filters_vw_arg1','');
|
---|
| 424 | fielddisplay(obj,'filters_vw_filter2',' ');
|
---|
| 425 | fielddisplay(obj,'filters_vw_arg2','');
|
---|
| 426 | % }}}
|
---|
[15914] | 427 |
|
---|
| 428 | end % }}}
|
---|
| 429 | function marshall(obj,md,fid) % {{{
|
---|
| 430 |
|
---|
| 431 | yts=365.0*24.0*3600.0;
|
---|
| 432 |
|
---|
| 433 | WriteData(fid,'object',obj,'class','snowpack','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
|
---|
| 434 | WriteData(fid,'object',obj,'class','snowpack','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
|
---|
| 435 | WriteData(fid,'object',obj,'class','snowpack','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
|
---|
| 436 | WriteData(fid,'object',obj,'class','snowpack','fieldname','restol','format','Double');
|
---|
| 437 | WriteData(fid,'object',obj,'class','snowpack','fieldname','reltol','format','Double');
|
---|
| 438 | WriteData(fid,'object',obj,'class','snowpack','fieldname','abstol','format','Double');
|
---|
| 439 | WriteData(fid,'object',obj,'class','snowpack','fieldname','isnewton','format','Integer');
|
---|
| 440 | WriteData(fid,'object',obj,'class','snowpack','fieldname','FSreconditioning','format','Double');
|
---|
| 441 | WriteData(fid,'object',obj,'class','snowpack','fieldname','viscosity_overshoot','format','Double');
|
---|
| 442 | WriteData(fid,'object',obj,'class','snowpack','fieldname','maxiter','format','Integer');
|
---|
| 443 | WriteData(fid,'object',obj,'class','snowpack','fieldname','shelf_dampening','format','Integer');
|
---|
| 444 | WriteData(fid,'object',obj,'class','snowpack','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
|
---|
| 445 | WriteData(fid,'object',obj,'class','snowpack','fieldname','penalty_factor','format','Double');
|
---|
| 446 | WriteData(fid,'object',obj,'class','snowpack','fieldname','rift_penalty_lock','format','Integer');
|
---|
| 447 | WriteData(fid,'object',obj,'class','snowpack','fieldname','rift_penalty_threshold','format','Integer');
|
---|
| 448 | WriteData(fid,'object',obj,'class','snowpack','fieldname','referential','format','DoubleMat','mattype',1);
|
---|
| 449 | WriteData(fid,'object',obj,'class','snowpack','fieldname','requested_outputs','format','DoubleMat','mattype',3);
|
---|
| 450 | WriteData(fid,'data',obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
|
---|
| 451 | WriteData(fid,'data',obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
|
---|
| 452 | WriteData(fid,'data',obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
|
---|
| 453 | end % }}}
|
---|
| 454 | end
|
---|
| 455 | end
|
---|