Ignore:
Timestamp:
Apr 22, 2016, 9:02:11 AM (9 years ago)
Author:
emillour
Message:

All models: Further adaptations to keep up with changes in LMDZ5 concerning
physics/dynamics separation:

  • dyn3d:
  • adapted gcm.F so that all physics initializations are now done in iniphysiq.
  • dyn3dpar:
  • adapted gcm.F so that all physics initializations are now done in iniphysiq.
  • updated calfis_p.F to follow up with changes.
  • copied over updated "bands.F90" from LMDZ5.
  • dynphy_lonlat:
  • calfis_p.F90, mod_interface_dyn_phys.F90, follow up of changes in phy_common/mod_* routines
  • phy_common:
  • added "geometry_mod.F90" to store information about the grid (replaces phy*/comgeomphy.F90) and give variables friendlier names: rlond => longitude , rlatd => latitude, airephy => cell_area, cuphy => dx , cvphy => dy
  • added "physics_distribution_mod.F90"
  • updated "mod_grid_phy_lmdz.F90", "mod_phys_lmdz_mpi_data.F90", "mod_phys_lmdz_para.F90", "mod_phys_lmdz_mpi_transfert.F90", "mod_grid_phy_lmdz.F90", "mod_phys_lmdz_omp_data.F90", "mod_phys_lmdz_omp_transfert.F90", "write_field_phy.F90" and "ioipsl_getin_p_mod.F90" to LMDZ5 versions.
  • phy[venus/titan/mars/std]:
  • removed "init_phys_lmdz.F90", "comgeomphy.F90"; adapted routines to use geometry_mod (longitude, latitude, cell_area, etc.)

EM

