The Ikeda model is a 2D chaotic map useful for visualization data assimilation updating directly in state space. There are three parameters: a, b, and mu. The state is 2D, x = [X Y]. The equations are:
X(i+1) = 1 + mu * ( X(i) * cos( t ) - Y(i) * sin( t ) )
Y(i+1) = mu * ( X(i) * sin( t ) + Y(i) * cos( t ) ),
where
t = a - b / ( X(i)**2 + Y(i)**2 + 1 )
"The initial conditions were generated by observing state variable 1 with an enormous (~1,000,000.0) observation error variance. The observation was defined to be taken at day=0, seconds = 0.
create_fixed_network_sequence
was run to create a sequence with 3000 hourly observations starting at day=0, seconds =0. The initial conditions for filter can accomodate 100 ensemble members."
This namelist is read from the file input.nml
. 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.
&model_nml
a = 0.40,
b = 6.00,
mu = 0.83,
time_step_days = 0,
time_step_seconds = 3600,
output_state_vector = .true.
/
Item | Type | Description |
---|---|---|
a | real(r8) | Model parameter. |
b | real(r8) | Model parameter. |
mu | real(r8) | Model parameter. |
time_step_days | integer | Model advance time in days. |
time_step_seconds | integer | Model advance time in seconds. |
output_state_vector | logical | If true, output the state vector data to the diagnostic files as a single 1D array. If false, break up output data into logical model variables. |
types_mod
time_manager_mod
oned/location_mod
utilities_mod
use model_mod, only : | get_model_size |
adv_1step | |
get_state_meta_data | |
model_interpolate | |
get_model_time_step | |
static_init_model | |
end_model | |
init_time | |
init_conditions | |
nc_write_model_atts | |
nc_write_model_vars | |
pert_model_state | |
get_close_maxdist_init | |
get_close_obs_init | |
get_close_obs | |
ens_mean_for_model |
A note about documentation style. Optional arguments are enclosed in brackets [like this].
model_size = get_model_size( ) :
integer :: get_model_size
Returns the length of the model state vector as an integer. This is fixed at 2 for this model.
model_size |
The length of the model state vector. |
call adv_1step(x, time) :
real(r8), dimension(:), intent(inout) :: x
type(time_type), intent(in) :: time
Advances the model for a single time step. The time associated with the initial model state is also input although it is not used for the computation.
x |
State vector of length model_size. |
time |
Unused in this model. |
call get_state_meta_data (index_in, location, [, var_type] ) :
integer, intent(in) :: index_in
type(location_type), intent(out) :: location
integer, optional, intent(out) :: var_type
Returns the location of the given index, and a dummy integer as the var_type.
index_in |
Index of state vector element about which information is requested. |
location |
Returns location of indexed state variable. The location should use a location_mod that is appropriate for the model domain. For realistic atmospheric models, for instance, a three-dimensional spherical location module that can represent height in a variety of ways is provided. |
var_type | Returns the type of the indexed state variable as an optional argument. |
call model_interpolate(x, location, itype, obs_val, istatus) :
real(r8), dimension(:), intent(in) :: x
type(location_type), intent(in) :: location
integer, intent(in) :: itype
real(r8), intent(out) :: obs_val
integer, intent(out) :: istatus
A NULL INTERFACE in this model. Always returns istatus = 0.
x |
A model state vector. |
location |
Location to which to interpolate. |
itype |
Integer indexing which type of state variable is to be interpolated. Can be ignored for low order models with a single type of variable. |
obs_val |
The interpolated value from the model. |
istatus |
Quality control information about the observation of the model state. |
var = get_model_time_step() :
type(time_type) :: get_model_time_step
Returns the models base time step, or forecast length, as a time_type. This is settable in the namelist.
var |
Smallest time step of model. |
call static_init_model()
Reads the namelist, defines the 2 initial locations of the state variables, and sets the timestep.
call end_model()
A NULL INTERFACE in this model.
call init_time(time) :
type(time_type), intent(out) :: time
Returns a time of 0.
time |
Initial model time. |
call init_conditions(x) :
real(r8), dimension(:), intent(out) :: x
Sets 2 initial locations close to the attractor.
x |
Initial conditions for state vector. |
ierr = nc_write_model_atts(ncFileID) :
integer :: nc_write_model_atts
integer, intent(in) :: ncFileID
Uses the default template code.
ncFileID |
Integer file descriptor to previously-opened netCDF file. |
ierr |
Returns a 0 for successful completion. |
ierr = nc_write_model_vars(ncFileID, statevec, copyindex, timeindex) :
integer :: nc_write_model_vars
integer, intent(in) :: ncFileID
real(r8), dimension(:), intent(in) :: statevec
integer, intent(in) :: copyindex
integer, intent(in) :: timeindex
Uses the default template code.
ncFileID |
file descriptor to previously-opened netCDF file. |
statevec |
A model state vector. |
copyindex |
Integer index of copy to be written. |
timeindex |
The timestep counter for the given state. |
ierr |
Returns 0 for normal completion. |
call pert_model_state(state, pert_state, interf_provided) :
real(r8), dimension(:), intent(in) :: state
real(r8), dimension(:), intent(out) :: pert_state
logical, intent(out) :: interf_provided
Given a model state, produces a perturbed model state. This particular model does not implement an interface for this and so returns .false. for interf_provided.
state |
State vector to be perturbed. |
pert_state |
Perturbed state vector: NOT returned. |
interf_provided |
Returned false; interface is not implemented. |
call get_close_maxdist_init(gc, maxdist) :
type(get_close_type), intent(inout) :: gc
real(r8), intent(in) :: maxdist
Pass-through to the 1-D locations module. See get_close_maxdist_init() <../../assimilation_code/location/oned/location_mod>
for the documentation of this subroutine.
call get_close_obs_init(gc, num, obs) :
type(get_close_type), intent(inout) :: gc
integer, intent(in) :: num
type(location_type), intent(in) :: obs(num)
Pass-through to the 1-D locations module. See get_close_obs_init() <../../assimilation_code/location/oned/location_mod>
for the documentation of this subroutine.
call get_close_obs(gc, base_obs_loc, base_obs_kind, obs, obs_kind, num_close, close_ind [, dist]) :
type(get_close_type), intent(in) :: gc
type(location_type), intent(in) :: base_obs_loc
integer, intent(in) :: base_obs_kind
type(location_type), intent(in) :: obs(:)
integer, intent(in) :: obs_kind(:)
integer, intent(out) :: num_close
integer, intent(out) :: close_ind(:)
real(r8), optional, intent(out) :: dist(:)
Pass-through to the 1-D locations module. See get_close_obs() for the documentation of this subroutine.
call ens_mean_for_model(ens_mean) :
real(r8), dimension(:), intent(in) :: ens_mean
A NULL INTERFACE in this model.
ens_mean |
State vector containing the ensemble mean. |
filename | purpose |
---|---|
input.nml | to read the model_mod namelist |
preassim.nc | the time-history of the model state before assimilation |
analysis.nc | the time-history of the model state after assimilation |
dart_log.out [default name] | the run-time diagnostic output |
dart_log.nml [default name] | the record of all the namelists actually USED - contains the default values |
Ikeda 1979, Optics Communications
N/A