Changeset 5863
- Timestamp:
- 06/24/21 11:28:47 (3 years ago)
- Location:
- CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/dyn3dmem/gcm.F90
r5501 r5863 7 7 #endif 8 8 9 USE mod_const_mpi, ONLY: init_const_mpi 9 USE mod_const_mpi, ONLY: init_const_mpi, COMM_LMDZ_ENSEMBLE 10 10 USE parallel_lmdz 11 11 USE infotrac … … 399 399 #ifdef CPP_PHYS 400 400 CALL iniphysiq(iim,jjm,llm, & 401 distrib_phys(mpi_rank), comm_lmdz, &401 distrib_phys(mpi_rank),COMM_LMDZ_ENSEMBLE, & 402 402 daysec,day_ini,dtphys/nsplit_phys, & 403 403 rlatu,rlatv,rlonu,rlonv,aire,cu,cv,rad,g,r,cpp, & -
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/dyn3dmem/mod_const_mpi.F90
r5501 r5863 1 1 ! 2 ! $Id: mod_const_ para.F90 1279 2009-12-10 09:02:56Z fairhead$2 ! $Id: mod_const_mpi.F90 2055 2014-06-04 12:33:27Z acaubel $ 3 3 ! 4 4 MODULE mod_const_mpi … … 6 6 INTEGER,SAVE :: COMM_LMDZ 7 7 INTEGER,SAVE :: MPI_REAL_LMDZ 8 8 INTEGER,SAVE :: COMM_LMDZ_ENSEMBLE 9 9 10 10 CONTAINS … … 34 34 INTEGER :: thread_provided 35 35 CHARACTER(len = 6) :: type_ocean 36 36 37 37 38 !$OMP MASTER … … 42 43 43 44 IF (type_ocean=='couple') THEN 44 #ifdef CPP_COUPLE 45 !$OMP MASTER 46 #ifdef CPP_XIOS 47 CALL wxios_init("LMDZ", outcom=COMM_LMDZ, type_ocean=type_ocean) 48 #else 49 CALL prism_init_comp_proto (comp_id, 'LMDZ', ierr) 50 CALL prism_get_localcomm_proto(COMM_LMDZ,ierr) 51 #endif 52 !$OMP END MASTER 53 #endif 54 #ifdef CPP_MPI 55 MPI_REAL_LMDZ=MPI_REAL8 56 #endif 45 CALL init_mpi_coupling 57 46 ELSE 58 47 CALL init_mpi … … 65 54 USE wxios, only: wxios_init 66 55 #endif 56 57 #ifdef CPP_IOIPSL 58 USE IOIPSL, ONLY: getin 59 #else 60 ! if not using IOIPSL, we still need to use (a local version of) getin 61 USE ioipsl_getincom, only: getin 62 #endif 63 67 64 IMPLICIT NONE 68 65 #ifdef CPP_MPI … … 72 69 INTEGER :: thread_required 73 70 INTEGER :: thread_provided 71 INTEGER :: ensemble_pool_size 72 INTEGER :: ensemble_comm_size 73 INTEGER :: ensemble_comm_rank 74 INTEGER :: ensemble_rank 75 INTEGER :: member_size 74 76 75 77 #ifdef CPP_MPI … … 82 84 ' in mod_const_mpi::Init_const_mpi' 83 85 ENDIF 84 COMM_LMDZ =MPI_COMM_WORLD86 COMM_LMDZ_ENSEMBLE=MPI_COMM_WORLD 85 87 MPI_REAL_LMDZ=MPI_REAL8 86 88 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 88 90 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 89 91 #ifdef CPP_XIOS 90 CALL wxios_init("LMDZ", outcom=COMM_LMDZ )92 CALL wxios_init("LMDZ", outcom=COMM_LMDZ_ENSEMBLE) 91 93 #endif 92 94 !$OMP END MASTER … … 99 101 #endif 100 102 103 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 104 !! SPLIT COMMUNICATOR FOR ENSEMBLE !!! 105 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 106 ensemble_pool_size = 1 107 CALL getin("ensemble_pool_size", ensemble_pool_size) 108 109 CALL MPI_COMM_SIZE(COMM_LMDZ_ENSEMBLE,ensemble_comm_size,ierr) 110 CALL MPI_COMM_RANK(COMM_LMDZ_ENSEMBLE,ensemble_comm_rank,ierr) 111 IF (MOD(ensemble_comm_size,ensemble_pool_size)/=0) THEN 112 CALL abort_physic('Init_mpi','Nb of MPI processes in whole ensemble is not divisible by the size of ensemble',1) 113 ENDIF 114 member_size = ensemble_comm_size/ensemble_pool_size 115 ensemble_rank = ensemble_comm_rank/member_size 116 CALL MPI_COMM_SPLIT(COMM_LMDZ_ENSEMBLE, ensemble_rank, ensemble_comm_rank,COMM_LMDZ,ierr) 117 118 101 119 END SUBROUTINE Init_mpi 120 121 SUBROUTINE Init_mpi_coupling 122 #ifdef CPP_XIOS 123 USE wxios, only: wxios_init 124 #endif 125 126 #ifdef CPP_IOIPSL 127 USE IOIPSL, ONLY: getin 128 #else 129 ! if not using IOIPSL, we still need to use (a local version of) getin 130 USE ioipsl_getincom, only: getin 131 #endif 132 133 IMPLICIT NONE 134 #ifdef CPP_MPI 135 INCLUDE 'mpif.h' 136 #endif 137 INTEGER :: ierr 138 INTEGER :: thread_required 139 INTEGER :: thread_provided 140 INTEGER :: ensemble_pool_size 141 INTEGER :: ensemble_comm_size 142 INTEGER :: ensemble_comm_rank 143 INTEGER :: ensemble_rank 144 INTEGER :: member_size 145 CHARACTER(LEN=256) :: model_Id 146 CHARACTER(LEN=256) :: str_rank 147 CHARACTER(LEN=*),PARAMETER :: model_base_id="LMDZ" 148 INTEGER :: ensemble_pool_member_rank, whole_ensemble_size 149 LOGICAL :: ensemble_management 150 151 152 whole_ensemble_size = 1 153 CALL getin("whole_ensemble_size", whole_ensemble_size) 154 ensemble_management=.FALSE. 155 IF (whole_ensemble_size>1) ensemble_management = .TRUE. 156 ensemble_pool_member_rank=0 157 CALL getin("ensemble_pool_member_rank",ensemble_pool_member_rank) 158 159 !$OMP MASTER 160 #ifdef CPP_XIOS 161 IF (ensemble_management) THEN 162 WRITE(str_rank,*) ensemble_pool_member_rank 163 model_id=TRIM(model_base_id)//":"//TRIM(ADJUSTL(str_rank)) 164 CALL wxios_init(model_id, outcom=COMM_LMDZ_ENSEMBLE) 165 CALL MPI_COMM_RANK(COMM_LMDZ_ENSEMBLE,ensemble_comm_rank,ierr) 166 CALL MPI_COMM_SPLIT(COMM_LMDZ_ENSEMBLE, ensemble_pool_member_rank, ensemble_comm_rank, COMM_LMDZ, ierr) 167 ELSE 168 CALL wxios_init(model_base_id, outcom=COMM_LMDZ_ENSEMBLE) 169 COMM_LMDZ = COMM_LMDZ_ENSEMBLE 170 ENDIF 171 #else 172 CALL prism_init_comp_proto (comp_id, TRIM(model_base_id), ierr) 173 CALL prism_get_localcomm_proto(COMM_LMDZ,ierr) 174 #endif 175 !$OMP END MASTER 176 177 #ifdef CPP_MPI 178 MPI_REAL_LMDZ=MPI_REAL8 179 #endif 180 181 END SUBROUTINE Init_mpi_coupling 102 182 103 183 END MODULE mod_const_mpi -
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/misc/wxios.F90
r5501 r5863 134 134 !Enregistrement des variables globales: 135 135 g_comm = xios_comm 136 g_ctx_name = xios_ctx_name136 ! g_ctx_name = xios_ctx_name 137 137 138 138 ! ! Si couple alors init fait dans cpl_init … … 145 145 SUBROUTINE wxios_context_init() 146 146 USE print_control_mod, ONLY : prt_level, lunout 147 USE mod_phys_lmdz_ mpi_data, ONLY : COMM_LMDZ_PHY147 USE mod_phys_lmdz_ensemble, ONLY : COMM_LMDZ_PHY_ENSEMBLE 148 148 IMPLICIT NONE 149 149 … … 153 153 !Initialisation du contexte: 154 154 !!CALL xios_context_initialize(g_ctx_name, g_comm) 155 CALL xios_context_initialize(g_ctx_name, COMM_LMDZ_PHY )155 CALL xios_context_initialize(g_ctx_name, COMM_LMDZ_PHY_ENSEMBLE) 156 156 CALL xios_get_handle(g_ctx_name, xios_ctx) !Récupération 157 157 CALL xios_set_current_context(xios_ctx) !Activation … … 246 246 CALL xios_set_timestep(mdtime) 247 247 END SUBROUTINE wxios_set_timestep 248 249 250 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 251 ! Pour initialiser la dimension d'ensemble !!!!!!! 252 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 253 SUBROUTINE wxios_ensemble_param 254 USE mod_phys_lmdz_ensemble 255 IMPLICIT NONE 256 257 !$OMP MASTER 258 IF (ensemble_management) CALL xios_set_axis_attr("ensemble",n_glo=whole_ensemble_size,begin=whole_ensemble_rank, n=1) 259 !$OMP END MASTER 260 261 END SUBROUTINE wxios_ensemble_param 248 262 249 263 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phy_common/ioipsl_getin_p_mod.F90
r5501 r5863 17 17 !- 18 18 PRIVATE 19 PUBLIC :: getin_p 19 PUBLIC :: getin_p, getin 20 20 !- 21 21 INTERFACE getin_p -
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phy_common/mod_phys_lmdz_para.F90
r5501 r5863 3 3 ! 4 4 MODULE mod_phys_lmdz_para 5 USE mod_phys_lmdz_ensemble 5 6 USE mod_phys_lmdz_transfert_para 6 7 USE mod_phys_lmdz_mpi_data … … 17 18 CONTAINS 18 19 19 SUBROUTINE Init_phys_lmdz_para(nbp,nbp_lon,nbp_lat, communicator)20 SUBROUTINE Init_phys_lmdz_para(nbp,nbp_lon,nbp_lat,ensemble_communicator) 20 21 IMPLICIT NONE 21 22 INTEGER,INTENT(in) :: nbp 22 23 INTEGER,INTENT(in) :: nbp_lon 23 24 INTEGER,INTENT(in) :: nbp_lat 24 INTEGER,INTENT(in) :: communicator 25 26 CALL Init_phys_lmdz_mpi_data(nbp,nbp_lon,nbp_lat,communicator) 25 INTEGER,INTENT(in) :: ensemble_communicator 26 INTEGER :: member_communicator 27 28 CALL Init_phys_lmdz_ensemble(ensemble_communicator,member_communicator) 29 CALL Init_phys_lmdz_mpi_data(nbp,nbp_lon,nbp_lat,member_communicator) 27 30 !$OMP PARALLEL 28 31 CALL Init_phys_lmdz_omp_data(klon_mpi) -
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phylmd/iophy.F90
r5501 r5863 53 53 #endif 54 54 #ifdef CPP_XIOS 55 use wxios, ONLY: wxios_domain_param, wxios_domain_param_unstructured, wxios_context_init 55 use wxios, ONLY: wxios_domain_param, wxios_domain_param_unstructured, wxios_context_init, wxios_ensemble_param 56 56 #endif 57 57 IMPLICIT NONE … … 171 171 172 172 ENDIF 173 174 CALL wxios_ensemble_param 173 175 174 176 END SUBROUTINE init_iophy_new -
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phylmd/oasis.F90
r5501 r5863 74 74 75 75 TYPE, PUBLIC :: FLD_CPL ! Type for coupling field information 76 CHARACTER(len = 8) :: name ! Name of the coupling field76 CHARACTER(len = 64) :: name ! Name of the coupling field 77 77 LOGICAL :: action ! To be exchanged or not 78 78 INTEGER :: nid ! Id of the field … … 127 127 CHARACTER (len = 80) :: abort_message 128 128 LOGICAL, SAVE :: cpl_current_omp 129 CHARACTER(LEN=64) :: str_member 129 130 130 131 !* 1. Initializations … … 169 170 170 171 !$OMP MASTER 172 str_member="" 173 IF (ensemble_management) str_member="__"//TRIM(ADJUSTL(str_ensemble_pool_member_rank)) 174 171 175 infosend(:)%action = .FALSE. 172 176 173 infosend(ids_tauxxu)%action = .TRUE. ; infosend(ids_tauxxu)%name = 'COTAUXXU' 174 infosend(ids_tauyyu)%action = .TRUE. ; infosend(ids_tauyyu)%name = 'COTAUYYU' 175 infosend(ids_tauzzu)%action = .TRUE. ; infosend(ids_tauzzu)%name = 'COTAUZZU' 176 infosend(ids_tauxxv)%action = .TRUE. ; infosend(ids_tauxxv)%name = 'COTAUXXV' 177 infosend(ids_tauyyv)%action = .TRUE. ; infosend(ids_tauyyv)%name = 'COTAUYYV' 178 infosend(ids_tauzzv)%action = .TRUE. ; infosend(ids_tauzzv)%name = 'COTAUZZV' 179 infosend(ids_windsp)%action = .TRUE. ; infosend(ids_windsp)%name = 'COWINDSP' 180 infosend(ids_shfice)%action = .TRUE. ; infosend(ids_shfice)%name = 'COSHFICE' 181 infosend(ids_nsfice)%action = .TRUE. ; infosend(ids_nsfice)%name = 'CONSFICE' 182 infosend(ids_dflxdt)%action = .TRUE. ; infosend(ids_dflxdt)%name = 'CODFLXDT' 183 infosend(ids_calvin)%action = .TRUE. ; infosend(ids_calvin)%name = 'COCALVIN' 177 infosend(ids_tauxxu)%action = .TRUE. ; infosend(ids_tauxxu)%name = 'COTAUXXU'//TRIM(str_member) 178 infosend(ids_tauyyu)%action = .TRUE. ; infosend(ids_tauyyu)%name = 'COTAUYYU'//TRIM(str_member) 179 infosend(ids_tauzzu)%action = .TRUE. ; infosend(ids_tauzzu)%name = 'COTAUZZU'//TRIM(str_member) 180 infosend(ids_tauxxv)%action = .TRUE. ; infosend(ids_tauxxv)%name = 'COTAUXXV'//TRIM(str_member) 181 infosend(ids_tauyyv)%action = .TRUE. ; infosend(ids_tauyyv)%name = 'COTAUYYV'//TRIM(str_member) 182 infosend(ids_tauzzv)%action = .TRUE. ; infosend(ids_tauzzv)%name = 'COTAUZZV'//TRIM(str_member) 183 infosend(ids_windsp)%action = .TRUE. ; infosend(ids_windsp)%name = 'COWINDSP'//TRIM(str_member) 184 infosend(ids_shfice)%action = .TRUE. ; infosend(ids_shfice)%name = 'COSHFICE'//TRIM(str_member) 185 infosend(ids_nsfice)%action = .TRUE. ; infosend(ids_nsfice)%name = 'CONSFICE'//TRIM(str_member) 186 infosend(ids_dflxdt)%action = .TRUE. ; infosend(ids_dflxdt)%name = 'CODFLXDT'//TRIM(str_member) 187 infosend(ids_calvin)%action = .TRUE. ; infosend(ids_calvin)%name = 'COCALVIN'//TRIM(str_member) 184 188 185 189 IF (version_ocean=='nemo') THEN 186 infosend(ids_shftot)%action = .TRUE. ; infosend(ids_shftot)%name = 'COQSRMIX' 187 infosend(ids_nsftot)%action = .TRUE. ; infosend(ids_nsftot)%name = 'COQNSMIX' 188 infosend(ids_totrai)%action = .TRUE. ; infosend(ids_totrai)%name = 'COTOTRAI' 189 infosend(ids_totsno)%action = .TRUE. ; infosend(ids_totsno)%name = 'COTOTSNO' 190 infosend(ids_toteva)%action = .TRUE. ; infosend(ids_toteva)%name = 'COTOTEVA' 191 infosend(ids_icevap)%action = .TRUE. ; infosend(ids_icevap)%name = 'COICEVAP' 192 infosend(ids_liqrun)%action = .TRUE. ; infosend(ids_liqrun)%name = 'COLIQRUN' 193 infosend(ids_taumod)%action = .TRUE. ; infosend(ids_taumod)%name = 'COTAUMOD' 190 infosend(ids_shftot)%action = .TRUE. ; infosend(ids_shftot)%name = 'COQSRMIX'//TRIM(str_member) 191 infosend(ids_nsftot)%action = .TRUE. ; infosend(ids_nsftot)%name = 'COQNSMIX'//TRIM(str_member) 192 infosend(ids_totrai)%action = .TRUE. ; infosend(ids_totrai)%name = 'COTOTRAI'//TRIM(str_member) 193 infosend(ids_totsno)%action = .TRUE. ; infosend(ids_totsno)%name = 'COTOTSNO'//TRIM(str_member) 194 infosend(ids_toteva)%action = .TRUE. ; infosend(ids_toteva)%name = 'COTOTEVA'//TRIM(str_member) 195 infosend(ids_icevap)%action = .TRUE. ; infosend(ids_icevap)%name = 'COICEVAP'//TRIM(str_member) 196 infosend(ids_liqrun)%action = .TRUE. ; infosend(ids_liqrun)%name = 'COLIQRUN'//TRIM(str_member) 197 infosend(ids_taumod)%action = .TRUE. ; infosend(ids_taumod)%name = 'COTAUMOD'//TRIM(str_member) 194 198 IF (carbon_cycle_cpl) THEN 195 infosend(ids_atmco2)%action = .TRUE. ; infosend(ids_atmco2)%name = 'COATMCO2' 199 infosend(ids_atmco2)%action = .TRUE. ; infosend(ids_atmco2)%name = 'COATMCO2'//TRIM(str_member) 196 200 ENDIF 197 infosend(ids_qraioc)%action = .TRUE. ; infosend(ids_qraioc)%name = 'COQRAIOC' 198 infosend(ids_qsnooc)%action = .TRUE. ; infosend(ids_qsnooc)%name = 'COQSNOOC' 199 infosend(ids_qraiic)%action = .TRUE. ; infosend(ids_qraiic)%name = 'COQRAIIC' 200 infosend(ids_qsnoic)%action = .TRUE. ; infosend(ids_qsnoic)%name = 'COQSNOIC' 201 infosend(ids_qraioc)%action = .TRUE. ; infosend(ids_qraioc)%name = 'COQRAIOC'//TRIM(str_member) 202 infosend(ids_qsnooc)%action = .TRUE. ; infosend(ids_qsnooc)%name = 'COQSNOOC'//TRIM(str_member) 203 infosend(ids_qraiic)%action = .TRUE. ; infosend(ids_qraiic)%name = 'COQRAIIC'//TRIM(str_member) 204 infosend(ids_qsnoic)%action = .TRUE. ; infosend(ids_qsnoic)%name = 'COQSNOIC'//TRIM(str_member) 201 205 202 206 ELSE IF (version_ocean=='opa8') THEN 203 infosend(ids_shfoce)%action = .TRUE. ; infosend(ids_shfoce)%name = 'COSHFOCE' 204 infosend(ids_nsfoce)%action = .TRUE. ; infosend(ids_nsfoce)%name = 'CONSFOCE' 205 infosend(ids_icevap)%action = .TRUE. ; infosend(ids_icevap)%name = 'COTFSICE' 206 infosend(ids_ocevap)%action = .TRUE. ; infosend(ids_ocevap)%name = 'COTFSOCE' 207 infosend(ids_totrai)%action = .TRUE. ; infosend(ids_totrai)%name = 'COTOLPSU' 208 infosend(ids_totsno)%action = .TRUE. ; infosend(ids_totsno)%name = 'COTOSPSU' 209 infosend(ids_runcoa)%action = .TRUE. ; infosend(ids_runcoa)%name = 'CORUNCOA' 210 infosend(ids_rivflu)%action = .TRUE. ; infosend(ids_rivflu)%name = 'CORIVFLU' 207 infosend(ids_shfoce)%action = .TRUE. ; infosend(ids_shfoce)%name = 'COSHFOCE'//TRIM(str_member) 208 infosend(ids_nsfoce)%action = .TRUE. ; infosend(ids_nsfoce)%name = 'CONSFOCE'//TRIM(str_member) 209 infosend(ids_icevap)%action = .TRUE. ; infosend(ids_icevap)%name = 'COTFSICE'//TRIM(str_member) 210 infosend(ids_ocevap)%action = .TRUE. ; infosend(ids_ocevap)%name = 'COTFSOCE'//TRIM(str_member) 211 infosend(ids_totrai)%action = .TRUE. ; infosend(ids_totrai)%name = 'COTOLPSU'//TRIM(str_member) 212 infosend(ids_totsno)%action = .TRUE. ; infosend(ids_totsno)%name = 'COTOSPSU'//TRIM(str_member) 213 infosend(ids_runcoa)%action = .TRUE. ; infosend(ids_runcoa)%name = 'CORUNCOA'//TRIM(str_member) 214 infosend(ids_rivflu)%action = .TRUE. ; infosend(ids_rivflu)%name = 'CORIVFLU'//TRIM(str_member) 211 215 ENDIF 212 216 … … 215 219 inforecv(:)%action = .FALSE. 216 220 217 inforecv(idr_sisutw)%action = .TRUE. ; inforecv(idr_sisutw)%name = 'SISUTESW' 218 inforecv(idr_icecov)%action = .TRUE. ; inforecv(idr_icecov)%name = 'SIICECOV' 219 inforecv(idr_icealw)%action = .TRUE. ; inforecv(idr_icealw)%name = 'SIICEALW' 220 inforecv(idr_icetem)%action = .TRUE. ; inforecv(idr_icetem)%name = 'SIICTEMW' 221 inforecv(idr_sisutw)%action = .TRUE. ; inforecv(idr_sisutw)%name = 'SISUTESW'//TRIM(str_member) 222 inforecv(idr_icecov)%action = .TRUE. ; inforecv(idr_icecov)%name = 'SIICECOV'//TRIM(str_member) 223 inforecv(idr_icealw)%action = .TRUE. ; inforecv(idr_icealw)%name = 'SIICEALW'//TRIM(str_member) 224 inforecv(idr_icetem)%action = .TRUE. ; inforecv(idr_icetem)%name = 'SIICTEMW'//TRIM(str_member) 221 225 222 226 IF (cpl_current ) THEN 223 inforecv(idr_curenx)%action = .TRUE. ; inforecv(idr_curenx)%name = 'CURRENTX' 224 inforecv(idr_cureny)%action = .TRUE. ; inforecv(idr_cureny)%name = 'CURRENTY' 225 inforecv(idr_curenz)%action = .TRUE. ; inforecv(idr_curenz)%name = 'CURRENTZ' 227 inforecv(idr_curenx)%action = .TRUE. ; inforecv(idr_curenx)%name = 'CURRENTX'//TRIM(str_member) 228 inforecv(idr_cureny)%action = .TRUE. ; inforecv(idr_cureny)%name = 'CURRENTY'//TRIM(str_member) 229 inforecv(idr_curenz)%action = .TRUE. ; inforecv(idr_curenz)%name = 'CURRENTZ'//TRIM(str_member) 226 230 ENDIF 227 231 228 232 IF (carbon_cycle_cpl ) THEN 229 inforecv(idr_oceco2)%action = .TRUE. ; inforecv(idr_oceco2)%name = 'SICO2FLX' 233 inforecv(idr_oceco2)%action = .TRUE. ; inforecv(idr_oceco2)%name = 'SICO2FLX'//TRIM(str_member) 230 234 ENDIF 231 235 -
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phylmd/surf_land_orchidee_mod.F90
r5501 r5863 212 212 INTEGER, SAVE :: orch_comm 213 213 !$OMP THREADPRIVATE(orch_comm) 214 INTEGER, SAVE :: orch_comm_ensemble 215 !$OMP THREADPRIVATE(orch_comm_ensemble) 214 216 215 217 REAL, ALLOCATABLE, DIMENSION(:), SAVE :: coastalflow … … 501 503 IF (debut) THEN 502 504 CALL Init_orchidee_index(knon,knindex,offset,ktindex) 503 CALL Get_orchidee_communicator(orch_comm ,orch_mpi_size,orch_mpi_rank, orch_omp_size,orch_omp_rank)505 CALL Get_orchidee_communicator(orch_comm_ensemble, orch_comm,orch_mpi_size,orch_mpi_rank, orch_omp_size,orch_omp_rank) 504 506 505 507 IF (grid_type==unstructured) THEN … … 550 552 IF (knon > 0) THEN 551 553 #ifdef CPP_VEGET 552 CALL Init_intersurf(nbp_lon,nbp_lat,knon,ktindex,offset,orch_omp_size,orch_omp_rank, orch_comm,grid=grid_type)554 CALL Init_intersurf(nbp_lon,nbp_lat,knon,ktindex,offset,orch_omp_size,orch_omp_rank, orch_comm_ensemble, grid=grid_type) 553 555 #endif 554 556 ENDIF … … 691 693 ! 692 694 693 SUBROUTINE Get_orchidee_communicator(orch_comm , orch_mpi_size, orch_mpi_rank, orch_omp_size,orch_omp_rank)695 SUBROUTINE Get_orchidee_communicator(orch_comm_ensemble, orch_comm, orch_mpi_size, orch_mpi_rank, orch_omp_size,orch_omp_rank) 694 696 USE mod_surf_para 695 697 … … 698 700 #endif 699 701 702 INTEGER,INTENT(OUT) :: orch_comm_ensemble 700 703 INTEGER,INTENT(OUT) :: orch_comm 701 704 INTEGER,INTENT(OUT) :: orch_mpi_size … … 705 708 INTEGER :: color 706 709 INTEGER :: i,ierr 710 INTEGER :: ensemble_com_rank 711 INTEGER :: ensemble_com_size 707 712 ! 708 713 ! End definition … … 717 722 ENDIF 718 723 719 #ifdef CPP_MPI 724 #ifdef CPP_MPI 725 CALL MPI_COMM_RANK(COMM_LMDZ_PHY_ENSEMBLE,ensemble_com_rank,ierr) 726 CALL MPI_COMM_SIZE(COMM_LMDZ_PHY_ENSEMBLE,ensemble_com_size,ierr) 727 PRINT*,"Get_orchidee_communicator before split ",ensemble_com_size, ensemble_com_rank 728 CALL MPI_COMM_SPLIT(COMM_LMDZ_PHY_ENSEMBLE,color,ensemble_com_rank,orch_comm_ensemble,ierr) 729 CALL MPI_COMM_RANK(orch_comm_ensemble,ensemble_com_rank,ierr) 730 CALL MPI_COMM_SIZE(orch_comm_ensemble,ensemble_com_size,ierr) 731 PRINT*,"Get_orchidee_communicator after split ",ensemble_com_size, ensemble_com_rank 720 732 CALL MPI_COMM_SPLIT(COMM_LMDZ_PHY,color,mpi_rank,orch_comm,ierr) 721 733 CALL MPI_COMM_SIZE(orch_comm,orch_mpi_size,ierr) … … 724 736 725 737 ENDIF 738 CALL bcast_omp(orch_comm_ensemble) 726 739 CALL bcast_omp(orch_comm) 727 740
Note: See TracChangeset
for help on using the changeset viewer.