00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 subroutine psmile_trs_set_src_epio3d_dble(id_epio_id, &
00011 id_trans_rank, &
00012 id_epio_size, &
00013 id_lonlatz_size, &
00014 dda_epio_lon, &
00015 dda_epio_lat, &
00016 dda_epio_z, &
00017 id_mask_transfer, &
00018 ida_epio_mask, &
00019 id_err)
00020
00021
00022
00023
00024 use PRISM_constants
00025 USE PSMILe, dummy_interface => PSMILe_Trs_set_src_epio3d_dble
00026
00027 IMPLICIT NONE
00028
00029
00030
00031 INTEGER, INTENT (In) :: id_lonlatz_size
00032 INTEGER, INTENT (In) :: id_epio_size
00033
00034 DOUBLE PRECISION, DIMENSION(id_lonlatz_size), INTENT(In) :: dda_epio_lat
00035
00036 DOUBLE PRECISION, DIMENSION(id_lonlatz_size), INTENT(In) :: dda_epio_lon
00037
00038 DOUBLE PRECISION, DIMENSION(id_lonlatz_size), INTENT(In) :: dda_epio_z
00039 INTEGER, INTENT (In) :: id_mask_transfer
00040 INTEGER, DIMENSION(id_epio_size), INTENT (In) :: ida_epio_mask
00041
00042
00043
00044
00045 INTEGER, INTENT (Out) :: id_epio_id
00046 INTEGER, INTENT (Out) :: id_trans_rank
00047 INTEGER, INTENT (Out) :: id_err
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 CHARACTER(LEN=len_cvs_string), SAVE :: mycvs =
00070 '$Id: psmile_trs_set_src_epio3d_dble.F90 2325 2010-04-21 15:00:07Z valcke $'
00071
00072
00073 INTEGER, DIMENSION(PSMILe_trans_Header_length) :: ila_args
00074 INTEGER :: il_status(MPI_STATUS_SIZE)
00075
00076
00077
00078 #ifdef VERBOSE
00079 print *, trim(ch_id), ': PSMILe_Trs_set_src_epio3d_dble: start'
00080 call psmile_flushstd
00081 #endif /* VERBOSE */
00082
00083 #ifdef DEBUG
00084 print *, trim(ch_id), ': - id_epio_size ', id_epio_size
00085 print *, trim(ch_id), ': - id_lonlatz_size ', id_lonlatz_size
00086 #endif
00087
00088
00089
00090 ila_args = 999999
00091
00092
00093
00094 ila_args(1) = PSMILe_trans_Set_rank_trans
00095 ila_args(2) = global_rank
00096 ila_args(4) = Appl%sequence_number
00097 ila_args(5) = Appl%rank
00098
00099
00100
00101 call psmile_trs_inform(ila_args, PRISMdrv_root, id_err)
00102
00103
00104
00105 CALL MPI_Recv (id_trans_rank, 1, MPI_Integer, &
00106 PRISMdrv_root, 5, comm_trans, il_status, id_err)
00107
00108
00109
00110 ila_args(1) = PSMILe_trans_Set_epio_trans
00111
00112 call psmile_trs_inform(ila_args, id_trans_rank, id_err)
00113
00114
00115
00116 CALL MPI_Recv (id_epio_id, 1, MPI_Integer, &
00117 id_trans_rank, 6, comm_trans, il_status, id_err)
00118
00119
00120
00121
00122
00123 ila_args = 999999
00124
00125
00126
00127 ila_args(1) = PSMILe_trans_Set_src_epio_info
00128 ila_args(2) = global_rank
00129 ila_args(3) = PRISM_DOUBLE_PRECISION
00130 ila_args(4) = Appl%sequence_number
00131 ila_args(5) = Appl%rank
00132 ila_args(6) = id_epio_id
00133 ila_args(7) = id_epio_size
00134
00135
00136 ila_args(8) = id_lonlatz_size
00137 ila_args(9) = PSMILe_3D
00138 ila_args(10) = id_mask_transfer
00139
00140
00141
00142 call psmile_trs_inform(ila_args, id_trans_rank, id_err)
00143
00144
00145
00146
00147 CALL MPI_Send(dda_epio_lat(1), id_lonlatz_size, &
00148 MPI_Double_precision, id_trans_rank, 1, comm_trans, id_err)
00149
00150
00151 CALL MPI_Send(dda_epio_lon(1), id_lonlatz_size, &
00152 MPI_Double_precision, id_trans_rank, 2, comm_trans, id_err)
00153
00154
00155 CALL MPI_Send(dda_epio_z(1), id_lonlatz_size, &
00156 MPI_Double_precision, id_trans_rank, 3, comm_trans, id_err)
00157
00158
00159 IF (id_mask_transfer == 1) THEN
00160 CALL MPI_Send(ida_epio_mask(1), id_epio_size, MPI_Integer, &
00161 id_trans_rank, 4, comm_trans, id_err)
00162 END IF
00163
00164
00165 #ifdef VERBOSE
00166 print *, trim(ch_id), &
00167 ': PSMILe_Trs_set_src_epio3d_dble: eof ierror =', id_err
00168 call psmile_flushstd
00169 #endif /* VERBOSE */
00170
00171 END SUBROUTINE PSMILe_Trs_set_src_epio3d_dble