Changeset 5863


Ignore:
Timestamp:
06/24/21 11:28:47 (3 years ago)
Author:
ymipsl
Message:

Adapt LMDZ sources for ensemble management.
YM

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  
    77#endif 
    88 
    9   USE mod_const_mpi, ONLY: init_const_mpi 
     9  USE mod_const_mpi, ONLY: init_const_mpi, COMM_LMDZ_ENSEMBLE 
    1010  USE parallel_lmdz 
    1111  USE infotrac 
     
    399399#ifdef CPP_PHYS 
    400400     CALL iniphysiq(iim,jjm,llm, & 
    401           distrib_phys(mpi_rank),comm_lmdz, & 
     401          distrib_phys(mpi_rank),COMM_LMDZ_ENSEMBLE, & 
    402402          daysec,day_ini,dtphys/nsplit_phys, & 
    403403          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  
    11!  
    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 $ 
    33! 
    44MODULE mod_const_mpi 
     
    66  INTEGER,SAVE :: COMM_LMDZ 
    77  INTEGER,SAVE :: MPI_REAL_LMDZ 
    8   
     8  INTEGER,SAVE :: COMM_LMDZ_ENSEMBLE 
    99 
    1010CONTAINS  
     
    3434    INTEGER             :: thread_provided 
    3535    CHARACTER(len = 6)  :: type_ocean 
     36     
    3637 
    3738!$OMP MASTER 
     
    4243 
    4344    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 
    5746    ELSE 
    5847      CALL init_mpi 
     
    6554    USE wxios, only: wxios_init 
    6655#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 
    6764  IMPLICIT NONE 
    6865#ifdef CPP_MPI 
     
    7269    INTEGER             :: thread_required 
    7370    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 
    7476 
    7577#ifdef CPP_MPI 
     
    8284                ' in mod_const_mpi::Init_const_mpi' 
    8385      ENDIF 
    84       COMM_LMDZ=MPI_COMM_WORLD 
     86      COMM_LMDZ_ENSEMBLE=MPI_COMM_WORLD 
    8587      MPI_REAL_LMDZ=MPI_REAL8 
    8688!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     
    8890!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    8991#ifdef CPP_XIOS 
    90       CALL wxios_init("LMDZ", outcom=COMM_LMDZ) 
     92      CALL wxios_init("LMDZ", outcom=COMM_LMDZ_ENSEMBLE) 
    9193#endif 
    9294!$OMP END MASTER 
     
    99101#endif 
    100102 
     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      
    101119   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 
    102182     
    103183END MODULE mod_const_mpi 
  • CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/misc/wxios.F90

    r5501 r5863  
    134134        !Enregistrement des variables globales: 
    135135        g_comm = xios_comm 
    136         g_ctx_name = xios_ctx_name 
     136!        g_ctx_name = xios_ctx_name 
    137137         
    138138!        ! Si couple alors init fait dans cpl_init 
     
    145145    SUBROUTINE wxios_context_init() 
    146146        USE print_control_mod, ONLY : prt_level, lunout 
    147         USE mod_phys_lmdz_mpi_data, ONLY : COMM_LMDZ_PHY 
     147        USE mod_phys_lmdz_ensemble, ONLY : COMM_LMDZ_PHY_ENSEMBLE 
    148148        IMPLICIT NONE 
    149149 
     
    153153        !Initialisation du contexte: 
    154154        !!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) 
    156156        CALL xios_get_handle(g_ctx_name, xios_ctx)    !Récupération 
    157157        CALL xios_set_current_context(xios_ctx)            !Activation 
     
    246246        CALL xios_set_timestep(mdtime) 
    247247    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 
    248262 
    249263    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
  • CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phy_common/ioipsl_getin_p_mod.F90

    r5501 r5863  
    1717!- 
    1818PRIVATE 
    19 PUBLIC :: getin_p 
     19PUBLIC :: getin_p, getin 
    2020!- 
    2121INTERFACE getin_p 
  • CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phy_common/mod_phys_lmdz_para.F90

    r5501 r5863  
    33! 
    44MODULE mod_phys_lmdz_para 
     5  USE mod_phys_lmdz_ensemble 
    56  USE mod_phys_lmdz_transfert_para 
    67  USE mod_phys_lmdz_mpi_data 
     
    1718CONTAINS 
    1819 
    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) 
    2021  IMPLICIT NONE 
    2122    INTEGER,INTENT(in) :: nbp 
    2223    INTEGER,INTENT(in) :: nbp_lon 
    2324    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) 
    2730!$OMP PARALLEL 
    2831    CALL Init_phys_lmdz_omp_data(klon_mpi) 
  • CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phylmd/iophy.F90

    r5501 r5863  
    5353#endif 
    5454#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 
    5656#endif 
    5757    IMPLICIT NONE 
     
    171171       
    172172    ENDIF 
     173      
     174    CALL wxios_ensemble_param 
    173175       
    174176  END SUBROUTINE init_iophy_new 
  • CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phylmd/oasis.F90

    r5501 r5863  
    7474 
    7575  TYPE, PUBLIC ::   FLD_CPL            ! Type for coupling field information 
    76      CHARACTER(len = 8) ::   name      ! Name of the coupling field    
     76     CHARACTER(len = 64) ::   name      ! Name of the coupling field    
    7777     LOGICAL            ::   action    ! To be exchanged or not 
    7878     INTEGER            ::   nid       ! Id of the field 
     
    127127    CHARACTER (len = 80)               :: abort_message  
    128128    LOGICAL, SAVE                      :: cpl_current_omp 
     129    CHARACTER(LEN=64)                  :: str_member 
    129130 
    130131!*    1. Initializations 
     
    169170 
    170171!$OMP MASTER 
     172    str_member="" 
     173    IF (ensemble_management) str_member="__"//TRIM(ADJUSTL(str_ensemble_pool_member_rank)) 
     174     
    171175    infosend(:)%action = .FALSE. 
    172176 
    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) 
    184188     
    185189    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) 
    194198        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) 
    196200        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) 
    201205         
    202206    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) 
    211215   ENDIF 
    212216         
     
    215219   inforecv(:)%action = .FALSE. 
    216220 
    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) 
    221225    
    222226   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) 
    226230   ENDIF 
    227231 
    228232   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) 
    230234   ENDIF 
    231235 
  • CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/LMDZ/libf/phylmd/surf_land_orchidee_mod.F90

    r5501 r5863  
    212212    INTEGER, SAVE                             :: orch_comm 
    213213    !$OMP THREADPRIVATE(orch_comm) 
     214    INTEGER, SAVE                             :: orch_comm_ensemble 
     215    !$OMP THREADPRIVATE(orch_comm_ensemble) 
    214216 
    215217    REAL, ALLOCATABLE, DIMENSION(:), SAVE     :: coastalflow 
     
    501503    IF (debut) THEN 
    502504       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) 
    504506 
    505507       IF (grid_type==unstructured) THEN 
     
    550552       IF (knon > 0) THEN 
    551553#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) 
    553555#endif 
    554556       ENDIF 
     
    691693!  
    692694 
    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) 
    694696  USE  mod_surf_para 
    695697       
     
    698700#endif     
    699701 
     702    INTEGER,INTENT(OUT) :: orch_comm_ensemble 
    700703    INTEGER,INTENT(OUT) :: orch_comm 
    701704    INTEGER,INTENT(OUT) :: orch_mpi_size 
     
    705708    INTEGER             :: color 
    706709    INTEGER             :: i,ierr 
     710    INTEGER             :: ensemble_com_rank 
     711    INTEGER             :: ensemble_com_size 
    707712! 
    708713! End definition 
     
    717722      ENDIF 
    718723     
    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 
    720732      CALL MPI_COMM_SPLIT(COMM_LMDZ_PHY,color,mpi_rank,orch_comm,ierr) 
    721733      CALL MPI_COMM_SIZE(orch_comm,orch_mpi_size,ierr) 
     
    724736     
    725737    ENDIF 
     738    CALL bcast_omp(orch_comm_ensemble) 
    726739    CALL bcast_omp(orch_comm) 
    727740     
Note: See TracChangeset for help on using the changeset viewer.