Version 44 (modified by weinreis, 14 years ago) (diff)

--

Masked data output

General

From release 3.7a (r483) output of masked data is implemented in PALM. This feature allows to output quantities at different mask locations, e.g. 3d volume data or 2d cross sections of arbitrary extension within the model domain; 0d or 1d data at any positions and of any amount.
NetCDF4 file format is already available for masked data output.
Default quantities (instantaneous and time averaged) are declared with the parameter data_output_masks, user-defined quantities can be output with data_output_masks_user.

Output steering

Different runtime parameters defines the masks and steers the output of the quantities assigned with data_output_masks and/or data_output_masks_user:

dt_domask temporal interval at which instantaneous masked data shall be output (in s)
mask_scale_x scaling length for masked data output in x-direction
mask_scale_y scaling length for masked data output in y-direction
mask_scale_z scaling length for masked data output in z-direction
mask_x all x-coordinates of mask locations (in m)
mask_y all y-coordinates of mask locations (in m)
mask_z all z-coordinates of mask locations (in m)
mask_x_loop loop begin, end and stride for x-coordinates of mask locations for masks (in multiples of mask scale)
mask_y_loop loop begin, end and stride for y-coordinates of mask locations for masks (in multiples of mask scale)
mask_z_loop loop begin, end and stride for z-coordinates of mask locations for masks (in multiples of mask scale)
skip_time_domask no output of masked data before this interval has passed (in s)


So far 20 different masks can be defined. Each mask is output to one local file:
Instantaneous data of mask 1 are output to file DATA_MASK_01_NETCDF, time-averaged data to file DATA_MASK_01_AV_NETCDF.
Instantaneous data of mask 2 are output to file DATA_MASK_02_NETCDF, time-averaged data to file DATA_MASK_02_AV_NETCDF.
Instantaneous data of mask 3 are output to file DATA_MASK_03_NETCDF, time-averaged data to file DATA_MASK_03_AV_NETCDF.
...
Instantaneous data of mask 20 are output to file DATA_MASK_20_NETCDF, time-averaged data to file DATA_MASK_20_AV_NETCDF.


Besides assigning the parameters listed above, the required output files have to be comment out in the mrun-configuration file?:

#----------------------------------------------------------------------------
# List of output-files
#----------------------------------------------------------------------------
DATA_MASK_01_NETCDF       out:loc      ma#:maf         $output_data      _m01     nc
DATA_MASK_01_AV_NETCDF    out:loc      ma#:maf         $output_data      _m01_av  nc
DATA_MASK_02_NETCDF       out:loc      ma#:maf         $output_data      _m02     nc
DATA_MASK_02_AV_NETCDF    out:loc      ma#:maf         $output_data      _m02_av  nc
#DATA_MASK_03_NETCDF       out:loc      ma#:maf         $output_data      _m03     nc
#DATA_MASK_03_AV_NETCDF    out:loc      ma#:maf         $output_data      _m03_av  nc
...
#DATA_MASK_20_NETCDF       out:loc      ma#:maf         $output_data      _m20     nc
#DATA_MASK_20_AV_NETCDF    out:loc      ma#:maf         $output_data      _m20_av  nc

Here output of masks 1 and 2 is done. Masks 3 to 20 will not be output even if the parameters are assigned.


Within the mrun call ma# has to be added to the mrun-option -r:

mrun -d example_cbl -h... -r "d3# ma#"


Examples

The following examples are given for the example_cbl run with a model domain size of 2000m x 2000m x 2000m and a resolution of 50.0m.

1. Output of one mask

Mask 1: 3d volume data with an extension of 500m x 200m x 2000m from x = 0m to x = 500m, from y = 800m to y = 1000m and from the bottom to the top of the model domain. Output of instantaneous data of the three wind components.

&inipar

    nx = 39, ny = 39, nz = 40,
    dx = 50.0, dy = 50.0, dz = 50.0,
    .../

&d3par

    ...
    data_output_masks (1,:) = 'u','v','w',
   
    mask_x_loop (1,:) = 0., 500. ,50. ,
    mask_y_loop (1,:) = 800., 1000., 50. ,/

