Back to OASIS4 home


MPI exchanges between the Transformer and the Psmile for the interpolation

prismtrs_loop

CALL MPI_Recv (ila_loop, PSMILe_trans_Header_length, &
MPI_Integer, MPI_ANY_SOURCE, MPI_ANY_TAG,  &
comm_drv_trans, il_status, id_err)
psmile_trs_set_src_epio3d_dble
master determines Transformer rank that will treat this epio (local)
CALL MPI_Recv (ila_loop, PSMILe_trans_Header_length, MPI_Integer, &
       MPI_ANY_SOURCE, MPI_ANY_TAG, comm_drv_trans, il_status, id_err)


CALL MPI_Send(il_rank, 1, MPI_Integer, ila_loop(2), 5, comm_drv_trans, id_err)
determines Transformer rank thanks to the master of T
call psmile_trs_inform(PSMILe_trans_Set_rank_trans, PRISMdrv_root, id_err)
=> CALL MPI_Send(ida_args(1), PSMILe_trans_Header_length, MPI_Integer, &
                      id_trans_rank, 0, comm_trans, id_err)

CALL MPI_Recv (id_trans_rank, 1, MPI_Integer, PRISMdrv_root, 5, comm_trans, il_status, id_err)
il_rank sends the local epio_id
CALL MPI_Recv (ila_loop, PSMILe_trans_Header_length, MPI_Integer, &
       MPI_ANY_SOURCE, MPI_ANY_TAG, comm_drv_trans, il_status, id_err)


CALL MPI_Send(il_index, 1, MPI_Integer, ila_loop(2), 6, comm_drv_trans, id_err)
get the epio_id from the Transformer id_trans_rank
call psmile_trs_inform(PSMILe_trans_Set_epio_trans, id_trans_rank, id_err)
=> CALL MPI_Send(ida_args(1), PSMILe_trans_Header_length, MPI_Integer, &
                      id_trans_rank, 0, comm_trans, id_err)

CALL MPI_Recv (id_epio_id, 1, MPI_Integer, id_trans_rank, 6, comm_trans, il_status, id_err)
il_rank receives the action to performe
CALL MPI_Recv (ila_loop, PSMILe_trans_Header_length, MPI_Integer, &
       MPI_ANY_SOURCE, MPI_ANY_TAG, comm_drv_trans, il_status, id_err)

sends src epio info header to id_trans_rank
call psmile_trs_inform(PSMILe_trans_Set_src_epio_info, id_trans_rank, id_err)
=> CALL MPI_Send(ida_args(1), PSMILe_trans_Header_length, MPI_Integer, &
                      id_trans_rank, 0, comm_trans, id_err)

prismtrs_set_src_epio_dble
psmile_trs_set_src_epio3d_dble
il_rank receives the source coordinates of the epio and the mask
CALL MPI_Recv (Drv_Epios(il_epio_id)%src_lat_pointer_dble, &
     il_lonlatz_size, MPI_Double_Precision, &
     il_process_global_rank, 1, comm_drv_trans, il_status, id_err)
 
  CALL MPI_Recv (Drv_Epios(il_epio_id)%src_lon_pointer_dble, &
     il_lonlatz_size, MPI_Double_Precision, &
     il_process_global_rank, 2, comm_drv_trans, il_status, id_err)
 
  CALL MPI_Recv (Drv_Epios(il_epio_id)%src_z_pointer_dble,  &
     il_lonlatz_size, MPI_Double_Precision, &
     il_process_global_rank, 3, comm_drv_trans, il_status, id_err)

CALL MPI_Recv (Drv_Epios(il_epio_id)%src_mask_pointer, il_epio_size, &
        MPI_Integer, il_process_global_rank, 4, comm_drv_trans, il_status, id_err)
sends the source coordinates of the epio and possibly the mask
CALL MPI_Send(dda_epio_lat(1), id_lonlatz_size, &
     MPI_Double_precision, id_trans_rank, 1, comm_trans, id_err)


CALL MPI_Send(dda_epio_lon(1), id_lonlatz_size, &
     MPI_Double_precision, id_trans_rank, 2, comm_trans, id_err)


CALL MPI_Send(dda_epio_z(1), id_lonlatz_size, &
     MPI_Double_precision, id_trans_rank, 3, comm_trans, id_err)


CALL MPI_Send(ida_epio_mask(1), id_epio_size, MPI_Integer, &
         id_trans_rank, 4, comm_trans, id_err)
