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.