PROGRAM dart_to_clm
Overview
dart_to_clm
replaces the contents of a CLM restart file with the posterior values
from DART. Only variables with posterior values are updated. The _FillValue in the
DART posterior is used as a mask when replacing the value. The original CLM restart file values
are maintained when the DART posterior value is _FillValue.
Usage
dart_to_clm
overwrites the output file. See the companion PROGRAM clm_to_dart for a
discussion on replacing indeterminate values in the CLM restart snow variables with
_FillValue so that the DART netCDF read routines handle the special values correctly.
Where the DART posterior file has _FillValue values, the original CLM restart file
is left unchanged, preserving the original values.
dart_to_clm
also includes an option that repartitions the snow water equivalent (SWE)
within the CLM snow layer variables (repartition_swe
). This algorithm functions as
follows: if during the DART filter step an increment is applied to the CLM SWE variable
(H2OSNO
), this algorithm partitions the SWE increment amongst the active snow
layers for each CLM column to maintain the same relative ice and liquid distribution
amongst the CLM ice and liquid variables (H2OSOI_ICE
and H2OSOI_LIQ
). Then,
based upon the change in snow layer ice mass, the algorithm updates the snow layer
dimensions (SNOW_DEPTH
, DZSNO
, ZSNO
and ZISNO
) assuming the prior snow
density remains the same.
This repartitioning approach has two main advantages over the traditional filter update applied by DART:
1. It is not required that a given snow layer exists amongst all CLM ensemble members in order for the snow layer to be adjusted. Because the CLM snow algorithm splits and aggregates snow layers based upon the vertical thickness in each layer, the uncertainty in the CAM reanalysis (ie. snowfall, melting of snow) may lead to CLM members with different number of snow layers. The default version of DART must ignore these snow layers and no update is applied. When the
repartition_swe
algorithm is turned on a snow layer which is missing in a subset of ensemble members can still be updated. The only requirement is that each ensemble member includes at least one active snow layer for a CLM column.2. The repartitioning algorithm guarantees the snow layer adjustments (both mass and dimensions) are consistent with the update to the SWE clm variable (
H2OSNO
). In other words, the sum of the ice/liquid mass for all the vertical snow layers is identical to the increment of the total column ice/liquid mass. In the default implementation of DART there is no consistency between the total column update of snow and the update of the snow layer variables, because the snow layer adjustment is based upon the regression between the expected observation and each snow layer.
Whether to repartition the snow characteristics (mass, dimensions) across all active snow layers (repartition_swe = 1) or to the bottom snow layer only (repartition_swe = 2) depends upon the application. Repartitioning to all snow layers maintains the prior relative mass distribution of ice and liquid which could be important for certain water-limited regimes with influence upon the carbon cycle. On the other hand, repartitioning to all snow layers indirectly influences the albedo characteristics of the snowcover as snow variables such as black carbon and dust are concentrated/diluted depending upon the snow layer mass adjustment. Repartitioning the snow/ice to only the bottom snow layer avoids indirect changes to the snow albedo characteristics because the black carbon and dust of the topmost snow layer (exposed to sun) is conserved. This could be important for applications where snow albedo, suface energy balance, and surface temperature are critical. However, applying the mass adjustment to the bottom snow layer only, does not maintain the same relative mass distribution and given the proximity to the soil, may provide a more immediate impact on soil moisture conditions.
Namelist
Namelists start with an ampersand ‘&’ and terminate with a slash ‘/’. Character strings that contain a ‘/’ must be enclosed in quotes to prevent them from prematurely terminating the namelist. These are the defaults:
&dart_to_clm_nml
dart_to_clm_input_file = 'dart_posterior.nc'
dart_to_clm_output_file = 'clm_restart.nc'
repartition_swe = 0
repartition_vhist_file = 'clm_vector_history.nc'
repartition_analysis_file = 'dart_posterior_vector.nc'
verbose = 0
/
Item |
Type |
Description |
---|---|---|
dart_to_clm_input_file |
character(len=256) |
Name of the DART posterior (the output of the filter program) |
dart_to_clm_output_file |
character(len=256) |
Name of the CLM restart file to modify. |
repartition_swe |
integer |
Flag to choose snow repartitioning algorithm
0 Snow repartitioning off. Uses default DART update
1 Snow repartitioned to all active snow layers
2 Snow repartitioned to bottom snow layer only
|
repartition_vhist_file |
character(len=256) |
Name of the CLM vector history file (prior SWE value) Only required when repartition_swe = 1,2 |
repartition_analysis_file |
character(len=256) |
Name of the DART analysis file (posterior SWE value) Only required when repartition_swe = 1,2 |
verbose |
integer |
Flag to control how much run-time output is created.
0 is very little output.
1 reports which CLM variables are being updated.
3 if repartition_swe = 1,2 reports on snow layer diagnostic
variables during repartitioning process
|
Variable requirements when snow repartitioning is enabled
When swe_repartition = 1,2 the DART code requires CLM mass and dimensional snow layer variables output in a specific format described in the table below. A list of the CLM variables (with dimensions) are listed in the left most column of the table. The CLM dimensions important for snow variables are as follows. A ‘column’ is the land unit at which snow properties are defined. The ‘levtot’ is a vertical dimension of the total number of snow layers (1-12) and soil layers (13-37) within a column. The ‘levsno’ dimension is the total number of snow layers.
Variable (dimension) |
File Type |
Description |
---|---|---|
H2OSNO (column) |
clm vector history |
The prior snow water equivalent. Needs to be output in vector
format within the CLM history file (h2). Must be included in
DART state |
H2OSNO (column) |
DART analysis stage |
The posterior snow water equivalent output from the filter
analysis stage. This requires that ‘analysis’ stage be output
within the |
H2OSOI_ICE (column,levtot) |
clm restart |
The ice mass in each snow/soil layer. Must be included in
DART state |
H2OSOI_LIQ (column,levtot) |
clm restart |
The liquid mass in each snow/soil layer. Must be included in
DART state |
DZSNO (column,levsno) |
clm restart |
The snow layer thickness. Must be included in
DART state |
ZISNO (column,levsno) |
clm restart |
The top interface depth of each snow layer. Must be included in
DART state |
ZSNO (column,levsno) |
clm restart |
The middle depth of each snow layer. Must be in included in
DART state |
SNOW_DEPTH (column) |
clm restart |
The total snow depth (sum of all layers). Must be included in
DART state |
When adjusting snow layer variables within an assimilation, at a minimum, the clm_variables
within model_nml
must include the following:
clm_variables = 'H2OSNO', 'QTY_SNOW_WATER', '0.0', 'NA', 'vector' , 'NO_COPY_BACK',
'SNOW_DEPTH', 'QTY_SNOW_THICKNESS', '0.0', 'NA', 'restart' , 'UPDATE',
'H2OSOI_LIQ', 'QTY_SOIL_LIQUID_WATER', '0.0', 'NA', 'restart' , 'UPDATE',
'H2OSOI_ICE', 'QTY_SOIL_ICE', '0.0', 'NA', 'restart' , 'UPDATE',
'DZSNO', 'QTY_SNOW_THICKNESS', '0.0', 'NA', 'restart' , 'UPDATE',
'ZSNO', 'QTY_SNOW_THICKNESS', 'NA', 'NA', 'restart' , 'UPDATE',
'ZISNO', 'QTY_SNOW_THICKNESS', 'NA', 'NA', 'restart' , 'UPDATE',
/
Note
The H2OSOI_ICE and H2OSOI_LIQ variables include both snow layer and subsurface soil layers. Only the snow and liquid mass within the snow layers are repartitioned, whereas the subsurface layers are updated through the default DART approach based upon the regression relationship between the subsurface layer property and an expected observation.
Modules used
assimilation_code/location/threed_sphere/location_mod.f90
assimilation_code/location/utilities/location_io_mod.f90
assimilation_code/modules/assimilation/adaptive_inflate_mod.f90
assimilation_code/modules/assimilation/assim_model_mod.f90
assimilation_code/modules/io/dart_time_io_mod.f90
assimilation_code/modules/io/direct_netcdf_mod.f90
assimilation_code/modules/io/io_filenames_mod.f90
assimilation_code/modules/io/state_structure_mod.f90
assimilation_code/modules/io/state_vector_io_mod.f90
assimilation_code/modules/observations/obs_kind_mod.f90
assimilation_code/modules/observations/obs_sequence_mod.f90
assimilation_code/modules/utilities/distributed_state_mod.f90
assimilation_code/modules/utilities/ensemble_manager_mod.f90
assimilation_code/modules/utilities/netcdf_utilities_mod.f90
assimilation_code/modules/utilities/null_mpi_utilities_mod.f90
assimilation_code/modules/utilities/null_win_mod.f90
assimilation_code/modules/utilities/options_mod.f90
assimilation_code/modules/utilities/random_seq_mod.f90
assimilation_code/modules/utilities/sort_mod.f90
assimilation_code/modules/utilities/time_manager_mod.f90
assimilation_code/modules/utilities/types_mod.f90
assimilation_code/modules/utilities/utilities_mod.f90
models/clm/model_mod.f90
models/utilities/default_model_mod.f90
observations/forward_operators/obs_def_mod.f90
observations/forward_operators/obs_def_utilities_mod.f90
Files
input.nml
is used fordart_to_clm
dart_posterior.nc
is one of the netCDF files output from the filter program.clm_restart.nc
is the CLM generated netCDF file that is modified.clm_vector_history.nc
is the CLM generated netCDF file that provides the prior estimate of snow water equivalent (SWE)dart_posterior_vector.nc
is the DART generated analysis stage file that provide posterior estimate of SWEdart_log.out
list directed output from thedart_to_clm
.
References
none