prismtrs_loop
psmile_trs_set_tgt_epio3d_dble
il_rank receives the action to performe
CALL MPI_Recv (ila_loop, PSMILe_trans_Header_length, MPI_Integer, &
       MPI_ANY_SOURCE, MPI_ANY_TAG, comm_drv_trans, il_status, id_err)
sends tgt epio info header to id_trans_rank
call psmile_trs_inform(PSMILe_trans_Set_tgt_epio_info, id_trans_rank, id_err)
=> CALL MPI_Send(ida_args(1), PSMILe_trans_Header_length, MPI_Integer, &
                      id_trans_rank, 0, comm_trans, id_err)

prismtrs_set_tgt_epio_dble
psmile_trs_set_tgt_epio3d_dble
il_rank receives the target coordinates of the epio and the mask
CALL MPI_Recv (Drv_Epios(il_epio_id)%tgt_lat_pointer_dble, &
     il_recv_size, MPI_Double_Precision, &
     il_process_global_rank, 1, comm_drv_trans, il_status, id_err)

CALL MPI_Recv (Drv_Epios(il_epio_id)%tgt_lon_pointer_dble, &
     il_recv_size, MPI_Double_Precision, &
     il_process_global_rank, 2, comm_drv_trans, il_status, id_err)

CALL MPI_Recv (Drv_Epios(il_epio_id)%tgt_z_pointer_dble, &
     il_recv_size, MPI_Double_Precision, &
     il_process_global_rank, 3, comm_drv_trans, il_status, id_err)

CALL MPI_Recv (Drv_Epios(il_epio_id)%tgt_mask_pointer, &
         il_epio_size, MPI_Integer, &
         il_process_global_rank, 4, comm_drv_trans, il_status, id_err)
sends the target coordinates of the epio and possibly the mask to id_trans_rank
CALL MPI_Send(dda_epio_lat(1), il_send_size, MPI_Double_precision, &
     id_trans_rank, 1, comm_trans, id_err)


CALL MPI_Send(dda_epio_lon(1), il_send_size, MPI_Double_precision, &
     id_trans_rank, 2, comm_trans, id_err)


CALL MPI_Send(dda_epio_z(1), il_send_size, MPI_Double_precision, &
     id_trans_rank, 3, comm_trans, id_err)


CALL MPI_Send(ida_epio_mask(1), id_epio_size, MPI_Integer, &
         id_trans_rank, 4, comm_trans, id_err)
prismtrs_loop psmile_trs_set_triple_links
il_rank receives the action to performe
CALL MPI_Recv (ila_loop, PSMILe_trans_Header_length, MPI_Integer, &
       MPI_ANY_SOURCE, MPI_ANY_TAG, comm_drv_trans, il_status, id_err)
asks id_trans_rank to call prismtrs_set_triple_links
call psmile_trs_inform(PSMILe_trans_Set_triple_links, id_trans_rank, id_err)
=> CALL MPI_Send(ida_args(1), PSMILe_trans_Header_length, MPI_Integer, &
                      id_trans_rank, 0, comm_trans, id_err)

prismtrs_loop psmile_trs_give_neighbors3d
il_rank receives the action to performe
CALL MPI_Recv (ila_loop, PSMILe_trans_Header_length, MPI_Integer, &
       MPI_ANY_SOURCE, MPI_ANY_TAG, comm_drv_trans, il_status, id_err)
sends header to send neighbors to id_trans_rank
call psmile_trs_inform(PSMILe_trans_Set_neighbors_info, id_trans_rank, id_err)
=> CALL MPI_Send(ida_args(1), PSMILe_trans_Header_length, MPI_Integer, &
                      id_trans_rank, 0, comm_trans, id_err)
prismtrs_set_neighbors3d
psmile_trs_give_neighbors3d
il_rank receives the neighbours
CALL MPI_Recv (Drv_Epios(id_epio_id)%index_array(1,1), &
        id_epio_tgt_size*id_nb_neighcorn, MPI_Integer,      &
        id_process_global_rank, 4, comm_drv_trans,  il_status, id_err)

if source grid = gaussian reduced
CALL MPI_Recv (Drv_Epios(id_epio_id)%same_lat(1), &
            id_epio_tgt_size, MPI_Integer,                 &
            id_process_global_rank, 5, comm_drv_trans,   il_status, id_err)
sends neighbors to id_trans_rank
CALL MPI_Send(ida_neighbor_indices(1), id_nb_neighbors*id_epio_tgt_size, &
     MPI_Integer, id_trans_rank, 4, comm_trans, id_err)
