[Dart-dev] DART/branches Revision: 12945
dart at ucar.edu
dart at ucar.edu
Thu Dec 6 15:33:36 MST 2018
nancy at ucar.edu
2018-12-06 15:33:36 -0700 (Thu, 06 Dec 2018)
228
committing an updated model_mod for the simple_advection model
to the recam branch just so there is a version in svn someplace
for safekeeping. this needs review by jeff and then to be put
on the rma_trunk and then manhattan.
Modified: DART/branches/recam/models/simple_advection/model_mod.f90
===================================================================
--- DART/branches/recam/models/simple_advection/model_mod.f90 2018-11-29 18:44:20 UTC (rev 12944)
+++ DART/branches/recam/models/simple_advection/model_mod.f90 2018-12-06 22:33:36 UTC (rev 12945)
@@ -4,6 +4,48 @@
!
! $Id$
+!> @brief Simple Advection model
+!>
+!> This model is on a periodic one-dimensional domain. A wind field is
+!> modeled using Burger's Equation with an upstream semi-lagrangian
+!> differencing. This diffusive numerical scheme is stable and forcing
+!> is provided by adding in random gaussian noise to each wind grid
+!> variable independently at each timestep. The domain mean value of the
+!> wind is relaxed to a constant fixed value set by the namelist parameter
+!> mean_wind. The random forcing magnitude is set by namelist parameter
+!> wind_random_amp and the damping of the mean wind is controlled by
+!> parameter wind_damping_rate. An Eulerian option with centered in
+!> space differencing is also provided and can be used by setting namelist
+!> parameter lagrangian_for_wind to .false. The Eulerian differencing is
+!> both numerically unstable and subject to shock formation. However, it
+!> can sometimes be made stable in assimilation mode (see recent work by
+!> Majda and collaborators).
+!>
+!> The model state includes a single passive tracer that is advected by
+!> the wind field using semi-lagrangian upstream differencing. The state
+!> also includes a tracer source value at each gridpoint. At each time
+!> step, the source is added into the concentration at each gridpoint.
+!> There is also a constant global destruction of tracer that is controlled
+!> by the namelist parameter destruction_rate. The appropriate percentage
+!> of tracer is destroyed at each gridpoint at each timestep.
+!>
+!> The model also includes an associated model for the tracer source rate.
+!> At each gridpoint, there is a value of the time mean source rate and
+!> a value of the phase offset for a diurnal component of the source rate.
+!> The diurnal source rate has an amplitude that is proportional to the
+!> source rate (this proportion is controlled by namelist parameter
+!> source_diurnal_rel_amp). At each grid point, the source is the sum
+!> of the source rate plus the appropriate diurnally varying component.
+!> The phase_offset at the gridpoint controls the diurnal phase. The
+!> namelist parameter source_phase_noise controls the amplitude of
+!> random gaussian noise that is added into the source phase at each
+!> time step. If source_phase_noise is zero then the phase offset is
+!> fixed. Finally, the time mean source rate is constant in time in the
+!> present model version. The time mean source rate controls the
+!> amplitude of the diurnal cycle of the tracer source.
+!>
+!>
+
module model_mod
use types_mod, only : r8, PI, i4, i8
@@ -15,6 +57,8 @@
check_namelist_read, do_output, &
do_nml_file, do_nml_term
+use mpi_utilities_mod, only : sum_across_tasks, my_task_id
+
use location_mod, only : location_type, set_location, get_location, &
get_close_obs, get_close_state, &
convert_vertical_obs, convert_vertical_state
@@ -29,13 +73,13 @@
use default_model_mod, only : end_model, nc_write_model_vars, init_time
use obs_kind_mod, only : QTY_VELOCITY, QTY_TRACER_CONCENTRATION, &
- QTY_TRACER_SOURCE, QTY_MEAN_SOURCE, QTY_SOURCE_PHASE
+ QTY_TRACER_SOURCE, QTY_MEAN_SOURCE, QTY_SOURCE_PHASE, &
+ get_name_for_quantity
use random_seq_mod, only : random_seq_type, init_random_seq, random_gaussian
-use ensemble_manager_mod, only : ensemble_type, get_allow_transpose, &
- all_vars_to_all_copies, all_copies_to_all_vars, &
- init_ensemble_manager, end_ensemble_manager
+use ensemble_manager_mod, only : ensemble_type, init_ensemble_manager, end_ensemble_manager, &
+ get_my_num_vars, get_my_vars
use distributed_state_mod, only : get_state
@@ -136,8 +180,18 @@
real(r8) :: source_diurnal_rel_amp = 0.05_r8
real(r8) :: source_phase_noise = 0.0_r8
+! if you change NVARS or the order of any of
+! these, you must change the 'add_domain()' call
+! in static_init_model() below.
integer, parameter :: NVARS = 5
-integer :: my_ens_size = 1
+integer, parameter :: CONC = 1
+integer, parameter :: TSOURCE = 2
+integer, parameter :: WIND = 3
+integer, parameter :: MEAN_SRC = 4
+integer, parameter :: SRC_PHASE = 5
+integer :: conc_offset, source_offset, wind_offset
+integer :: mean_src_offset, src_phase_offset
+integer :: model_size
namelist /model_nml/ num_grid_points, grid_spacing_meters, &
time_step_days, time_step_seconds, &
@@ -175,14 +229,17 @@
More information about the Dart-dev
mailing list