pywasp.wasp.Config
- class pywasp.wasp.Config(par_set='WAsP_12.8')[source]
Configuration class for the WAsP model parameters
Due to the structure of the original fortran testbench code, parameters from the WAsP model are set in a long array with integers in a Fortran data block. Here we initialize both the climate and terrain parameters. The obstacle model does not, yet, have a similar structure to that of the climate and terrain models. Parameter can be set with a parameter-suite name, like “WAsP_12.8” for the parameters corresponding to WAsP version 12.8. Individual parameters can also be set manually through the methods of the
.terrain
and.climate
class attributes (see below). By default, “WAsP_12.8” is used.- Parameters:
par_set (
str
) – Named parameter set with different defaults:WAsP_11.4 – Profile model -1; terrain analysis 0
WAsP_12.6 – Profile model 1; terrain analysis 0
WAsP_12.7 – Profile model 1; terrain analysis 1
WAsP_12.8 – Profile model 3; terrain analysis 1
The above numbers are the parameter when calling
Config.climate.set_profile_model
andConfig.terrain.set_terrain_analysis
respectively.
Notes
The
.terrain
and.climate
class attributes each respectively hold the parameters for the terrain and climate analysis in WAsP. The attributes are themselves classes with associated methods described below. To interact with the parameters, bothterrain
and.climate
acts as lists, allowing to get and set parameters by indicies:from pywasp.wasp import Config conf = Config() conf.climate[10] = 1.8 # Set the climate parameter 10 (A0) value to 1.8 decay_length = conf.terrain[31] # get the decay length parameter from the terrain model
Terrain model config
The terrain model allows users to set the terrain analysis parameter-set and whether toggle whether displacement heights are used. This is done through the two methods:
.set_terrain_analysis(index)
, which set the terrain analysis. It has two options: - 0: for classic analysis - 1: for “spider” analysis..use_displacement_height(flag)
, which sets the displacement heights. Options are True or False.
The full list of parameters for the terrain model is:
index | short_name | valid_min | valid_max | default_value | definition |+=========+==========================+=================================+=================================+===========================+=============================================================================================================================================================================================================================================================================================================================================================+ | 2 | c_zone_width | 5000 | 50000 | 10000 | Width of coastal interpolation/transition zone | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 6 | inv_height | 100 | 5000 | 1000 | Height of top (virtual ‘inversion’) in BZ model | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 7 | inv_softness | 0 | 1 | 1 | Softness of inversion in BZ model (0–1) | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 8 | k | 0.35 | 0.42 | 0.4 | In fluid dynamics, the von K'arm'an constant ($k$ or $kappa$) is a dimensionless constant involved in the logarithmic law describing the profile of the longitudinal velocity in the wall-normal direction of a turbulent fluid flow near a boundary with a no-slip condition. Clasically, it is taken to be 0.4. | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 24 | lp_filter_len | 0 | inexact; roughly domain size/10 | 0 | Low-pass filter scale (length) in BZ terrain model (0 for off) | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 26 | | | | 0.27 | Factor $c$ in BZ inner layer eqn. | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 27 | | | | 0.3 | Outer layer scaling factor in BZ: texttt{xl=r*vls(iz)*xlf} | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 28 | const_wind_h | 0 | | 1000 | Height at which undisturbed wind is constant in BZ model | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 29 | | | | 5.0 | outer roughness area / outer layer factor, to find mean roughness used in inner-scale relation of IBZ | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 30 | | | | 0.67 | Exponent in inner layer power law (over surface inhomogeneities) if p(26) is positive; otherwise is exponent in original inner-length scale law | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 31 | decay_length | 1000 | 1000000 | 10000 | Decay-length for importance of roughness relative to distance from center | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 32 | | | | -1 | Method/type choice for calculating mean roughnesses in the IBL model | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 33 | | | | 1.06 | Drag-law stability offset factor | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 38 | | 3 (suggested by M.Kelly, 2018) | $sim30$ | 10.0 | Minimum $h_textrm{IBL}/z_0$ in IBL depth calculation | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 39 | | suggested: 0.5 (1.25$kappa$) | suggested: 1.0 (2.5$kappa$) | 0.9 | Coefficient on $x/z’_0$ in IBL depth | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 40 | upper_kink_ibl_profile | | | 0.3 | Factor for upper kink in roughness change wind profile in the ibl | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 41 | lower_kink_ibl_profile | $sim$10*max[$z_{0,1},z_{0,2}$] | $c_1$ | 0.09 | Factor for lower kink in roughness change wind profile in the ibl | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 42 | | | | 5 | Azimuth resolution in BZ (>1 deg, default 5 deg) | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 63 | | | | 5e-6 ($5times10^{-6}$) | deviation angle that prevents erroneous sequence of rchs | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 65 | sub_sector_no | 1 | 9 | 9 | Sub-sectors in roughness map analysis | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 66 | | | | 10.0 | displacement factor (d=factor*z0) used in atlas_nt,wprms_nt and hsp | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 67 | max_no_roughness_changes | 1 | 20 | 10 | Max number of roughness changes/sector. See cite{Floors2018b} for description and sensitivity. This array is dimensioned in the variable mrchs in dimpar.f90. | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 68 | max_rms_error | 0 | 3 | 0.3 | Maximum root-mean square (rms) error in log(roughness) analysis of roughness changes for a given sector. Setting a lower error threshold will allow a higher number of roughness changes to be taken into consideration, for each sector. Choosing 0 causes this parameter to become inactive, with the maximum number of changes then set by parameter~67. | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 69 | use_displacement_height | | | 1 | add displacements to orographic grid if = 1, and reduce displacement slope near origin to parameter~70 | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 70 | | | | 0.2 | max slope for the BZ grid that is added to the original BZ when p(69)=1 | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 72 | | | | 1.2 | Standard RIX slope value (percent per percent of dRIX) | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 73 | | | | 0 | RIX azimuthal averaging. 0=unweighted, 1=sector-mean weighted, | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 74 | | | | 0. | finest resolution (first radial distance in meters) in BZ grid | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 75 | | | | 20000 | if > 0.0 height contours ignored beyond this distance (BZ model) | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 76 | | | | 0.5 | Ratio for outer padding in BZ-model (do not change) | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 79 | | 100 | 10000 | 3500 | RIX radius in meters | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 80 | | 0.005 | 1 | 0.3 | RIX threshold slope | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 81 | | | | 5.0 | percent increase in rou area size per r-grid step | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 82 | roughness_analysis | | | 1 | rou analysis version: 0=old, =1 use spiderweb with old rou maps | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 83 | | | | 3. | outer radius in rou-spg is param(31)*param(83) | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 84 | | | | 25. | first radius in spiderweb routine | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 85 | | | | 0 | if > 0: use ibltable instead of ibl iteration | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 97 | water_roughness_length | 0.000006 | 0.1 | 0.0002 ($2times10^{-4}$) | water roughness length used in program | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 98 | | | | 0 | nominal value for setting water attribute (roughness, slf, stability) | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 99 | | 10max[$z_0$] | $0.99z_2$ | 10. | height used in atlas_nt for initial downward extrapolation | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 100 | | 0 | | 0.1 | slope in triangular weight function for displacement averaging in rou_spg | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 101 | | | | 0.1 | slope of displacement decay downwind in rou_spg | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 102 | | | | 0.1 | slope of displacement growth upwind in rou_spg | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+ | 103 | | | | 4.0 | Power to raise displacements to before averaging | +———+————————–+———————————+———————————+—————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+
Climate model config
The climate model config allows users to set the profile model through the
.set_profile_model(model)
. Currently, the options are:-1: WAsP 11 profile model using c_g=1.65 and powerlaw estimation for reversal height
0: WAsP 12 profile model with c_g solved by iteration and dA/dmu set such that it corresponds with the old profile model
1: WAsP 12 profile model, as version 0 but including baroclinicity
2: WAsP 12 profile model, including sectorwise stability as described in mesoclimate class
3: WAsP 12 profile model, including sectorwise stability and baroclinicity as described in mesoclimate class
The full list of parameters for the climate model is:
index | short_name | valid_min | valid_max | default_value | definition |+=========+========================+=============+==================+=================+==============================================================================================================================================================================================================================+ | 1 | | | | 1005.0 | Specific heat of dry air | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 4 | fmin | 0.0 | should be $ll1$ | 0.0001 | Sectorwise frequency of occurence, i.e.probability, below which we do not attempt to fit a Weibull distribution: a sector is ‘empty’ (ignored) if the frequency of occurence falls below this value. | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 8 | vonk | 0.35 | 0.42 | 0.40 | von K'arm'an constant ($k$ or $kappa$) is the ratio of $U/z$ to $dU/dz$ in ideally neutral conditions over a rough surface: i.e., the proportionality constant in the law-of-the-wall. | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 9 | | | | 0.485 | Constant in simplified reverse geostrophic drag law of cite{Jensen1984} | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 10 | a0 | 0 | 4 | 1.8 | $A_{0}$-parameter in geostrophic drag law under neutral conditions | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 11 | b0 | 2 | 8 | 4.5 | $B_0$-parameter in neutral geostrophic drag law | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 38 | | | | | min ibl/z0max in ibl calculation | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 44 | f_lim | 0 | 90 | 10 | Lower limit of absolute latitude for f in Rossby number | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 48 | def_hfx | | | 0 | If 0 the input of heatflux parameters is taken as default from the parameter list (see parameter 56-59). If 2, the heat flux parameters are passed into stability routines from the specified ‘mesoscale climate’ in PyWAsP. | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 54 | | 0.001 | 0.006 | 0.0002 | Factor in height of minimum stab induced variance cite[EWA has 0.002][]{Troen1989}. When set negative, Eq.~8.10 is solved by iteration without approximations. | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 55 | hfx_pert | 1 | 5 | | Factor in heatflux induced perturbation of $u_*$ (was 1.65, default 2.50). | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 56 | rms_hfx_land | 0 | 300 | 100 | Root mean square of heat flux over land | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 57 | rms_hfx_water | 0 | 100 | 30 | Rms Heatflux over water | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 58 | off_hfx_land | -200 | 200 | -40 | Offset (mean) heatflux over land | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 59 | off_hfx_water | -100 | 100 | -8 | Offset (mean) heatflux over water | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 60 | stab_lim_land | 0.25 | 4 | 1 | Factor on geostrophic height for stab envelope limiting | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 61 | | | | | Form factor in heatflux distribution over land | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 62 | | | | | Form factor in heatflux distribution over water | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 64 | | | | | minimum Geostrophic wind (land) in stability calculation | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 66 | | | | | displacement factor (d=factor*z0) used in atlas_nt,wprms_nt and hsp | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 70 | pblh_water | 100 | 2000 | [1000] | Boundary layer height over sea in meters | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 71 | pblh_land | 100 | 2000 | [600] | Boundary layer height over land in meters | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 77 | stab_lim_water | 0.25 | 4 | 1 | Factor on geostrophic height (sea) for stab envelope limiting | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 78 | | | | | power law in stab height limiting (land and sea) | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 85 | | | | | if > 0: use ibltable instead of ibl iteration | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 86 | f_cor | | | 0.0001 | absolute value of Coriolis parameter in stab, calculated internally from latitude if < 0.0 | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 87 | | | | | factor ch in ch*ustar/f boundary layer height estimate | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 88 | | | | | dA/dmy in barotropic drag law | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 89 | | | | | dB/dmy in barotropic drag law | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 90 | | | | | geometrical factor from integral of geo-shear in ABL, u-component | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 91 | | | | | geometrical factor from integral of geo-shear in ABL, v-component | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 92 | m_geo_shear | 0 | 0.010 | | dgdz: magnitude of dG/dz at surface | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 93 | beta | 0 | 360 | | beta: direction of dG/dz at surface | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 94 | | | | | delta: thermal wind turning angle(degs) | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 95 | | | | | ef: factor in linear “Ekman” correction to wind profile, u=log+psi+ef*(z-d)*f | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 96 | | | | | ch: factor in expression for BL height: H=ch*ustar/f | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 97 | water_roughness_length | | | | water roughness length used in program | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 98 | | | | | nominal value for setting water attribute (roughness, slf, stability) | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 99 | | | | | height used in atlas_nt for initial downward extrapolation | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 100 | use_tscale | | | 0 | Use temperature scale with units K (1) or heat flux in W m$^{-2}$ (0) | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 101 | | | | | Factor to emulate WAsP 11 behaviour | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 102 | | | | -1 | Slope of psi function under neutral conditions, -1 is old WAsP 12. | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 103 | | | | | Limit for dgdz | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+ | 104 | | | | | Number of degrees used for averaging of sectorwise A/B | +———+————————+————-+——————+—————–+——————————————————————————————————————————————————————————————————————————+
Examples
Config objects can be instantiated with a standard parameter-suite, for example WAsP 12.8:
>>> import pywasp as pw >>> conf = pw.wasp.Config("WAsP_12.8") >>> print(conf) Config >>> conf.climate[10] = 1.8 # Set the climate parameter 10 (A0) value to 1.8 >>> conf.set_profile_model(-1) # Use the WAsP 11 profile model >>> conf.terrain.set_terrain_analysis # Use spider analysis terrain model ... >>> # Use the Config in a WAsP model-call >>> wwc = pw.wasp.downscale(gwc, topo_map, output_locs, conf=conf)
Methods
__init__
([par_set])from_dict
(d)Initialize class from dictionary
read_file
(filepath)Initialize class from exported JSON file
to_dict
()Export WAsP configuration parameters to dictionary.
to_file
(filepath)Export WAsP configuration parameters to file.