Back to OASIS3-MCT home
In a model you have to call with OASIS3-MCT_2.0 :
*
USE mod_oasis
* INCLUDE 'mpif.h'
* All coupling is now direct. Gets are
blocking, puts are non-blocking.
* MPI2 job launching is NOT supported.
* Ability to send and receive more than 1 field with a coupling
operation.
* The dimensions of the grids must be given in the
namcouple.
* If a variable is defined using oasis_def_var but is not in the
namcouple, put var_id = OASIS_Var_Uncpl : this variable must not be
exchanged
* Possibility to define less processors implied in the
coupling
than
the total number of processors (I/O server (NEMO) or I/O procs (WRF))
but chosing this time which procs will be implied in the coupling. A
communicator gathering only
these processes must be defined :
If such communicator does not exist yet in the code, the component
processes should use, to create it and give it to OASIS3-MCT :
oasis create
couplcomm(icpl, local_comm, coupl_comm, kinfo) : icp = 1 for processes
participating in the coupling and with icpl=MPI_UNDEFINED for the
others.
If this communicator already exist in the code, the component
should use, to provide it to OASIS3-MCT :
oasis set
couplcomm(coupl_comm, kinfo) : coupl_com for processes
participating in the coupling and coupl_com=MPI_COMM_NULL
for the others.
processes not used in the coupling must also call all collective
routines
CALL oasis_init_comp
CALL oasis_get_localcomm
CALL oasis_create_couplcomm
CALL oasis_def_partition ( with ig_paral=0 )
CALL oasis_def_var ( ... )
CALL oasis_enddef ( ... )
CALL oasis_terminate ( ... )
*
SEQ
is
not
used
anymore
except
if the implementation of
get/put ordering in models is important. But the SEQ setting in the
namcouple have to be consistent.
If restarts are used, both models call oasis_get before oasis_put and
SEQ must be equal to 1 for all coupling fields.
LOCTRANS transformation : restart file. If it is the only
transformation (ie no restart (LAG=0)) there is a particular fiel for
the variable. If there is a LAG (ie a restart) the variable is written
to the restart file.
* With oasis3-mct, there is no abort even if the file areas.nc is not
present.
In
a
model
you
have
to
call
with
OASIS3-MCT_3.0
:
* USE mod_oasis
* INCLUDE 'mpif.h'
* All coupling is now direct. Gets are
blocking, puts are non-blocking.
* MPI2 job launching is NOT supported.
* Ability to send and receive more than 1 field within a coupling
operation.
* The dimensions of the grids must be given in the
namcouple.
* If a variable is defined using oasis_def_var but is not in the
namcouple, put var_id = OASIS_Var_Uncpl : this variable must not be
exchanged
* The grid can be written in grids.nc, masks.nc, areas.nc by the master
or by all the processors.
* ALL tasks on all models must call oasis_init_comp.
* ALL tasks of a given model must call oasis_init_comp with the same
value of the optional coupled argument (where the default is
true). If a model calls oasis_comp_init with coupled=.false., then that model
does NOT need to make any more calls to any oasis interfaces.
* If a model calls oasis_comp_init with
coupled=.true. (which is the default value), then that component
must at least call oasis_enddef and
oasis_terminate even if no fields are coupled which means that
ALL tasks on all coupled components
must
call
oasis_enddef
and
oasis_terminate.
* If some processes are not coupling, it is still necessary to call oasis create
couplcomm(icpl, local_comm, coupl_comm, kinfo) : icp = 1 for processes
participating in the coupling and with icpl=MPI_UNDEFINED for the
others.
Indeed, this routine creates a new
communicator for the model with the processes that are coupling and
send it to OASIS.
* If a model is defining coupling
fields, oasis_def_partition and oasis_def_var must be called on all
tasks that are involved in the coupling of that field.
oasis_def_partition defines the local partition and oasis_def_var
returns a var_id that is used later in the get/put interface. The
order of the definition of partitions or variables does not need to be
the same on all tasks. Tasks not involved in the coupling of a
particular field may call oasis_def_partition and oasis_def_var.
* If a model is defining coupling a
fields,
then oasis_get and oasis_put must be called on all tasks involved in
coupling. The order of the fields is important and must be
consistent across different tasks. oasis_get and oasis_put
should NOT be called on tasks for variables where oasis_def_var was not
called as no var_id will be established on those tasks for that
variable.
* If there are more than one component in one
executable, defined each with one oasis_init_comp,
they will be defined concurrently
with respect to tasks within that executable.
* Coupling now possible within a component (one
oasis_init_comp), on overlapping,
partly
overlapping,
or
non
overlapping
tasks inside this
component and sharing this oasis_init_comp. There will be one
oasis_init_comp, but some oasis_def_partition, oasis_def_var, oasis_put
and oasis_get in the tasks of the principal component depending if they
are coupling or not . User must make sure not to deadlock when coupling
within a component. Puts must be executed before gets for coupling
within a component on overlapping tasks.
* OASIS3-MCT_3.0 can not give communicators to a subset of tasks inside
a component. Communicators needed in
a component have to be created and
managed by the model itself.
* SEQ is not used anymore except if the implementation of
get/put ordering in models is important. But the SEQ setting in the
namcouple have to be consistent.
If restarts are used, both models call oasis_get before oasis_put and
SEQ must be equal to 1 for all coupling fields.
LOCTRANS transformation : restart file. If it is the only
transformation (ie no restart (LAG=0)) there is a particular fiel for
the variable. If there is a LAG (ie a restart) the variable is written
to the restart file.
* With oasis3-mct, there is no abort even if the file areas.nc is not
present.