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) |