Back to OASIS4 home
Some personal notes on the driver of
OASIS4 in a coupled configuration (ie the driver reads scc and smioc
files, and not the application as in the case of the mode stand alone)
In MPI1 : there is only one communicator MPI_COMM_WORLD
for oasis4 and
the different applications when there are launched. It will be
necessary to redefined a local comm to each appl, to oasis4, ...
In MPI2 : oasis4 and each application has its MPI_COMM_WORLD but it is
done in a such way that oasis4 launches each executable one after the
other, creating every time a new global comm with everyboby.
For example, for sga_smioc_comp, as the
application and the driver have different executables, the memory are
not shared. This is the reason why the transformer has to send the data
to the Psmile.
This is also the case for global variables inside the Driver (or inside
an application). These variables once they are initialised, will be
known by the routines calling the modules in which they are defined,
but they have to be sent by the Driver's master to all the proc of the
transformer.
In
prismdrv_init, the all the procs of the driver finds PRISMdrv_root
(which can be different
from 0) among the procsses of the driver ; it is the min among the
ranks of the driver. It is also in this routine that the standard
output is redirected.
In prismdrv_set_scc_info, the master
process PRISMdrv_root
collects the xml infos in the scc file
and send the some informations needed to allocate the structures to the
other processes of the driver.
The
smioc are read twice by PRISMdrv_root because of user def
In prismtrs_loop, the different processors of the Transformer receive
informations of the processes of the models to perform the
interpolation(s).
The epio is a local variable, defined on
each proc of the Transformer.
It is the source, defined by its global rank, that asks
for transformer_id, for epio_handle ..., that send epios, that send
epiot, that send the neighbours. Each source proc sends its different
epio.
On the othe side, when a proc target wants an interpolated field, it
sends the epio it wants to receive mp%recv_infos_coupler(index)%epio_id
coming from the transformer rank mp%recv_infos_coupler(index)%trs_rank.
If there is more than one field (clones fields) there are all asked at
the same time => to be seen later more complex.
in driver.0 : Number of proc to proc
exchanges of transients is the number
of epio that will be treated.