Back to OASIS4 home

Some personal notes on OASIS4

Get comp_name from the smioc
To this comp_name is associated a comp_id
To this comp_id can be associated one or more grid(s) : grid_id
Only one set of corners is associated to one grid
The pole cells are determined when storing the corners (because there is not anymore information about that in the smioc)
Multiple sets of points can be associated to one grid : method_id
Multiple masks can be associated to one grid : mask_id
Then transient fields (in and out) are associated to one comp_id and one grid_id
For one element <transient which will be out in the smioc, there can be many elements <output
For one element <transient which will be in in the smioc, only one element <input is possible
One field can go into a debug channel, an output channel, an input channel, a restart channel (for reading or writing)
The search of intersections for a couple of grid is done with the corners, so it can be used for bilinear or bicubic interpolation as well as conservative interpolation.
Then for method point, the search finds out in which source cell falls the target point.
For gaussian reduced grid, the MG grid is simplified except for the grid stored at the level = 0 that corresponds to the real grid (used in psmile_mg_method_gauss2_dble) -> ie it is constructued as a reglonlat grid
To find out the closer left lower source point of the target point, with
psmile_mg_method_2d_dble, a "method grid" is constructed where the corner of the new grid are the point of the source grid.
--> the missing points are obtained thanks to the information on the halo (virtual cells at the partition)

One component can not exchange a field between its own grids but two components of the same application can exchange data.

in routine psmile_enddef_appl, all_comp_infos contains all the informations on all the component of each application.
in particular all_comp_infos(icomp)%Number_of_Grids_Vector contains the number of "partitions" ("subgrids") of each component icomp on all its processors.
recall : all the initial grids are mapped into a common space [-180:180]/[-90:90] to search the envelops of the intersections so they can be partitionned on the processors.

The search of the intersections is based on the corners, so it can be used both for conservative and point method interpolations types.
Then if the interpolation is conservative, the corners are sent, else the points are sent/recv (see
psmile_send_req_subgrid and psmile_recv_req_subgrid)
!===> ... Send message to the destination process
!  msgint (1)  = Local component id in the destination process
!                which contains the intersection.
!                The grid data is transferred to this process
!                in order to locate the donor cells.
!  msgint (2)  = Grid index of local comp_info of destination process.
!  msgint (3)  = Component id of sending process
!  msgint (4)  = Grid id of sending process
!  msgint (5)  = Grid index of local comp_info of sending grid
!  msgint (6)  = First method id in sending process
!  msgint (7)  = Method type
!  msgint (8)  = Method datatype
!  msgint (9)  = global_index
!              = Index of current comp_info in all_comp_infos
!  msgint (10) = Field id
!  msgint (11) = Mask id
!  msgint (12) = Id_transient_in  for epio
!  msgint (13) = npart                                            ! 
number of intersections between grids on proc of comp_id and the grids on the proc i of the remote component
!  msgint (14) = Id_transient_out for epio
!  msgint (15) = Number of remaining fields to be checked.
!  msgint (16) = Conservative remapping PSMILe_conserv2D, PSMILe_conserv3D
!  msgint (ind_msgint_tag)
!             = Relative message tag of locations
!  msgint (ip_msgint_inter+1:ip_msgint_inter+2*ndim_3d)
!             = inter = Intersection
!===> ... Relative tag/counter
!           msgint (ind_msgint_tag) = ninter - nmyint - nnull
            msgint (ind_msgint_tag) = ninter - nnull

in psmile_search_donor_irreg2_dble, we work on only one component : comp_info == comp_infos(comp_id)
search stores infos on the target grid, as we know everything on the local source grid !
mg_*cells is related to conservative interpolation while mg_method is related to "point" interpolation