Location:
trunk/LMDZ.COMMON/libf
Files:
2 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/dyn3d/gcm.F90

    r1523 r1543  
    2525                             ok_dyn_ins,ok_dyn_ave,iecri,periodav,  &
    2626                             less1day,fractday,ndynstep,nsplit_phys
     27  USE mod_const_mpi, ONLY: COMM_LMDZ
    2728  use cpdet_mod, only: ini_cpdet
    2829  USE temps_mod, ONLY: calend,start_time,annee_ref,day_ref, &
    2930                itau_dyn,itau_phy,day_ini,jD_ref,jH_ref,day_end
    3031
    31 #ifdef INCA
    32 ! Only INCA needs these informations (from the Earth's physics)
    33   USE indice_sol_mod
    34   USE mod_phys_lmdz_para, ONLY : klon_mpi_para_nb
    35 #endif
    3632
    3733!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    184180! A nettoyer. On ne veut qu'une ou deux routines d'interface
    185181! dynamique -> physique pour l'initialisation
    186 #ifdef CPP_PHYS
    187   CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
    188 !      call initcomgeomphy ! now done in iniphysiq
    189 #endif
     182!#ifdef CPP_PHYS
     183!  CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
     184!!      call initcomgeomphy ! now done in iniphysiq
     185!#endif
    190186!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    191187!
     
    225221#endif
    226222!-----------------------------------------------------------------------
    227 
    228   IF (type_trac == 'inca') THEN
    229 #ifdef INCA
    230     call init_const_lmdz(nbtr,anneeref,dayref,iphysiq,day_step,nday, &
    231          nbsrf, is_oce,is_sic,is_ter,is_lic)
    232     call init_inca_para(iim,jjm+1,klon,1,klon_mpi_para_nb,0)
    233 #endif
    234   END IF
    235223  !
    236224  !
     
    281269
    282270  endif ! of if (read_start)
    283 
    284   IF (type_trac == 'inca') THEN
    285 #ifdef INCA
    286      call init_inca_dim(klon,llm,iim,jjm, &
    287           rlonu,rlatu,rlonv,rlatv)
    288 #endif
    289   END IF
    290271
    291272
     
    445426     ! Physics:
    446427#ifdef CPP_PHYS
    447          CALL iniphysiq(iim,jjm,llm,daysec,day_ini,dtphys/nsplit_phys, &
    448                       rlatu,rlatv,rlonu,rlonv,aire,cu,cv,rad,g,r,cpp, &
    449                       iflag_phys)
     428     CALL iniphysiq(iim,jjm,llm, &
     429          (jjm-1)*iim+2,comm_lmdz, &
     430          daysec,day_ini,dtphys/nsplit_phys, &
     431          rlatu,rlatv,rlonu,rlonv,aire,cu,cv,rad,g,r,cpp, &
     432          iflag_phys)
    450433#endif
    451434  ENDIF ! of IF ((iflag_phys==1).or.(iflag_phys>=100))
  • trunk/LMDZ.COMMON/libf/dyn3dpar/bands.F90

    r1019 r1543  
    11!
    2 ! $Id: bands.F90 1615 2012-02-10 15:42:26Z emillour $
     2! $Id: bands.F90 2351 2015-08-25 15:14:59Z emillour $
    33!
    44  module Bands
     
    1919 
    2020  subroutine AllocateBands
    21     use parallel_lmdz
     21    USE parallel_lmdz
    2222    implicit none
    2323   
     
    3333 
    3434  subroutine Read_distrib
    35     use parallel_lmdz
     35    USE parallel_lmdz
    3636    implicit none
    3737
     
    9393   SUBROUTINE  Set_Bands
    9494     USE parallel_lmdz
    95 #ifdef CPP_PHYS
    96 ! Ehouarn: what follows is only related to // physics
    97      USE mod_phys_lmdz_para, ONLY : jj_para_begin,jj_para_end
    98 #endif
    9995     IMPLICIT NONE
    10096     INCLUDE 'dimensions.h'   
    101      INTEGER :: i
    102        
     97     INTEGER :: i, ij
     98     INTEGER :: jj_para_begin(0:mpi_size-1)
     99     INTEGER :: jj_para_end(0:mpi_size-1)
     100       
    103101      do i=0,mpi_size-1
    104102         jj_nb_vanleer2(i)=(jjm+1)/mpi_size
     
    106104      enddo
    107105         
    108 #ifdef CPP_PHYS
     106      jj_para_begin(0)=1
     107      ij=distrib_phys(0)+iim-1
     108      jj_para_end(0)=((ij-1)/iim)+1
     109     
     110      DO i=1,mpi_Size-1
     111        ij=ij+1
     112        jj_para_begin(i)=((ij-1)/iim)+1
     113        ij=ij+distrib_phys(i)-1
     114        jj_para_end(i)=((ij-1)/iim)+1
     115      ENDDO
     116 
    109117      do i=0,MPI_Size-1
    110118        jj_Nb_physic(i)=jj_para_end(i)-jj_para_begin(i)+1
     
    127135        endif
    128136      enddo
    129 #endif     
    130137     
    131138    end subroutine Set_Bands
     
    134141    subroutine AdjustBands_caldyn
    135142      use times
    136       use parallel_lmdz
     143      USE parallel_lmdz
    137144      implicit none
    138145
     
    199206    subroutine AdjustBands_vanleer
    200207      use times
    201       use parallel_lmdz
     208      USE parallel_lmdz
    202209      implicit none
    203210
     
    265272    subroutine AdjustBands_dissip
    266273      use times
    267       use parallel_lmdz
     274      USE parallel_lmdz
    268275      implicit none
    269276
  • trunk/LMDZ.COMMON/libf/dyn3dpar/gcm.F

    r1523 r1543  
    1414      USE parallel_lmdz
    1515      USE infotrac
    16 #ifdef CPP_PHYS
    17       USE mod_interface_dyn_phys
    18 #endif
     16!#ifdef CPP_PHYS
     17!      USE mod_interface_dyn_phys
     18!#endif
    1919      USE mod_hallo
    2020      USE Bands
     
    4040      USE mod_phys_lmdz_omp_data, ONLY: klon_omp
    4141      USE dimphy
    42       USE comgeomphy
    4342#endif
    4443      USE comconst_mod, ONLY: daysec,dtvr,dtphys,rad,g,r,cpp
     
    196195      call Read_Distrib
    197196
    198 #ifdef CPP_PHYS
    199         CALL init_phys_lmdz(iim,jjp1,llm,mpi_size,distrib_phys)
     197!#ifdef CPP_PHYS
     198!        CALL init_phys_lmdz(iim,jjp1,llm,mpi_size,distrib_phys)
    200199!#endif
    201200!      CALL set_bands
    202201!#ifdef CPP_PHYS
    203       CALL Init_interface_dyn_phys
    204 #endif
     202!      CALL Init_interface_dyn_phys
     203!#endif
    205204      CALL barrier
    206205
     
    497496!     &                latfi,lonfi,airefi,zcufi,zcvfi,rad,g,r,cpp,
    498497!     &                iflag_phys)
    499          CALL iniphysiq(iim,jjm,llm,daysec,day_ini,dtphys/nsplit_phys,
     498         CALL iniphysiq(iim,jjm,llm,
     499     &                distrib_phys(mpi_rank),comm_lmdz,
     500     &                daysec,day_ini,dtphys/nsplit_phys,
    500501     &                rlatu,rlatv,rlonu,rlonv,aire,cu,cv,rad,g,r,cpp,
    501502     &                iflag_phys)
  • trunk/LMDZ.COMMON/libf/dynphy_lonlat/calfis_p.F

    r1459 r1543  
    2929! Ehouarn: if using (parallelized) physics
    3030      USE dimphy
    31       USE mod_phys_lmdz_para, mpi_root_xx=>mpi_root
     31      USE mod_phys_lmdz_mpi_data, mpi_root_xx=>mpi_master
     32      USE mod_phys_lmdz_omp_data, ONLY: klon_omp, klon_omp_begin
     33      USE mod_const_mpi, ONLY: COMM_LMDZ
    3234      USE mod_interface_dyn_phys
    3335!      USE IOPHY
  • trunk/LMDZ.COMMON/libf/dynphy_lonlat/mod_interface_dyn_phys.F90

    r1403 r1543  
    11!
    2 ! $Id: mod_interface_dyn_phys.F90 1615 2012-02-10 15:42:26Z emillour $
     2! $Id: mod_interface_dyn_phys.F90 2351 2015-08-25 15:14:59Z emillour $
    33!
    44MODULE mod_interface_dyn_phys
     
    77 
    88 
    9 #ifdef CPP_PHYS
    10 ! Interface with parallel physics,
    119CONTAINS
    1210 
     11#ifdef CPP_PARA
     12! Interface with parallel physics,
    1313  SUBROUTINE Init_interface_dyn_phys
    14     USE mod_phys_lmdz_mpi_data, ONLY: klon_mpi, is_north_pole, is_south_pole, &
    15                                       ii_begin, jj_begin, ii_end, jj_end
     14    USE mod_phys_lmdz_mpi_data
    1615    IMPLICIT NONE
    1716    include 'dimensions.h'   
     
    5554 
    5655  END SUBROUTINE Init_interface_dyn_phys
     56#else
     57  SUBROUTINE Init_interface_dyn_phys
     58  ! dummy routine for seq case
     59  END SUBROUTINE Init_interface_dyn_phys
    5760#endif
    58 ! of #ifdef CPP_PHYS
     61! of #ifdef CPP_PARA
    5962END MODULE mod_interface_dyn_phys
  • trunk/LMDZ.COMMON/libf/dynphy_lonlat/phytitan/iniphysiq_mod.F90

    r1525 r1543  
    66CONTAINS
    77
    8 SUBROUTINE iniphysiq(iim,jjm,nlayer,punjours, pdayref,ptimestep,         &
    9                      rlatu,rlatv,rlonu,rlonv,aire,cu,cv,                 &
     8SUBROUTINE iniphysiq(iim,jjm,nlayer, &
     9                     nbp, communicator, &
     10                     punjours, pdayref,ptimestep, &
     11                     rlatu,rlatv,rlonu,rlonv,aire,cu,cv, &
    1012                     prad,pg,pr,pcpp,iflag_phys)
    11   USE dimphy, ONLY: klev ! number of atmospheric levels
    12   USE mod_grid_phy_lmdz, ONLY: klon_glo ! number of atmospheric columns
    13                                         ! (on full grid)
     13  USE dimphy, ONLY: init_dimphy
     14  USE mod_grid_phy_lmdz, ONLY: klon_glo,  & ! number of atmospheric columns (on full grid)
     15                               regular_lonlat, &  ! regular longitude-latitude grid type
     16                               nbp_lon, nbp_lat, nbp_lev
    1417  USE mod_phys_lmdz_para, ONLY: klon_omp, & ! number of columns (on local omp grid)
    1518                                klon_omp_begin, & ! start index of local omp subgrid
     
    1720                                klon_mpi_begin ! start indes of columns (on local mpi grid)
    1821  USE control_mod, ONLY: nday
    19   USE comgeomphy, ONLY: initcomgeomphy, &
    20                         airephy, & ! physics grid area (m2)
    21                         cuphy, & ! cu coeff. (u_covariant = cu * u)
    22                         cvphy, & ! cv coeff. (v_covariant = cv * v)
    23                         rlond, & ! longitudes
    24                         rlatd ! latitudes
     22  USE geometry_mod, ONLY : init_geometry
     23!  USE comgeomphy, ONLY: initcomgeomphy, &
     24!                        airephy, & ! physics grid area (m2)
     25!                        cuphy, & ! cu coeff. (u_covariant = cu * u)
     26!                        cvphy, & ! cv coeff. (v_covariant = cv * v)
     27!                        rlond, & ! longitudes
     28!                        rlatd ! latitudes
    2529  USE temps_mod, ONLY: annee_ref, day_ref, day_ini, day_end
    2630  USE time_phylmdz_mod, ONLY: init_time
     31  USE physics_distribution_mod, ONLY : init_physics_distribution
    2732  USE regular_lonlat_mod, ONLY : init_regular_lonlat, &
    2833                                 east, west, north, south, &
    2934                                 north_east, north_west, &
    3035                                 south_west, south_east
     36  USE mod_interface_dyn_phys, ONLY :  init_interface_dyn_phys
    3137  USE nrtype, ONLY: pi
    3238  IMPLICIT NONE
     
    4854  INTEGER, INTENT (IN) :: iim ! number of atmospheric columns along longitudes
    4955  INTEGER, INTENT (IN) :: jjm ! number of atompsheric columns along latitudes
     56  INTEGER, INTENT(IN) :: nbp ! number of physics columns for this MPI process
     57  INTEGER, INTENT(IN) :: communicator ! MPI communicator
    5058  REAL, INTENT (IN) :: rlatu(jjm+1) ! latitudes of the physics grid
    5159  REAL, INTENT (IN) :: rlatv(jjm) ! latitude boundaries of the physics grid
     
    6068
    6169  INTEGER :: ibegin, iend, offset
    62   INTEGER :: i,j
     70  INTEGER :: i,j,k
    6371  CHARACTER (LEN=20) :: modname = 'iniphysiq'
    6472  CHARACTER (LEN=80) :: abort_message
     
    7078
    7179  ! global array, on full physics grid:
    72   REAL,ALLOCATABLE :: latfi(:)
    73   REAL,ALLOCATABLE :: lonfi(:)
    74   REAL,ALLOCATABLE :: cufi(:)
    75   REAL,ALLOCATABLE :: cvfi(:)
    76   REAL,ALLOCATABLE :: airefi(:)
    77 
    78   IF (nlayer/=klev) THEN
    79     WRITE (lunout, *) 'STOP in ', trim(modname)
    80     WRITE (lunout, *) 'Problem with dimensions :'
    81     WRITE (lunout, *) 'nlayer     = ', nlayer
    82     WRITE (lunout, *) 'klev   = ', klev
    83     abort_message = ''
    84     CALL abort_gcm(modname, 'Problem with dimensions', 1)
    85   END IF
    86 
    87   !call init_phys_lmdz(iim,jjm+1,llm,1,(/(jjm-1)*iim+2/))
     80  REAL,ALLOCATABLE :: latfi_glo(:)
     81  REAL,ALLOCATABLE :: lonfi_glo(:)
     82  REAL,ALLOCATABLE :: cufi_glo(:)
     83  REAL,ALLOCATABLE :: cvfi_glo(:)
     84  REAL,ALLOCATABLE :: airefi_glo(:)
     85  REAL,ALLOCATABLE :: boundslonfi_glo(:,:)
     86  REAL,ALLOCATABLE :: boundslatfi_glo(:,:)
     87
     88  ! local arrays, on given MPI/OpenMP domain:
     89  REAL,ALLOCATABLE,SAVE :: latfi(:)
     90  REAL,ALLOCATABLE,SAVE :: lonfi(:)
     91  REAL,ALLOCATABLE,SAVE :: cufi(:)
     92  REAL,ALLOCATABLE,SAVE :: cvfi(:)
     93  REAL,ALLOCATABLE,SAVE :: airefi(:)
     94  REAL,ALLOCATABLE,SAVE :: boundslonfi(:,:)
     95  REAL,ALLOCATABLE,SAVE :: boundslatfi(:,:)
     96!$OMP THREADPRIVATE (latfi,lonfi,cufi,cvfi,airefi,boundslonfi,boundslatfi)
     97
     98  ! Initialize Physics distibution and parameters and interface with dynamics
     99  IF (iim*jjm>1) THEN ! general 3D case
     100    CALL init_physics_distribution(regular_lonlat,4, &
     101                                 nbp,iim,jjm+1,nlayer,communicator)
     102  ELSE ! For 1D model
     103    CALL init_physics_distribution(regular_lonlat,4, &
     104                                 1,1,1,nlayer,communicator)
     105  ENDIF
     106  CALL init_interface_dyn_phys
    88107 
    89108  ! init regular global longitude-latitude grid points and boundaries
     
    110129
    111130  ! Generate global arrays on full physics grid
    112   ALLOCATE(latfi(klon_glo),lonfi(klon_glo),cufi(klon_glo),cvfi(klon_glo))
    113   ALLOCATE(airefi(klon_glo))
     131  ALLOCATE(latfi_glo(klon_glo),lonfi_glo(klon_glo))
     132  ALLOCATE(cufi_glo(klon_glo),cvfi_glo(klon_glo))
     133  ALLOCATE(airefi_glo(klon_glo))
     134  ALLOCATE(boundslonfi_glo(klon_glo,4))
     135  ALLOCATE(boundslatfi_glo(klon_glo,4))
    114136
    115137  IF (klon_glo>1) THEN ! general case
    116138    ! North pole
    117     latfi(1)=rlatu(1)
    118     lonfi(1)=0.
    119     cufi(1) = cu(1)
    120     cvfi(1) = cv(1)
     139    latfi_glo(1)=rlatu(1)
     140    lonfi_glo(1)=0.
     141    cufi_glo(1) = cu(1)
     142    cvfi_glo(1) = cv(1)
     143    boundslonfi_glo(1,north_east)=0
     144    boundslatfi_glo(1,north_east)=PI/2
     145    boundslonfi_glo(1,north_west)=2*PI
     146    boundslatfi_glo(1,north_west)=PI/2
     147    boundslonfi_glo(1,south_west)=2*PI
     148    boundslatfi_glo(1,south_west)=rlatv(1)
     149    boundslonfi_glo(1,south_east)=0
     150    boundslatfi_glo(1,south_east)=rlatv(1)
    121151    DO j=2,jjm
    122152      DO i=1,iim
    123         latfi((j-2)*iim+1+i)= rlatu(j)
    124         lonfi((j-2)*iim+1+i)= rlonv(i)
    125         cufi((j-2)*iim+1+i) = cu((j-1)*(iim+1)+i)
    126         cvfi((j-2)*iim+1+i) = cv((j-1)*(iim+1)+i)
     153        k=(j-2)*iim+1+i
     154        latfi_glo(k)= rlatu(j)
     155        lonfi_glo(k)= rlonv(i)
     156        cufi_glo(k) = cu((j-1)*(iim+1)+i)
     157        cvfi_glo(k) = cv((j-1)*(iim+1)+i)
     158        boundslonfi_glo(k,north_east)=rlonu(i)
     159        boundslatfi_glo(k,north_east)=rlatv(j-1)
     160        boundslonfi_glo(k,north_west)=rlonu(i+1)
     161        boundslatfi_glo(k,north_west)=rlatv(j-1)
     162        boundslonfi_glo(k,south_west)=rlonu(i+1)
     163        boundslatfi_glo(k,south_west)=rlatv(j)
     164        boundslonfi_glo(k,south_east)=rlonu(i)
     165        boundslatfi_glo(k,south_east)=rlatv(j)
    127166      ENDDO
    128167    ENDDO
    129168    ! South pole
    130     latfi(klon_glo)= rlatu(jjm+1)
    131     lonfi(klon_glo)= 0.
    132     cufi(klon_glo) = cu((iim+1)*jjm+1)
    133     cvfi(klon_glo) = cv((iim+1)*jjm-iim)
     169    latfi_glo(klon_glo)= rlatu(jjm+1)
     170    lonfi_glo(klon_glo)= 0.
     171    cufi_glo(klon_glo) = cu((iim+1)*jjm+1)
     172    cvfi_glo(klon_glo) = cv((iim+1)*jjm-iim)
     173    boundslonfi_glo(klon_glo,north_east)= 0
     174    boundslatfi_glo(klon_glo,north_east)= rlatv(jjm)
     175    boundslonfi_glo(klon_glo,north_west)= 2*PI
     176    boundslatfi_glo(klon_glo,north_west)= rlatv(jjm)
     177    boundslonfi_glo(klon_glo,south_west)= 2*PI
     178    boundslatfi_glo(klon_glo,south_west)= -PI/2
     179    boundslonfi_glo(klon_glo,south_east)= 0
     180    boundslatfi_glo(klon_glo,south_east)= -Pi/2
    134181
    135182    ! build airefi(), mesh area on physics grid
    136     CALL gr_dyn_fi(1,iim+1,jjm+1,klon_glo,aire,airefi)
     183    CALL gr_dyn_fi(1,iim+1,jjm+1,klon_glo,aire,airefi_glo)
    137184    ! Poles are single points on physics grid
    138     airefi(1)=sum(aire(1:iim,1))
    139     airefi(klon_glo)=sum(aire(1:iim,jjm+1))
     185    airefi_glo(1)=sum(aire(1:iim,1))
     186    airefi_glo(klon_glo)=sum(aire(1:iim,jjm+1))
    140187
    141188    ! Sanity check: do total planet area match between physics and dynamics?
    142189    total_area_dyn=sum(aire(1:iim,1:jjm+1))
    143     total_area_phy=sum(airefi(1:klon_glo))
     190    total_area_phy=sum(airefi_glo(1:klon_glo))
    144191    IF (total_area_dyn/=total_area_phy) THEN
    145192      WRITE (lunout, *) 'iniphysiq: planet total surface discrepancy !!!'
     
    154201  ELSE ! klon_glo==1, running the 1D model
    155202    ! just copy over input values
    156     latfi(1)=rlatu(1)
    157     lonfi(1)=rlonv(1)
    158     cufi(1)=cu(1)
    159     cvfi(1)=cv(1)
    160     airefi(1)=aire(1,1)
     203    latfi_glo(1)=rlatu(1)
     204    lonfi_glo(1)=rlonv(1)
     205    cufi_glo(1)=cu(1)
     206    cvfi_glo(1)=cv(1)
     207    airefi_glo(1)=aire(1,1)
     208    boundslonfi_glo(1,north_east)=rlonu(1)
     209    boundslatfi_glo(1,north_east)=PI/2
     210    boundslonfi_glo(1,north_west)=rlonu(2)
     211    boundslatfi_glo(1,north_west)=PI/2
     212    boundslonfi_glo(1,south_west)=rlonu(2)
     213    boundslatfi_glo(1,south_west)=rlatv(1)
     214    boundslonfi_glo(1,south_east)=rlonu(1)
     215    boundslatfi_glo(1,south_east)=rlatv(1)
    161216  ENDIF ! of IF (klon_glo>1)
    162217
    163218!$OMP PARALLEL
    164   ! Now generate local lon/lat/cu/cv/area arrays
    165   CALL initcomgeomphy
     219  ! Now generate local lon/lat/cu/cv/area/bounds arrays
     220  ALLOCATE(latfi(klon_omp),lonfi(klon_omp),cufi(klon_omp),cvfi(klon_omp))
     221  ALLOCATE(airefi(klon_omp))
     222  ALLOCATE(boundslonfi(klon_omp,4))
     223  ALLOCATE(boundslatfi(klon_omp,4))
     224!  CALL initcomgeomphy
    166225
    167226  offset = klon_mpi_begin - 1
    168   airephy(1:klon_omp) = airefi(offset+klon_omp_begin:offset+klon_omp_end)
    169   cuphy(1:klon_omp) = cufi(offset+klon_omp_begin:offset+klon_omp_end)
    170   cvphy(1:klon_omp) = cvfi(offset+klon_omp_begin:offset+klon_omp_end)
    171   rlond(1:klon_omp) = lonfi(offset+klon_omp_begin:offset+klon_omp_end)
    172   rlatd(1:klon_omp) = latfi(offset+klon_omp_begin:offset+klon_omp_end)
     227  airefi(1:klon_omp) = airefi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     228  cufi(1:klon_omp) = cufi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     229  cvfi(1:klon_omp) = cvfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     230  lonfi(1:klon_omp) = lonfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     231  latfi(1:klon_omp) = latfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     232  boundslonfi(1:klon_omp,:) = boundslonfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
     233  boundslatfi(1:klon_omp,:) = boundslatfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
     234
     235  ! copy over local grid longitudes and latitudes
     236  CALL init_geometry(klon_omp,lonfi,latfi,boundslonfi,boundslatfi, &
     237                     airefi,cufi,cvfi)
    173238
    174239  ! Initialize some physical constants
     
    177242  ! Initialize some "temporal and calendar" related variables
    178243  CALL init_time(annee_ref,day_ref,day_ini,day_end,nday,ptimestep)
     244
     245  ! Initialize dimphy module
     246  CALL Init_dimphy(klon_omp,nlayer)
    179247
    180248!$OMP END PARALLEL
  • trunk/LMDZ.COMMON/libf/dynphy_lonlat/phyvenus/iniphysiq_mod.F90

    r1524 r1543  
    66CONTAINS
    77
    8 SUBROUTINE iniphysiq(iim,jjm,nlayer,punjours, pdayref,ptimestep,         &
    9                      rlatu,rlatv,rlonu,rlonv,aire,cu,cv,                 &
     8SUBROUTINE iniphysiq(iim,jjm,nlayer, &
     9                     nbp, communicator, &
     10                     punjours, pdayref,ptimestep, &
     11                     rlatu,rlatv,rlonu,rlonv,aire,cu,cv, &
    1012                     prad,pg,pr,pcpp,iflag_phys)
    11   USE dimphy, ONLY: klev ! number of atmospheric levels
    12   USE mod_grid_phy_lmdz, ONLY: klon_glo ! number of atmospheric columns
    13                                         ! (on full grid)
     13  USE dimphy, ONLY: init_dimphy
     14  USE mod_grid_phy_lmdz, ONLY: klon_glo,  & ! number of atmospheric columns (on full grid)
     15                               regular_lonlat, &  ! regular longitude-latitude grid type
     16                               nbp_lon, nbp_lat, nbp_lev
    1417  USE mod_phys_lmdz_para, ONLY: klon_omp, & ! number of columns (on local omp grid)
    1518                                klon_omp_begin, & ! start index of local omp subgrid
    1619                                klon_omp_end, & ! end index of local omp subgrid
    1720                                klon_mpi_begin ! start indes of columns (on local mpi grid)
    18   USE comgeomphy, ONLY: initcomgeomphy, &
    19                         airephy, & ! physics grid area (m2)
    20                         cuphy, & ! cu coeff. (u_covariant = cu * u)
    21                         cvphy, & ! cv coeff. (v_covariant = cv * v)
    22                         rlond, & ! longitudes
    23                         rlatd ! latitudes
     21  USE geometry_mod, ONLY : init_geometry
     22!  USE comgeomphy, ONLY: initcomgeomphy, &
     23!                        airephy, & ! physics grid area (m2)
     24!                        cuphy, & ! cu coeff. (u_covariant = cu * u)
     25!                        cvphy, & ! cv coeff. (v_covariant = cv * v)
     26!                        rlond, & ! longitudes
     27!                        rlatd ! latitudes
    2428  USE temps_mod, ONLY: annee_ref, day_ref, day_ini, day_end
    2529  USE time_phylmdz_mod, ONLY: init_time
     30  USE physics_distribution_mod, ONLY : init_physics_distribution
    2631  USE regular_lonlat_mod, ONLY : init_regular_lonlat, &
    2732                                 east, west, north, south, &
    2833                                 north_east, north_west, &
    2934                                 south_west, south_east
     35  USE mod_interface_dyn_phys, ONLY :  init_interface_dyn_phys
    3036  USE nrtype, ONLY: pi
    3137  IMPLICIT NONE
     
    4753  INTEGER, INTENT (IN) :: iim ! number of atmospheric columns along longitudes
    4854  INTEGER, INTENT (IN) :: jjm ! number of atompsheric columns along latitudes
     55  INTEGER, INTENT(IN) :: nbp ! number of physics columns for this MPI process
     56  INTEGER, INTENT(IN) :: communicator ! MPI communicator
    4957  REAL, INTENT (IN) :: rlatu(jjm+1) ! latitudes of the physics grid
    5058  REAL, INTENT (IN) :: rlatv(jjm) ! latitude boundaries of the physics grid
     
    5967
    6068  INTEGER :: ibegin, iend, offset
    61   INTEGER :: i,j
     69  INTEGER :: i,j,k
    6270  CHARACTER (LEN=20) :: modname = 'iniphysiq'
    6371  CHARACTER (LEN=80) :: abort_message
     
    6977
    7078  ! global array, on full physics grid:
    71   REAL,ALLOCATABLE :: latfi(:)
    72   REAL,ALLOCATABLE :: lonfi(:)
    73   REAL,ALLOCATABLE :: cufi(:)
    74   REAL,ALLOCATABLE :: cvfi(:)
    75   REAL,ALLOCATABLE :: airefi(:)
    76 
    77   IF (nlayer/=klev) THEN
    78     WRITE (lunout, *) 'STOP in ', trim(modname)
    79     WRITE (lunout, *) 'Problem with dimensions :'
    80     WRITE (lunout, *) 'nlayer     = ', nlayer
    81     WRITE (lunout, *) 'klev   = ', klev
    82     abort_message = ''
    83     CALL abort_gcm(modname, 'Problem with dimensions', 1)
    84   END IF
    85 
    86   !call init_phys_lmdz(iim,jjm+1,llm,1,(/(jjm-1)*iim+2/))
     79  REAL,ALLOCATABLE :: latfi_glo(:)
     80  REAL,ALLOCATABLE :: lonfi_glo(:)
     81  REAL,ALLOCATABLE :: cufi_glo(:)
     82  REAL,ALLOCATABLE :: cvfi_glo(:)
     83  REAL,ALLOCATABLE :: airefi_glo(:)
     84  REAL,ALLOCATABLE :: boundslonfi_glo(:,:)
     85  REAL,ALLOCATABLE :: boundslatfi_glo(:,:)
     86
     87  ! local arrays, on given MPI/OpenMP domain:
     88  REAL,ALLOCATABLE,SAVE :: latfi(:)
     89  REAL,ALLOCATABLE,SAVE :: lonfi(:)
     90  REAL,ALLOCATABLE,SAVE :: cufi(:)
     91  REAL,ALLOCATABLE,SAVE :: cvfi(:)
     92  REAL,ALLOCATABLE,SAVE :: airefi(:)
     93  REAL,ALLOCATABLE,SAVE :: boundslonfi(:,:)
     94  REAL,ALLOCATABLE,SAVE :: boundslatfi(:,:)
     95!$OMP THREADPRIVATE (latfi,lonfi,cufi,cvfi,airefi,boundslonfi,boundslatfi)
     96
     97  ! Initialize Physics distibution and parameters and interface with dynamics
     98  IF (iim*jjm>1) THEN ! general 3D case
     99    CALL init_physics_distribution(regular_lonlat,4, &
     100                                 nbp,iim,jjm+1,nlayer,communicator)
     101  ELSE ! For 1D model
     102    CALL init_physics_distribution(regular_lonlat,4, &
     103                                 1,1,1,nlayer,communicator)
     104  ENDIF
     105  CALL init_interface_dyn_phys
    87106 
    88107  ! init regular global longitude-latitude grid points and boundaries
     
    109128
    110129  ! Generate global arrays on full physics grid
    111   ALLOCATE(latfi(klon_glo),lonfi(klon_glo),cufi(klon_glo),cvfi(klon_glo))
    112   ALLOCATE(airefi(klon_glo))
     130  ALLOCATE(latfi_glo(klon_glo),lonfi_glo(klon_glo))
     131  ALLOCATE(cufi_glo(klon_glo),cvfi_glo(klon_glo))
     132  ALLOCATE(airefi_glo(klon_glo))
     133  ALLOCATE(boundslonfi_glo(klon_glo,4))
     134  ALLOCATE(boundslatfi_glo(klon_glo,4))
    113135
    114136  IF (klon_glo>1) THEN ! general case
    115137    ! North pole
    116     latfi(1)=rlatu(1)
    117     lonfi(1)=0.
    118     cufi(1) = cu(1)
    119     cvfi(1) = cv(1)
     138    latfi_glo(1)=rlatu(1)
     139    lonfi_glo(1)=0.
     140    cufi_glo(1) = cu(1)
     141    cvfi_glo(1) = cv(1)
     142    boundslonfi_glo(1,north_east)=0
     143    boundslatfi_glo(1,north_east)=PI/2
     144    boundslonfi_glo(1,north_west)=2*PI
     145    boundslatfi_glo(1,north_west)=PI/2
     146    boundslonfi_glo(1,south_west)=2*PI
     147    boundslatfi_glo(1,south_west)=rlatv(1)
     148    boundslonfi_glo(1,south_east)=0
     149    boundslatfi_glo(1,south_east)=rlatv(1)
    120150    DO j=2,jjm
    121151      DO i=1,iim
    122         latfi((j-2)*iim+1+i)= rlatu(j)
    123         lonfi((j-2)*iim+1+i)= rlonv(i)
    124         cufi((j-2)*iim+1+i) = cu((j-1)*(iim+1)+i)
    125         cvfi((j-2)*iim+1+i) = cv((j-1)*(iim+1)+i)
     152        k=(j-2)*iim+1+i
     153        latfi_glo(k)= rlatu(j)
     154        lonfi_glo(k)= rlonv(i)
     155        cufi_glo(k) = cu((j-1)*(iim+1)+i)
     156        cvfi_glo(k) = cv((j-1)*(iim+1)+i)
     157        boundslonfi_glo(k,north_east)=rlonu(i)
     158        boundslatfi_glo(k,north_east)=rlatv(j-1)
     159        boundslonfi_glo(k,north_west)=rlonu(i+1)
     160        boundslatfi_glo(k,north_west)=rlatv(j-1)
     161        boundslonfi_glo(k,south_west)=rlonu(i+1)
     162        boundslatfi_glo(k,south_west)=rlatv(j)
     163        boundslonfi_glo(k,south_east)=rlonu(i)
     164        boundslatfi_glo(k,south_east)=rlatv(j)
    126165      ENDDO
    127166    ENDDO
    128167    ! South pole
    129     latfi(klon_glo)= rlatu(jjm+1)
    130     lonfi(klon_glo)= 0.
    131     cufi(klon_glo) = cu((iim+1)*jjm+1)
    132     cvfi(klon_glo) = cv((iim+1)*jjm-iim)
     168    latfi_glo(klon_glo)= rlatu(jjm+1)
     169    lonfi_glo(klon_glo)= 0.
     170    cufi_glo(klon_glo) = cu((iim+1)*jjm+1)
     171    cvfi_glo(klon_glo) = cv((iim+1)*jjm-iim)
     172    boundslonfi_glo(klon_glo,north_east)= 0
     173    boundslatfi_glo(klon_glo,north_east)= rlatv(jjm)
     174    boundslonfi_glo(klon_glo,north_west)= 2*PI
     175    boundslatfi_glo(klon_glo,north_west)= rlatv(jjm)
     176    boundslonfi_glo(klon_glo,south_west)= 2*PI
     177    boundslatfi_glo(klon_glo,south_west)= -PI/2
     178    boundslonfi_glo(klon_glo,south_east)= 0
     179    boundslatfi_glo(klon_glo,south_east)= -Pi/2
    133180
    134181    ! build airefi(), mesh area on physics grid
    135     CALL gr_dyn_fi(1,iim+1,jjm+1,klon_glo,aire,airefi)
     182    CALL gr_dyn_fi(1,iim+1,jjm+1,klon_glo,aire,airefi_glo)
    136183    ! Poles are single points on physics grid
    137     airefi(1)=sum(aire(1:iim,1))
    138     airefi(klon_glo)=sum(aire(1:iim,jjm+1))
     184    airefi_glo(1)=sum(aire(1:iim,1))
     185    airefi_glo(klon_glo)=sum(aire(1:iim,jjm+1))
    139186
    140187    ! Sanity check: do total planet area match between physics and dynamics?
    141188    total_area_dyn=sum(aire(1:iim,1:jjm+1))
    142     total_area_phy=sum(airefi(1:klon_glo))
     189    total_area_phy=sum(airefi_glo(1:klon_glo))
    143190    IF (total_area_dyn/=total_area_phy) THEN
    144191      WRITE (lunout, *) 'iniphysiq: planet total surface discrepancy !!!'
     
    153200  ELSE ! klon_glo==1, running the 1D model
    154201    ! just copy over input values
    155     latfi(1)=rlatu(1)
    156     lonfi(1)=rlonv(1)
    157     cufi(1)=cu(1)
    158     cvfi(1)=cv(1)
    159     airefi(1)=aire(1,1)
     202    latfi_glo(1)=rlatu(1)
     203    lonfi_glo(1)=rlonv(1)
     204    cufi_glo(1)=cu(1)
     205    cvfi_glo(1)=cv(1)
     206    airefi_glo(1)=aire(1,1)
     207    boundslonfi_glo(1,north_east)=rlonu(1)
     208    boundslatfi_glo(1,north_east)=PI/2
     209    boundslonfi_glo(1,north_west)=rlonu(2)
     210    boundslatfi_glo(1,north_west)=PI/2
     211    boundslonfi_glo(1,south_west)=rlonu(2)
     212    boundslatfi_glo(1,south_west)=rlatv(1)
     213    boundslonfi_glo(1,south_east)=rlonu(1)
     214    boundslatfi_glo(1,south_east)=rlatv(1)
    160215  ENDIF ! of IF (klon_glo>1)
    161216
    162217!$OMP PARALLEL
    163   ! Now generate local lon/lat/cu/cv/area arrays
    164   CALL initcomgeomphy
     218  ! Now generate local lon/lat/cu/cv/area/bounds arrays
     219  ALLOCATE(latfi(klon_omp),lonfi(klon_omp),cufi(klon_omp),cvfi(klon_omp))
     220  ALLOCATE(airefi(klon_omp))
     221  ALLOCATE(boundslonfi(klon_omp,4))
     222  ALLOCATE(boundslatfi(klon_omp,4))
     223!  CALL initcomgeomphy
    165224
    166225  offset = klon_mpi_begin - 1
    167   airephy(1:klon_omp) = airefi(offset+klon_omp_begin:offset+klon_omp_end)
    168   cuphy(1:klon_omp) = cufi(offset+klon_omp_begin:offset+klon_omp_end)
    169   cvphy(1:klon_omp) = cvfi(offset+klon_omp_begin:offset+klon_omp_end)
    170   rlond(1:klon_omp) = lonfi(offset+klon_omp_begin:offset+klon_omp_end)
    171   rlatd(1:klon_omp) = latfi(offset+klon_omp_begin:offset+klon_omp_end)
     226  airefi(1:klon_omp) = airefi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     227  cufi(1:klon_omp) = cufi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     228  cvfi(1:klon_omp) = cvfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     229  lonfi(1:klon_omp) = lonfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     230  latfi(1:klon_omp) = latfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     231  boundslonfi(1:klon_omp,:) = boundslonfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
     232  boundslatfi(1:klon_omp,:) = boundslatfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
     233
     234  ! copy over local grid longitudes and latitudes
     235  CALL init_geometry(klon_omp,lonfi,latfi,boundslonfi,boundslatfi, &
     236                     airefi,cufi,cvfi)
    172237
    173238  ! Initialize some physical constants
     
    176241  ! Initialize some "temporal and calendar" related variables
    177242  CALL init_time(annee_ref,day_ref,day_ini,day_end,ptimestep)
     243
     244  ! Initialize dimphy module
     245  CALL Init_dimphy(klon_omp,nlayer)
    178246
    179247!$OMP END PARALLEL
  • trunk/LMDZ.COMMON/libf/phy_common/ioipsl_getin_p_mod.F90

    r1521 r1543  
    1212USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
    1313USE mod_phys_lmdz_omp_data, ONLY :  is_omp_root
    14 use mod_phys_lmdz_para, only : bcast
     14USE mod_phys_lmdz_transfert_para, ONLY : bcast
    1515!-
    1616IMPLICIT NONE
  • trunk/LMDZ.COMMON/libf/phy_common/mod_grid_phy_lmdz.F90

    r1534 r1543  
    11!
    2 !$Header$
     2!$Id $
    33!
    44MODULE mod_grid_phy_lmdz
     
    77  PRIVATE :: grid1dTo2d_glo_igen, grid1dTo2d_glo_rgen, grid1dTo2d_glo_lgen, &
    88             grid2dTo1d_glo_igen, grid2dTo1d_glo_rgen, grid2dTo1d_glo_lgen
    9 
     9 
     10  INTEGER,PARAMETER :: unstructured=0
     11  INTEGER,PARAMETER :: regular_lonlat=1
     12
     13  INTEGER,SAVE :: grid_type
     14  INTEGER,SAVE :: nvertex
    1015  INTEGER,SAVE :: nbp_lon  ! == iim
    11   INTEGER,SAVE :: nbp_lat  ! == jjmp1
     16  INTEGER,SAVE :: nbp_lat  ! == jjmp1 (or == 1 if running 1D model)
    1217  INTEGER,SAVE :: nbp_lev  ! == llm
    13   INTEGER,SAVE :: klon_glo
     18  INTEGER,SAVE :: klon_glo ! total number of atmospheric columns
    1419
    1520  INTERFACE grid1dTo2d_glo
     
    3237
    3338
    34   SUBROUTINE init_grid_phy_lmdz(iim,jjp1,llm)
     39  SUBROUTINE init_grid_phy_lmdz(grid_type_,nvertex_,nbp_lon_,nbp_lat_,nbp_lev_)
    3540  IMPLICIT NONE
    36   INTEGER, INTENT(in) :: iim
    37   INTEGER, INTENT(in) :: jjp1
    38   INTEGER, INTENT(in) :: llm
    39  
    40     nbp_lon=iim
    41     nbp_lat=jjp1
    42     nbp_lev=llm
    43    
    44     ! Ehouarn: handle 1D case:
     41  INTEGER,INTENT(IN)  :: grid_type_
     42  INTEGER,INTENT(IN)  :: nvertex_
     43  INTEGER, INTENT(IN) :: nbp_lon_
     44  INTEGER, INTENT(IN) :: nbp_lat_
     45  INTEGER, INTENT(IN) :: nbp_lev_
     46 
     47    grid_type = grid_type_
     48    nvertex   = nvertex_
     49    nbp_lon   = nbp_lon_
     50    nbp_lat   = nbp_lat_
     51    nbp_lev   = nbp_lev_
     52   
    4553    IF (nbp_lon*nbp_lat==1) THEN
    4654      klon_glo=1
     
    283291
    284292!----------------------------------------------------------------
    285 fonctions generiques (privees)
     293Generic (private) fonctions
    286294!----------------------------------------------------------------
     295 
    287296  SUBROUTINE grid1dTo2d_glo_igen(VarIn,VarOut,dimsize)
     297
    288298    IMPLICIT NONE
    289299
     
    320330
    321331  SUBROUTINE grid1dTo2d_glo_rgen(VarIn,VarOut,dimsize)
     332
    322333    IMPLICIT NONE
    323334
     
    353364
    354365  SUBROUTINE grid1dTo2d_glo_lgen(VarIn,VarOut,dimsize)
     366
    355367    IMPLICIT NONE
    356368   
     
    386398 
    387399  SUBROUTINE grid2dTo1d_glo_igen(VarIn,VarOut,dimsize)
     400
    388401    IMPLICIT NONE
    389402
     
    408421 
    409422  SUBROUTINE grid2dTo1d_glo_rgen(VarIn,VarOut,dimsize)
     423
    410424    IMPLICIT NONE
    411425
     
    430444   
    431445  SUBROUTINE grid2dTo1d_glo_lgen(VarIn,VarOut,dimsize)
     446
    432447    IMPLICIT NONE
    433448
  • trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_mpi_data.F90

    r1521 r1543  
    33!
    44MODULE mod_phys_lmdz_mpi_data
    5   USE mod_const_mpi
     5!  USE mod_const_mpi
    66 
    77  INTEGER,SAVE :: ii_begin
     
    3535  INTEGER,SAVE :: mpi_rank
    3636  INTEGER,SAVE :: mpi_size
    37   INTEGER,SAVE :: mpi_root
     37  INTEGER,SAVE :: mpi_master
     38!  INTEGER,SAVE :: mpi_root
    3839  LOGICAL,SAVE :: is_mpi_root
    3940  LOGICAL,SAVE :: is_using_mpi
     
    4344  LOGICAL,SAVE :: is_south_pole
    4445  INTEGER,SAVE :: COMM_LMDZ_PHY
     46  INTEGER,SAVE :: MPI_REAL_LMDZ   ! MPI_REAL8
    4547
    4648CONTAINS
    4749 
    48   SUBROUTINE init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)
    49   USE mod_const_mpi, ONLY : COMM_LMDZ
     50!  SUBROUTINE Init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)
     51  SUBROUTINE init_phys_lmdz_mpi_data(nbp, nbp_lon, nbp_lat, communicator)
     52!  USE mod_const_mpi, ONLY : COMM_LMDZ
    5053  IMPLICIT NONE
    51     INTEGER,INTENT(in) :: iim
    52     INTEGER,INTENT(in) :: jjp1
    53     INTEGER,INTENT(in) :: nb_proc
    54     INTEGER,INTENT(in) :: distrib(0:nb_proc-1)
    55    
     54#ifdef CPP_MPI
     55    INCLUDE 'mpif.h'
     56#endif
     57    INTEGER,INTENT(in) :: nbp
     58    INTEGER,INTENT(in) :: nbp_lon
     59    INTEGER,INTENT(in) :: nbp_lat
     60    INTEGER,INTENT(in) :: communicator
     61   
     62    INTEGER,ALLOCATABLE :: distrib(:)
    5663    INTEGER :: ierr
    5764    INTEGER :: klon_glo
     
    6471#endif
    6572   
    66     if (iim.eq.1) then
     73    if ((nbp_lon.eq.1).and.(nbp_lat.eq.1)) then ! running 1D column model
    6774       klon_glo=1
    6875    else
    69        klon_glo=iim*(jjp1-2)+2
     76    ! The usual global physics grid: 1 point for each pole and nbp_lon points
     77    ! for all other latitudes
     78       klon_glo=nbp_lon*(nbp_lat-2)+2
    7079    endif
    7180   
    72     COMM_LMDZ_PHY=COMM_LMDZ
     81    COMM_LMDZ_PHY=communicator
    7382
    7483    IF (is_using_mpi) THEN   
    7584#ifdef CPP_MPI
     85      MPI_REAL_LMDZ=MPI_REAL8
    7686      CALL MPI_COMM_SIZE(COMM_LMDZ_PHY,mpi_size,ierr)   
    7787      CALL MPI_COMM_RANK(COMM_LMDZ_PHY,mpi_rank,ierr)
     
    8292    ENDIF
    8393   
     94    ALLOCATE(distrib(0:mpi_size-1))
     95
     96    IF (is_using_mpi) THEN   
     97#ifdef CPP_MPI
     98    CALL MPI_ALLGATHER(nbp,1,MPI_INTEGER,distrib,1,MPI_INTEGER,COMM_LMDZ_PHY,ierr)
     99#endif
     100    ELSE
     101     distrib(:)=nbp
     102    ENDIF
     103
     104
    84105    IF (mpi_rank == 0) THEN
    85       mpi_root = 0
     106      mpi_master = 0
    86107      is_mpi_root = .true.
    87108    ENDIF
     
    115136 
    116137     
    117     klon_mpi_para_nb(0:mpi_size-1)=distrib(0:nb_proc-1)
     138    klon_mpi_para_nb(0:mpi_size-1)=distrib(0:mpi_size-1)
    118139
    119140    DO i=0,mpi_size-1
     
    132153        ij_para_begin(i) = 1
    133154      ELSE
    134         ij_para_begin(i) = klon_mpi_para_begin(i)+iim-1
     155        ij_para_begin(i) = klon_mpi_para_begin(i)+nbp_lon-1
    135156      ENDIF
    136157
    137       jj_para_begin(i) = (ij_para_begin(i)-1)/iim + 1
    138       ii_para_begin(i) = MOD(ij_para_begin(i)-1,iim) + 1
     158      jj_para_begin(i) = (ij_para_begin(i)-1)/nbp_lon + 1
     159      ii_para_begin(i) = MOD(ij_para_begin(i)-1,nbp_lon) + 1
    139160
    140161     
    141       ij_para_end(i) = klon_mpi_para_end(i)+iim-1
    142       jj_para_end(i) = (ij_para_end(i)-1)/iim + 1
    143       ii_para_end(i) = MOD(ij_para_end(i)-1,iim) + 1
     162      ij_para_end(i) = klon_mpi_para_end(i)+nbp_lon-1
     163      jj_para_end(i) = (ij_para_end(i)-1)/nbp_lon + 1
     164      ii_para_end(i) = MOD(ij_para_end(i)-1,nbp_lon) + 1
    144165
    145166
     
    161182    klon_mpi       = klon_mpi_para_nb(mpi_rank)
    162183   
    163     CALL print_module_data
    164    
    165   END SUBROUTINE init_phys_lmdz_mpi_data
     184    CALL Print_module_data
     185   
     186  END SUBROUTINE Init_phys_lmdz_mpi_data
    166187
    167188  SUBROUTINE print_module_data
     189!  USE print_control_mod, ONLY: lunout
    168190  IMPLICIT NONE
    169191  INCLUDE "iniprint.h"
     
    193215    WRITE(lunout,*) 'mpi_rank =', mpi_rank
    194216    WRITE(lunout,*) 'mpi_size =', mpi_size
    195     WRITE(lunout,*) 'mpi_root =', mpi_root
     217    WRITE(lunout,*) 'mpi_master =', mpi_master
    196218    WRITE(lunout,*) 'is_mpi_root =', is_mpi_root
    197219    WRITE(lunout,*) 'is_north_pole =', is_north_pole
  • trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_mpi_transfert.F90

    r1521 r1543  
    99                     bcast_mpi_i,bcast_mpi_i1,bcast_mpi_i2,bcast_mpi_i3,bcast_mpi_i4, &
    1010                     bcast_mpi_r,bcast_mpi_r1,bcast_mpi_r2,bcast_mpi_r3,bcast_mpi_r4, &
    11                      bcast_mpi_l,bcast_mpi_l1,bcast_mpi_l2,bcast_mpi_l3,bcast_mpi_l4
     11                     bcast_mpi_l,bcast_mpi_l1,bcast_mpi_l2,bcast_mpi_l3,bcast_mpi_l4
    1212  END INTERFACE
    1313
     
    1515    MODULE PROCEDURE scatter_mpi_i,scatter_mpi_i1,scatter_mpi_i2,scatter_mpi_i3, &
    1616                     scatter_mpi_r,scatter_mpi_r1,scatter_mpi_r2,scatter_mpi_r3, &
    17                      scatter_mpi_l,scatter_mpi_l1,scatter_mpi_l2,scatter_mpi_l3
     17                     scatter_mpi_l,scatter_mpi_l1,scatter_mpi_l2,scatter_mpi_l3
    1818  END INTERFACE
    1919
     
    2222    MODULE PROCEDURE gather_mpi_i,gather_mpi_i1,gather_mpi_i2,gather_mpi_i3, &
    2323                     gather_mpi_r,gather_mpi_r1,gather_mpi_r2,gather_mpi_r3, &
    24                      gather_mpi_l,gather_mpi_l1,gather_mpi_l2,gather_mpi_l3 
     24                     gather_mpi_l,gather_mpi_l1,gather_mpi_l2,gather_mpi_l3 
    2525  END INTERFACE
    2626 
     
    2828    MODULE PROCEDURE scatter2D_mpi_i,scatter2D_mpi_i1,scatter2D_mpi_i2,scatter2D_mpi_i3, &
    2929                     scatter2D_mpi_r,scatter2D_mpi_r1,scatter2D_mpi_r2,scatter2D_mpi_r3, &
    30                      scatter2D_mpi_l,scatter2D_mpi_l1,scatter2D_mpi_l2,scatter2D_mpi_l3
     30                     scatter2D_mpi_l,scatter2D_mpi_l1,scatter2D_mpi_l2,scatter2D_mpi_l3
    3131  END INTERFACE
    3232
     
    3434    MODULE PROCEDURE gather2D_mpi_i,gather2D_mpi_i1,gather2D_mpi_i2,gather2D_mpi_i3, &
    3535                     gather2D_mpi_r,gather2D_mpi_r1,gather2D_mpi_r2,gather2D_mpi_r3, &
    36                      gather2D_mpi_l,gather2D_mpi_l1,gather2D_mpi_l2,gather2D_mpi_l3
     36                     gather2D_mpi_l,gather2D_mpi_l1,gather2D_mpi_l2,gather2D_mpi_l3
    3737  END INTERFACE
    3838 
     
    4545    MODULE PROCEDURE grid1dTo2d_mpi_i,grid1dTo2d_mpi_i1,grid1dTo2d_mpi_i2,grid1dTo2d_mpi_i3, &
    4646                     grid1dTo2d_mpi_r,grid1dTo2d_mpi_r1,grid1dTo2d_mpi_r2,grid1dTo2d_mpi_r3, &
    47                      grid1dTo2d_mpi_l,grid1dTo2d_mpi_l1,grid1dTo2d_mpi_l2,grid1dTo2d_mpi_l3
     47                     grid1dTo2d_mpi_l,grid1dTo2d_mpi_l1,grid1dTo2d_mpi_l2,grid1dTo2d_mpi_l3
    4848 END INTERFACE
    4949
     
    5151    MODULE PROCEDURE grid2dTo1d_mpi_i,grid2dTo1d_mpi_i1,grid2dTo1d_mpi_i2,grid2dTo1d_mpi_i3, &
    5252                     grid2dTo1d_mpi_r,grid2dTo1d_mpi_r1,grid2dTo1d_mpi_r2,grid2dTo1d_mpi_r3, &
    53                      grid2dTo1d_mpi_l,grid2dTo1d_mpi_l1,grid2dTo1d_mpi_l2,grid2dTo1d_mpi_l3
     53                     grid2dTo1d_mpi_l,grid2dTo1d_mpi_l1,grid2dTo1d_mpi_l2,grid2dTo1d_mpi_l3
    5454 END INTERFACE
    5555   
     
    12361236
    12371237  SUBROUTINE bcast_mpi_cgen(var,nb)
    1238     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1238    USE mod_phys_lmdz_mpi_data
    12391239    IMPLICIT NONE
    12401240   
     
    12501250   
    12511251#ifdef CPP_MPI
    1252     CALL MPI_BCAST(Var,nb,MPI_CHARACTER,mpi_root_x,COMM_LMDZ_PHY,ierr)
     1252    CALL MPI_BCAST(Var,nb,MPI_CHARACTER,mpi_master,COMM_LMDZ_PHY,ierr)
    12531253#endif
    12541254       
     
    12581258     
    12591259  SUBROUTINE bcast_mpi_igen(var,nb)
    1260     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
    1261     IMPLICIT NONE
    1262    
     1260    USE mod_phys_lmdz_mpi_data
     1261    IMPLICIT NONE
     1262   
     1263    INTEGER,INTENT(IN) :: nb
    12631264    INTEGER,DIMENSION(nb),INTENT(INOUT) :: Var
    1264     INTEGER,INTENT(IN) :: nb
    12651265   
    12661266#ifdef CPP_MPI
     
    12721272
    12731273#ifdef CPP_MPI
    1274     CALL MPI_BCAST(Var,nb,MPI_INTEGER,mpi_root_x,COMM_LMDZ_PHY,ierr)
     1274    CALL MPI_BCAST(Var,nb,MPI_INTEGER,mpi_master,COMM_LMDZ_PHY,ierr)
    12751275#endif
    12761276       
     
    12811281 
    12821282  SUBROUTINE bcast_mpi_rgen(var,nb)
    1283     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
    1284     IMPLICIT NONE
    1285    
     1283    USE mod_phys_lmdz_mpi_data
     1284    IMPLICIT NONE
     1285   
     1286    INTEGER,INTENT(IN) :: nb
    12861287    REAL,DIMENSION(nb),INTENT(INOUT) :: Var
     1288   
     1289#ifdef CPP_MPI
     1290    INCLUDE 'mpif.h'
     1291#endif
     1292    INTEGER :: ierr
     1293
     1294    IF (.not.is_using_mpi) RETURN
     1295
     1296#ifdef CPP_MPI
     1297    CALL MPI_BCAST(Var,nb,MPI_REAL_LMDZ,mpi_master,COMM_LMDZ_PHY,ierr)
     1298#endif
     1299   
     1300  END SUBROUTINE bcast_mpi_rgen
     1301 
     1302
     1303
     1304
     1305  SUBROUTINE bcast_mpi_lgen(var,nb)
     1306    USE mod_phys_lmdz_mpi_data
     1307    IMPLICIT NONE
     1308   
    12871309    INTEGER,INTENT(IN) :: nb
     1310    LOGICAL,DIMENSION(nb),INTENT(INOUT) :: Var
    12881311   
    12891312#ifdef CPP_MPI
     
    12951318
    12961319#ifdef CPP_MPI
    1297     CALL MPI_BCAST(Var,nb,MPI_REAL_LMDZ,mpi_root_x,COMM_LMDZ_PHY,ierr)
    1298 #endif
    1299    
    1300   END SUBROUTINE bcast_mpi_rgen
    1301  
    1302 
    1303 
    1304 
    1305   SUBROUTINE bcast_mpi_lgen(var,nb)
    1306     USE mod_phys_lmdz_mpi_data ,  mpi_root_x=>mpi_root
    1307     IMPLICIT NONE
    1308    
    1309     LOGICAL,DIMENSION(nb),INTENT(INOUT) :: Var
    1310     INTEGER,INTENT(IN) :: nb
    1311    
    1312 #ifdef CPP_MPI
    1313     INCLUDE 'mpif.h'
    1314 #endif
    1315     INTEGER :: ierr
    1316 
    1317     IF (.not.is_using_mpi) RETURN
    1318 
    1319 #ifdef CPP_MPI
    1320     CALL MPI_BCAST(Var,nb,MPI_LOGICAL,mpi_root_x,COMM_LMDZ_PHY,ierr)
     1320    CALL MPI_BCAST(Var,nb,MPI_LOGICAL,mpi_master,COMM_LMDZ_PHY,ierr)
    13211321#endif
    13221322
     
    13261326
    13271327  SUBROUTINE scatter_mpi_igen(VarIn, VarOut, dimsize)
    1328     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1328    USE mod_phys_lmdz_mpi_data
    13291329    USE mod_grid_phy_lmdz
    13301330    IMPLICIT NONE
     
    13651365#ifdef CPP_MPI
    13661366    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_INTEGER,VarOut,klon_mpi*dimsize,   &
    1367                       MPI_INTEGER,mpi_root_x, COMM_LMDZ_PHY,ierr)
     1367                      MPI_INTEGER,mpi_master, COMM_LMDZ_PHY,ierr)
    13681368#endif
    13691369
     
    13711371
    13721372  SUBROUTINE scatter_mpi_rgen(VarIn, VarOut, dimsize)
    1373     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1373    USE mod_phys_lmdz_mpi_data
    13741374    USE mod_grid_phy_lmdz
    13751375    IMPLICIT NONE
     
    14091409#ifdef CPP_MPI
    14101410    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_REAL_LMDZ,VarOut,klon_mpi*dimsize,   &
    1411                       MPI_REAL_LMDZ,mpi_root_x, COMM_LMDZ_PHY,ierr)
     1411                      MPI_REAL_LMDZ,mpi_master, COMM_LMDZ_PHY,ierr)
    14121412
    14131413#endif
     
    14171417 
    14181418  SUBROUTINE scatter_mpi_lgen(VarIn, VarOut, dimsize)
    1419     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1419    USE mod_phys_lmdz_mpi_data
    14201420    USE mod_grid_phy_lmdz
    14211421    IMPLICIT NONE
     
    14551455#ifdef CPP_MPI
    14561456    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_LOGICAL,VarOut,klon_mpi*dimsize,   &
    1457                       MPI_LOGICAL,mpi_root_x, COMM_LMDZ_PHY,ierr)
     1457                      MPI_LOGICAL,mpi_master, COMM_LMDZ_PHY,ierr)
    14581458#endif
    14591459
     
    14641464
    14651465  SUBROUTINE gather_mpi_igen(VarIn, VarOut, dimsize)
    1466     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1466    USE mod_phys_lmdz_mpi_data
    14671467    USE mod_grid_phy_lmdz
    14681468    IMPLICIT NONE
     
    14931493        displs(rank)=Index-1
    14941494        counts(rank)=nb*dimsize
    1495         Index=Index+nb*dimsize
     1495        Index=Index+nb*dimsize
    14961496      ENDDO
    14971497     
     
    15001500#ifdef CPP_MPI
    15011501    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_INTEGER,VarTmp,counts,displs,   &
    1502                      MPI_INTEGER,mpi_root_x, COMM_LMDZ_PHY,ierr)
    1503 #endif
    1504 
    1505                          
     1502                     MPI_INTEGER,mpi_master, COMM_LMDZ_PHY,ierr)
     1503#endif
     1504
     1505                         
    15061506    IF (is_mpi_root) THEN
    15071507      Index=1
     
    15101510        DO i=1,dimsize
    15111511          VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
    1512           Index=Index+nb
     1512          Index=Index+nb
    15131513        ENDDO
    15141514      ENDDO
     
    15181518
    15191519  SUBROUTINE gather_mpi_rgen(VarIn, VarOut, dimsize)
    1520     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1520    USE mod_phys_lmdz_mpi_data
    15211521    USE mod_grid_phy_lmdz
    15221522    IMPLICIT NONE
     
    15421542        displs(rank)=Index-1
    15431543        counts(rank)=nb*dimsize
    1544         Index=Index+nb*dimsize
     1544        Index=Index+nb*dimsize
    15451545      ENDDO
    15461546    ENDIF
     
    15531553#ifdef CPP_MPI
    15541554    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_REAL_LMDZ,VarTmp,counts,displs,   &
    1555                       MPI_REAL_LMDZ,mpi_root_x, COMM_LMDZ_PHY,ierr)
    1556 #endif
    1557                          
     1555                      MPI_REAL_LMDZ,mpi_master, COMM_LMDZ_PHY,ierr)
     1556#endif
     1557                         
    15581558    IF (is_mpi_root) THEN
    15591559      Index=1
     
    15621562        DO i=1,dimsize
    15631563          VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
    1564           Index=Index+nb
     1564          Index=Index+nb
    15651565        ENDDO
    15661566      ENDDO
     
    15701570
    15711571  SUBROUTINE gather_mpi_lgen(VarIn, VarOut, dimsize)
    1572     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1572    USE mod_phys_lmdz_mpi_data
    15731573    USE mod_grid_phy_lmdz
    15741574    IMPLICIT NONE
     
    15991599        displs(rank)=Index-1
    16001600        counts(rank)=nb*dimsize
    1601         Index=Index+nb*dimsize
     1601        Index=Index+nb*dimsize
    16021602      ENDDO
    16031603    ENDIF
     
    16061606#ifdef CPP_MPI
    16071607    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_LOGICAL,VarTmp,counts,displs,   &
    1608                       MPI_LOGICAL,mpi_root_x, COMM_LMDZ_PHY,ierr)
    1609 #endif
    1610                          
     1608                      MPI_LOGICAL,mpi_master, COMM_LMDZ_PHY,ierr)
     1609#endif
     1610                         
    16111611    IF (is_mpi_root) THEN
    16121612      Index=1
     
    16151615        DO i=1,dimsize
    16161616          VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
    1617           Index=Index+nb
     1617          Index=Index+nb
    16181618        ENDDO
    16191619      ENDDO
     
    16251625
    16261626  SUBROUTINE reduce_sum_mpi_igen(VarIn,VarOut,nb)
    1627     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1627    USE mod_phys_lmdz_mpi_data
    16281628    USE mod_grid_phy_lmdz
    16291629    IMPLICIT NONE
     
    16331633#endif
    16341634   
     1635    INTEGER,INTENT(IN) :: nb
    16351636    INTEGER,DIMENSION(nb),INTENT(IN) :: VarIn
    16361637    INTEGER,DIMENSION(nb),INTENT(OUT) :: VarOut   
    1637     INTEGER,INTENT(IN) :: nb
    16381638    INTEGER :: ierr
    16391639   
     
    16451645
    16461646#ifdef CPP_MPI
    1647     CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_INTEGER,MPI_SUM,mpi_root_x,COMM_LMDZ_PHY,ierr)
     1647    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_INTEGER,MPI_SUM,mpi_master,COMM_LMDZ_PHY,ierr)
    16481648#endif
    16491649           
     
    16511651 
    16521652  SUBROUTINE reduce_sum_mpi_rgen(VarIn,VarOut,nb)
    1653     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1653    USE mod_phys_lmdz_mpi_data
    16541654    USE mod_grid_phy_lmdz
    16551655
     
    16601660#endif
    16611661   
     1662    INTEGER,INTENT(IN) :: nb
    16621663    REAL,DIMENSION(nb),INTENT(IN) :: VarIn
    16631664    REAL,DIMENSION(nb),INTENT(OUT) :: VarOut   
    1664     INTEGER,INTENT(IN) :: nb
    16651665    INTEGER :: ierr
    16661666 
     
    16711671   
    16721672#ifdef CPP_MPI
    1673     CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_REAL_LMDZ,MPI_SUM,mpi_root_x,COMM_LMDZ_PHY,ierr)
     1673    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_REAL_LMDZ,MPI_SUM,mpi_master,COMM_LMDZ_PHY,ierr)
    16741674#endif
    16751675       
     
    17071707        DO ij=1,nbp_lon
    17081708         VarOut(ij,i)=VarIn(1,i)
    1709         ENDDO
     1709        ENDDO
    17101710      ENDDO
    17111711    ENDIF
     
    17151715        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
    17161716         VarOut(ij,i)=VarIn(klon_mpi,i)
    1717         ENDDO
     1717        ENDDO
    17181718      ENDDO
    17191719    ENDIF
     
    17511751        DO ij=1,nbp_lon
    17521752         VarOut(ij,i)=VarIn(1,i)
    1753         ENDDO
     1753        ENDDO
    17541754      ENDDO
    17551755    ENDIF
     
    17591759        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
    17601760         VarOut(ij,i)=VarIn(klon_mpi,i)
    1761         ENDDO
     1761        ENDDO
    17621762      ENDDO
    17631763    ENDIF
     
    17961796        DO ij=1,nbp_lon
    17971797         VarOut(ij,i)=VarIn(1,i)
    1798         ENDDO
     1798        ENDDO
    17991799      ENDDO
    18001800    ENDIF
     
    18041804        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
    18051805         VarOut(ij,i)=VarIn(klon_mpi,i)
    1806         ENDDO
     1806        ENDDO
    18071807      ENDDO
    18081808    ENDIF
     
    19011901
    19021902END MODULE mod_phys_lmdz_mpi_transfert
     1903
  • trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_omp_data.F90

    r1521 r1543  
    11!
    2 !$Id: mod_phys_lmdz_omp_data.F90 1575 2011-09-21 13:57:48Z jghattas $
     2!$Id: mod_phys_lmdz_omp_data.F90 2326 2015-07-10 12:24:29Z emillour $
    33!
    44MODULE mod_phys_lmdz_omp_data
     
    2020CONTAINS
    2121 
    22   SUBROUTINE init_phys_lmdz_omp_data(klon_mpi)
     22  SUBROUTINE Init_phys_lmdz_omp_data(klon_mpi)
    2323    USE dimphy
    2424    IMPLICIT NONE
     
    8585    klon_omp_end=klon_omp_para_end(omp_rank)
    8686   
    87     CALL print_module_data
     87    CALL Print_module_data
    8888   
    89   END SUBROUTINE init_phys_lmdz_omp_data
     89  END SUBROUTINE Init_phys_lmdz_omp_data
    9090
    91   SUBROUTINE print_module_data
     91  SUBROUTINE Print_module_data
    9292  IMPLICIT NONE
    9393  INCLUDE "iniprint.h"
     
    106106!$OMP END CRITICAL
    107107
    108   END SUBROUTINE print_module_data
     108  END SUBROUTINE Print_module_data
    109109END MODULE mod_phys_lmdz_omp_data
  • trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_omp_transfert.F90

    r1521 r1543  
    2525                     bcast_omp_i,bcast_omp_i1,bcast_omp_i2,bcast_omp_i3,bcast_omp_i4, &
    2626                     bcast_omp_r,bcast_omp_r1,bcast_omp_r2,bcast_omp_r3,bcast_omp_r4, &
    27                      bcast_omp_l,bcast_omp_l1,bcast_omp_l2,bcast_omp_l3,bcast_omp_l4
     27                     bcast_omp_l,bcast_omp_l1,bcast_omp_l2,bcast_omp_l3,bcast_omp_l4
    2828  END INTERFACE
    2929
     
    3131    MODULE PROCEDURE scatter_omp_i,scatter_omp_i1,scatter_omp_i2,scatter_omp_i3, &
    3232                     scatter_omp_r,scatter_omp_r1,scatter_omp_r2,scatter_omp_r3, &
    33                      scatter_omp_l,scatter_omp_l1,scatter_omp_l2,scatter_omp_l3
     33                     scatter_omp_l,scatter_omp_l1,scatter_omp_l2,scatter_omp_l3
    3434  END INTERFACE
    3535
     
    3838    MODULE PROCEDURE gather_omp_i,gather_omp_i1,gather_omp_i2,gather_omp_i3, &
    3939                     gather_omp_r,gather_omp_r1,gather_omp_r2,gather_omp_r3, &
    40                      gather_omp_l,gather_omp_l1,gather_omp_l2,gather_omp_l3 
     40                     gather_omp_l,gather_omp_l1,gather_omp_l2,gather_omp_l3 
    4141  END INTERFACE
    4242 
     
    4848
    4949
    50   PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp
     50  PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp, omp_barrier
    5151
    5252CONTAINS
    5353
     54  SUBROUTINE omp_barrier
     55  IMPLICIT NONE
     56
     57!$OMP BARRIER
     58
     59  END SUBROUTINE omp_barrier
     60 
    5461  SUBROUTINE check_buffer_i(buff_size)
    5562  IMPLICIT NONE
     
    733740  IMPLICIT NONE
    734741   
     742    INTEGER,INTENT(IN) :: Nb
    735743    INTEGER,DIMENSION(Nb),INTENT(INOUT) :: Var
    736744    INTEGER,DIMENSION(Nb),INTENT(INOUT) :: Buff
    737     INTEGER,INTENT(IN) :: Nb
    738745
    739746    INTEGER :: i
     
    757764  IMPLICIT NONE
    758765   
     766    INTEGER,INTENT(IN) :: Nb
    759767    REAL,DIMENSION(Nb),INTENT(INOUT) :: Var
    760768    REAL,DIMENSION(Nb),INTENT(INOUT) :: Buff
    761     INTEGER,INTENT(IN) :: Nb
    762769
    763770    INTEGER :: i
     
    780787  IMPLICIT NONE
    781788   
     789    INTEGER,INTENT(IN) :: Nb
    782790    LOGICAL,DIMENSION(Nb),INTENT(INOUT) :: Var
    783791    LOGICAL,DIMENSION(Nb),INTENT(INOUT) :: Buff
    784     INTEGER,INTENT(IN) :: Nb
    785792 
    786793    INTEGER :: i
  • trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_para.F90

    r1521 r1543  
    1616CONTAINS
    1717
    18   SUBROUTINE init_phys_lmdz_para(iim,jjp1,nb_proc,distrib)
     18  SUBROUTINE Init_phys_lmdz_para(nbp,nbp_lon,nbp_lat,communicator)
    1919  IMPLICIT NONE
    20     INTEGER,INTENT(in) :: iim
    21     INTEGER,INTENT(in) :: jjp1
    22     INTEGER,INTENT(in) :: nb_proc
    23     INTEGER,INTENT(in) :: distrib(0:nb_proc-1)
     20    INTEGER,INTENT(in) :: nbp
     21    INTEGER,INTENT(in) :: nbp_lon
     22    INTEGER,INTENT(in) :: nbp_lat
     23    INTEGER,INTENT(in) :: communicator
    2424
    25     CALL init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)
     25    CALL Init_phys_lmdz_mpi_data(nbp,nbp_lon,nbp_lat,communicator)
    2626!$OMP PARALLEL
    27     CALL init_phys_lmdz_omp_data(klon_mpi)
     27    CALL Init_phys_lmdz_omp_data(klon_mpi)
    2828    klon_loc=klon_omp
    2929    IF (is_mpi_root .AND. is_omp_root) THEN
     
    3232       is_master=.FALSE.
    3333     ENDIF
    34     CALL test_transfert
     34     CALL Test_transfert
    3535!$OMP END PARALLEL   
    3636     IF (is_using_mpi .OR. is_using_omp) THEN
     
    4242     ENDIF
    4343     
    44   END SUBROUTINE init_phys_lmdz_para
     44  END SUBROUTINE Init_phys_lmdz_para
    4545
    46   SUBROUTINE test_transfert
     46  SUBROUTINE Test_transfert
    4747  USE mod_grid_phy_lmdz
    4848  IMPLICIT NONE
     
    108108   
    109109     
    110    END SUBROUTINE test_transfert
     110   END SUBROUTINE Test_transfert
    111111 
    112112END MODULE mod_phys_lmdz_para
  • trunk/LMDZ.COMMON/libf/phy_common/write_field_phy.F90

    r1523 r1543  
    11!
    2 ! $Header$
     2! $Id: write_field_phy.F90 2342 2015-08-19 13:21:38Z emillour $
    33!
    44MODULE write_field_phy
    55
     6  ! Dump a field on the global (nbp_lon by nbp_lat) physics grid
     7 
    68  CONTAINS
    79 
    810    SUBROUTINE WriteField_phy(name,Field,ll)
    9     USE dimphy
    10     USE mod_phys_lmdz_para
    11     USE mod_grid_phy_lmdz
    12     USE Write_Field
     11    USE mod_phys_lmdz_para, ONLY: klon_omp, is_mpi_root, &
     12                                  Gather
     13    USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, klon_glo, &
     14                                 Grid1Dto2D_glo
     15    USE Write_Field, ONLY: WriteField
    1316   
    1417    IMPLICIT NONE
    15     include 'dimensions.h'
    16     include 'paramet.h'
    1718
    18     character(len=*)  :: name
    19     INTEGER :: ll
    20     real, dimension(klon_omp,ll) :: Field
    21     real,save,allocatable :: Field_tmp(:,:)
     19    CHARACTER(len=*),INTENT(IN) :: name
     20    INTEGER,INTENT(IN) :: ll
     21    REAL,INTENT(IN) :: Field(klon_omp,ll)
     22
    2223    real, dimension(klon_glo,ll):: New_Field
    23     real, dimension(iim,jjp1,ll):: Field_2d
     24    real, dimension(nbp_lon,nbp_lat,ll):: Field_2d
    2425
    2526    CALL Gather(Field,New_Field)
Note: See TracChangeset for help on using the changeset viewer.