If mask_x, mask_y, mask_z or mask_x_loop, mask_y_loop, mask_z_loop are not assigned, all gridpoints are used along the corresponding direction.
Output is done at t = dt_data_output since dt_domask is not assigned.

2. Output of two different masks

Mask 1: xy cross section from x = 500m to x = 1000m and from y = 1000m to 2000m at heights 0m, 50m, 100m, 500m, 1000m and 1200m. Output of instantaneous and time averaged data of the three wind components.
Mask 2: Every second gridpoint in all directions. Output of instantaneous data of the potential temperature.

&inipar

    nx = 39, ny = 39, nz = 40,
    dx = 50.0, dy = 50.0, dz = 50.0,
    .../

&d3par

    ...
    data_output_masks (1,:) = 'u','v','w','u_av','v_av','w_av',
    data_output_masks (2,:) = 'pt'
   
    mask_x_loop (1,:) = 500.,1000.,50. ,
    mask_y_loop (1,:) = 1000.,2000.,50. ,
    mask_z (1,:) = 0.,50.,100.,500.,1000.,1200.,

    mask_x_loop (2,:) = 0.,2000.,100.,
    mask_y_loop (2,:) = 0.,2000.,100.,
    mask_z_loop (2,:) = 0.,2000.,100.,

    dt_domask = 600.,1800.,
    skip_time_domask = 3600.,3600.,/

Output starts after 1h simulation time (see skip_time_domask) for both masks and is done every 10 minutes for mask 1 and every 30 minutes for mask 2 (see dt_domask).

3. Output of three different masks

Mask 1: 1d data along x-direction at y = 50m, 200m, 500m and 1000m and every fifth grid point in z-dircetion. Output of instantaneous data of the w-velocity component.
Mask 2: Output of the potential temperature at position x = 0m, y = 500m, z = 200m, 300m and 400m.
Mask 3: xz cross section at y = 400m, 450m, 600m. Output of time averaged data of the three wind components.

&inipar

    nx = 39, ny = 39, nz = 40,
    dx = 50.0, dy = 50.0, dz = 50.0,
    .../

&d3par

    ...
    data_output_masks (1,:) = 'w',
    data_output_masks (2,:) = 'pt',
    data_output_masks (3,:) = 'u_av','v_av','w_av',
  
    mask_y (1,:) = 50., 200., 500., 1000.,
    mask_z_loop (1,:) = 0.,2000.,250.,

    mask_x (2,:) = 0.,
    mask_y (2,:) = 500.,
    mask_z_loop (2,:) = 200.,400.,100.,

    mask_y (3,:) = 400., 450., 600.,

    dt_domask = 1800.,
    skip_time_domask = 0.,3600.,3600.,/

Output starts from the beginning for mask 1 and after 1h simulation time (see skip_time_domask) for mask 2 and 3. It is done every 30 minutes for mask 1 and at time intervals of dt_data_output for mask 2 and 3 (see dt_domask).

4. Output of three different masks with scaling length

Mask 1, 2 and 3 as in 3

&inipar

    nx = 39, ny = 39, nz = 40,
    dx = 50.0, dy = 50.0, dz = 50.0,
    .../

&d3par

    ...
    data_output_masks (1,:) = 'w',
    data_output_masks (2,:) = 'pt',
    data_output_masks (3,:) = 'u_av','v_av','w_av',

    mask_scale_x = 10.0,
    mask_scale_y = 10.0,
  
    mask_y (1,:) = 5., 20., 50., 100.,
    mask_z_loop (1,:) = 0.,2000.,250.,

    mask_x (2,:) = 0.,
    mask_y (2,:) = 50.,
    mask_z_loop (2,:) = 200.,400.,100.,

    mask_y (3,:) = 40., 45., 60.,

    dt_domask = 1800.,
    skip_time_domask = 0.,3600.,3600.,/

Output starts from the beginning for mask 1 and after 1h simulation time (see skip_time_domask) for mask 2 and 3. It is done every 30 minutes for mask 1 and at time intervals of dt_data_output for mask 2 and 3 (see dt_domask).