prismtrs_loop psmile_trs_put_dble
il_rank receives the action to performe
CALL MPI_Recv (ila_loop, PSMILe_trans_Header_length, MPI_Integer, &
       MPI_ANY_SOURCE, MPI_ANY_TAG, comm_drv_trans, il_status, id_err)
sends the header for source field transfer
call psmile_trs_inform(PSMILe_trans_Put, id_trans_rank, id_err)
=> CALL MPI_Send(ida_args(1), PSMILe_trans_Header_length, MPI_Integer, &
                      id_trans_rank, 0, comm_trans, id_err)

prismtrs_mind_dble
psmile_trs_put_dble
il_rank receives the source field
CALL MPI_Recv (dla_trans_out, il_trans_out_size, MPI_Double_Precision, &
     id_process_global_rank, 10, comm_drv_trans, il_status, id_err)
sends the source field to id_trans_rank
call psmile_bsend(dda_field(1), id_epio_field_size, MPI_Double_Precision, &
     id_trans_rank, 10, comm_trans, id_err)
prismtrs_mind_dble psmile_global_sum_send_dble
if conservation required, il_rank receives global flux on source domain
CALL MPI_Recv (trans_out_global_sum, nbr_fields, MPI_DOUBLE_COMPLEX, &
         id_process_global_rank, CONSERVTAG, comm_drv_trans, il_status, id_err)
if conservation required, sends global flux to id_trans_rank
CALL MPI_Send(data(1), nbr_fields, MPI_DOUBLE_COMPLEX, rank, &
                 CONSERVTAG, comm_trans, ierror)

prismtrs_mind_dble psmile_trs_get_dble
if interpolated field already asked, il_rank sends it
 CALL MPI_Send(dla_trans_in(1), il_trans_in_size, MPI_Double_Precision, &
             Drv_Exchanges(il_exchange_id)%trans_in_request, 0177,     &
             comm_drv_trans, id_err)
wait to receives the interpolated field form id_trans_rank
CALL MPI_Recv(dda_field, id_epio_field_size, MPI_DOUBLE_PRECISION, &
     id_trans_rank, 0177, comm_trans, il_status, id_err)
bloquant
prismtrs_mind_dble psmile_global_sum_recv_dble
if conservation required, il_rank sends global flux on source domain
CALL MPI_Send(trans_out_global_sum, nbr_fields, MPI_Double_Complex, &
                  Drv_Exchanges(il_exchange_id)%trans_in_request, CONSERVTAG, &
                  comm_drv_trans, id_err)
receives global flux from id_trans_rank
CALL MPI_Recv(data, nbr_fields, MPI_DOUBLE_COMPLEX, rank, &
                 CONSERVTAG, comm_trans, status, ierror)
prismtrs_loop psmile_trs_get_dble
il_rank receives the action to performe
CALL MPI_Recv (ila_loop, PSMILe_trans_Header_length, MPI_Integer, &
       MPI_ANY_SOURCE, MPI_ANY_TAG, comm_drv_trans, il_status, id_err)
sends the header for target field transfer
call psmile_trs_inform(PSMILe_trans_Get, id_trans_rank, id_err)
=> CALL MPI_Send(ida_args(1), PSMILe_trans_Header_length, MPI_Integer, &
                      id_trans_rank, 0, comm_trans, id_err)

prismtrs_target_dble
psmile_trs_get_dble
if interpolated field available, il_rank sends it
call MPI_Send(Drv_Exchanges(il_exchange_id)%trans_in_field_dble(1), &
         il_size, MPI_Double_Precision,    &
         id_process_global_rank, 0177, comm_drv_trans, id_err)
receives the available interpolated field from id_trans_rank
CALL MPI_Recv(dda_field, id_epio_field_size, MPI_DOUBLE_PRECISION, &
     id_trans_rank, 0177, comm_trans, il_status, id_err)
prismtrs_target_dble psmile_global_sum_recv_dble
if global conservation required, il_rank sends global flux on source domain
call MPI_Send(Drv_Exchanges(il_exchange_id)%global_sum_dble(1), &
            id_nbr_fields, MPI_Double_Complex,    &
            id_process_global_rank, CONSERVTAG, comm_drv_trans, id_err)
receives global flux from id_trans_rank
CALL MPI_Recv(data, nbr_fields, MPI_DOUBLE_COMPLEX, rank, &
                 CONSERVTAG, comm_trans, status, ierror)