Changeset 1543 for trunk


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
Files:
15 added
9 deleted
92 edited

Legend:

Unmodified
Added
Removed
  • trunk/DOC/chantiers/commit_importants.log

    r1540 r1543  
    16851685- moved "iniprint.h" from dyn3d_common to misc (NB: it is used in both physics
    16861686  and dynamics; this should be cleaned up further...)
     1687
     1688**********************
     1689**** commit_v1543 ****
     1690**********************
     1691Ehouarn: Further adaptations to keep up with changes in LMDZ5 concerning
     1692physics/dynamics separation:
     1693* dyn3d:
     1694- adapted gcm.F so that all physics initializations are now done in iniphysiq.
     1695
     1696* dyn3dpar:
     1697- adapted gcm.F so that all physics initializations are now done in iniphysiq.
     1698- updated calfis_p.F to follow up with changes.
     1699- copied over updated "bands.F90" from LMDZ5.
     1700
     1701* dynphy_lonlat:
     1702- calfis_p.F90, mod_interface_dyn_phys.F90,
     1703  follow up of changes in phy_common/mod_* routines
     1704
     1705* phy_common:
     1706- added "geometry_mod.F90" to store information about the grid (replaces
     1707  phy*/comgeomphy.F90) and give variables friendlier names: rlond =>
     1708  longitude , rlatd => latitude, airephy => cell_area,
     1709  cuphy => dx , cvphy => dy
     1710- added "physics_distribution_mod.F90"
     1711- updated "mod_grid_phy_lmdz.F90", "mod_phys_lmdz_mpi_data.F90",
     1712  "mod_phys_lmdz_para.F90", "mod_phys_lmdz_mpi_transfert.F90",
     1713  "mod_grid_phy_lmdz.F90", "mod_phys_lmdz_omp_data.F90",
     1714  "mod_phys_lmdz_omp_transfert.F90", "write_field_phy.F90"
     1715  and "ioipsl_getin_p_mod.F90" to LMDZ5 versions.
     1716
     1717* phy[venus/titan/mars/std]:
     1718- removed "init_phys_lmdz.F90", "comgeomphy.F90"; adapted routines to use
     1719  geometry_mod (longitude, latitude, cell_area, etc.)
  • 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)
  • trunk/LMDZ.GENERIC/README

    r1542 r1543  
    12031203   comgeomphy.F90 instead
    12041204
    1205 
     1205== 22/04/2016 ==
     1206- Updates and cleanup wrt dynamics/physics separation:
     1207  Removed init_phys_lmdz.F90 and comgeomphy.F90 from phystd;
     1208  comgeomphy is replaced by geometry_mod (located in phy_common).
     1209  Added physics_distribution_mod.F90 in phy_common and
     1210  mod_interface_dyn_phys.F90 in dynphy_lonlat.
     1211  Added nrtype.F90 (contains math const. like PI, etc.) in "misc"
     1212
  • trunk/LMDZ.GENERIC/libf/dyn3d/gcm.F

    r1523 r1543  
    66     &                       iconser, ecritphy, idissip
    77!      use comgeomphy, only: initcomgeomphy
     8      USE mod_const_mpi, ONLY: COMM_LMDZ
    89      use filtreg_mod, only: inifilr
    910      USE comvert_mod, ONLY: ap,bp
     
    155156      REAL dtetaecdt(ip1jmp1,llm)
    156157      REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm)
    157       REAL vnat(ip1jm,llm),unat(ip1jmp1,llm)
    158158
    159159c-----------------------------------------------------------------------
     
    177177c-----------------------------------------------------------------------
    178178      CALL defrun_new( 99, .TRUE. )
    179 
    180 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    181 ! FH 2008/05/02
    182 ! A nettoyer. On ne veut qu'une ou deux routines d'interface
    183 ! dynamique -> physique pour l'initialisation
    184 !#ifdef CPP_PHYS
    185       CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
    186 !      call initcomgeomphy ! now done in iniphysiq
    187 !#endif
    188 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    189179
    190180! Initialize tracers
     
    260250!#ifdef CPP_PHYS
    261251!         CALL iniphysiq(iim,jjm,llm,daysec,day_ini,dtphys/nsplit_phys,
    262          CALL iniphysiq(iim,jjm,llm,daysec,day_ini,dtphys,
     252         CALL iniphysiq(iim,jjm,llm,
     253     &                  (jjm-1)*iim+2,comm_lmdz,
     254     &                  daysec,day_ini,dtphys,
    263255     &                  rlatu,rlatv,rlonu,rlonv,
    264256     &                  aire,cu,cv,rad,g,r,cpp,
  • trunk/LMDZ.GENERIC/libf/dynphy_lonlat/phystd/iniphysiq_mod.F90

    r1542 r1543  
    33CONTAINS
    44
    5 subroutine iniphysiq(ii,jj,nlayer,punjours, pdayref,ptimestep,           &
    6                rlatudyn,rlatvdyn,rlonudyn,rlonvdyn,airedyn,cudyn,cvdyn,  &
     5subroutine iniphysiq(ii,jj,nlayer, &
     6                     nbp, communicator, &
     7                     punjours, pdayref,ptimestep, &
     8                     rlatudyn,rlatvdyn,rlonudyn,rlonvdyn, &
     9                     airedyn,cudyn,cvdyn, &
    710                     prad,pg,pr,pcpp,iflag_phys)
    811
    9 use dimphy, only : klev ! number of atmospheric levels
    10 use mod_grid_phy_lmdz, only : klon_glo ! number of atmospheric columns
    11                                        ! (on full grid)
     12use dimphy, only : init_dimphy
     13use mod_grid_phy_lmdz, only : klon_glo, & ! number of atmospheric columns (on full grid)
     14                              regular_lonlat  ! regular longitude-latitude grid type
    1215use mod_phys_lmdz_para, only : klon_omp, & ! number of columns (on local omp grid)
    1316                               klon_omp_begin, & ! start index of local omp subgrid
     
    1518                               klon_mpi_begin ! start indes of columns (on local mpi grid)
    1619use control_mod, only: nday
    17 use comgeomphy, only : initcomgeomphy, &
    18                        cell_area, & ! physics grid area (m2)
    19                        dx, & ! cu coeff. (u_covariant = cu * u)
    20                        dy, & ! cv coeff. (v_covariant = cv * v)
    21                        longitude, & ! longitudes (rad)
    22                        latitude ! latitudes (rad)
     20use geometry_mod, only: init_geometry, &
     21                        cell_area, & ! physics grid area (m2)
     22                        longitude, & ! longitudes (rad)
     23                        latitude ! latitudes (rad)
     24!use comgeomphy, only : initcomgeomphy, &
     25!                       cell_area, & ! physics grid area (m2)
     26!                       dx, & ! cu coeff. (u_covariant = cu * u)
     27!                       dy, & ! cv coeff. (v_covariant = cv * v)
     28!                       longitude, & ! longitudes (rad)
     29!                       latitude ! latitudes (rad)
    2330use surf_heat_transp_mod, only: ini_surf_heat_transp
    2431use infotrac, only : nqtot ! number of advected tracers
     
    2633USE comvert_mod, ONLY: ap,bp,preff
    2734use inifis_mod, only: inifis
     35use physics_distribution_mod, only: init_physics_distribution
    2836use regular_lonlat_mod, only: init_regular_lonlat, &
    2937                              east, west, north, south, &
    3038                              north_east, north_west, &
    3139                              south_west, south_east
     40use mod_interface_dyn_phys, only: init_interface_dyn_phys
    3241use ioipsl_getin_p_mod, only: getin_p
    3342
     
    4756integer,intent(in) :: ii ! number of atmospheric coulumns along longitudes
    4857integer,intent(in) :: jj  ! number of atompsheric columns along latitudes
     58integer,intent(in) :: nbp ! number of physics columns for this MPI process
     59integer,intent(in) :: communicator ! MPI communicator
    4960real,intent(in) :: rlatudyn(jj+1) ! latitudes of the physics grid
    5061real,intent(in) :: rlatvdyn(jj) ! latitude boundaries of the physics grid
     
    5970
    6071integer :: ibegin,iend,offset
    61 integer :: i,j
     72integer :: i,j,k
    6273character(len=20) :: modname='iniphysiq'
    6374character(len=80) :: abort_message
     
    7182
    7283! global array, on full physics grid:
    73 real,allocatable :: latfi(:)
    74 real,allocatable :: lonfi(:)
    75 real,allocatable :: cufi(:)
    76 real,allocatable :: cvfi(:)
    77 real,allocatable :: airefi(:)
     84real,allocatable :: latfi_glo(:)
     85real,allocatable :: lonfi_glo(:)
     86real,allocatable :: cufi_glo(:)
     87real,allocatable :: cvfi_glo(:)
     88real,allocatable :: airefi_glo(:)
     89real,allocatable :: boundslonfi_glo(:,:)
     90real,allocatable :: boundslatfi_glo(:,:)
     91
     92! local arrays, on given MPI/OpenMP domain:
     93real,allocatable,save :: latfi(:)
     94real,allocatable,save :: lonfi(:)
     95real,allocatable,save :: cufi(:)
     96real,allocatable,save :: cvfi(:)
     97real,allocatable,save :: airefi(:)
     98real,allocatable,save :: boundslonfi(:,:)
     99real,allocatable,save :: boundslatfi(:,:)
     100!$OMP THREADPRIVATE (latfi,lonfi,cufi,cvfi,airefi,boundslonfi,boundslatfi)
    78101
    79102pi=2.*asin(1.0)
    80103
    81 IF (nlayer.NE.klev) THEN
    82   write(*,*) 'STOP in ',trim(modname)
    83   write(*,*) 'Problem with dimensions :'
    84   write(*,*) 'nlayer     = ',nlayer
    85   write(*,*) 'klev   = ',klev
    86   abort_message = ''
    87   CALL abort_gcm (modname,abort_message,1)
    88 ENDIF
    89 
    90 !IF (ngrid.NE.klon_glo) THEN
    91 !  write(*,*) 'STOP in ',trim(modname)
    92 !  write(*,*) 'Problem with dimensions :'
    93 !  write(*,*) 'ngrid     = ',ngrid
    94 !  write(*,*) 'klon   = ',klon_glo
    95 !  abort_message = ''
    96 !  CALL abort_gcm (modname,abort_message,1)
    97 !ENDIF
    98 
    99 !call init_phys_lmdz(iim,jjm+1,llm,1,(/(jjm-1)*iim+2/))
     104! Initialize Physics distibution and parameters and interface with dynamics
     105CALL init_physics_distribution(regular_lonlat,4, &
     106                                 nbp,ii,jj+1,nlayer,communicator)
     107CALL init_interface_dyn_phys
    100108
    101109! init regular global longitude-latitude grid points and boundaries
     
    122130
    123131! Generate global arrays on full physics grid
    124 allocate(latfi(klon_glo),lonfi(klon_glo),cufi(klon_glo),cvfi(klon_glo))
    125 latfi(1)=rlatudyn(1)
    126 lonfi(1)=0.
    127 cufi(1) = cudyn(1)
    128 cvfi(1) = cvdyn(1)
     132allocate(latfi_glo(klon_glo),lonfi_glo(klon_glo))
     133allocate(cufi_glo(klon_glo),cvfi_glo(klon_glo))
     134allocate(airefi_glo(klon_glo))
     135allocate(boundslonfi_glo(klon_glo,4))
     136allocate(boundslatfi_glo(klon_glo,4))
     137
     138! North pole
     139latfi_glo(1)=rlatudyn(1)
     140lonfi_glo(1)=0.
     141cufi_glo(1) = cudyn(1)
     142cvfi_glo(1) = cvdyn(1)
     143boundslonfi_glo(1,north_east)=0
     144boundslatfi_glo(1,north_east)=PI/2
     145boundslonfi_glo(1,north_west)=2*PI
     146boundslatfi_glo(1,north_west)=PI/2
     147boundslonfi_glo(1,south_west)=2*PI
     148boundslatfi_glo(1,south_west)=rlatvdyn(1)
     149boundslonfi_glo(1,south_east)=0
     150boundslatfi_glo(1,south_east)=rlatvdyn(1)
    129151DO j=2,jj
    130152  DO i=1,ii
    131     latfi((j-2)*ii+1+i)= rlatudyn(j)
    132     lonfi((j-2)*ii+1+i)= rlonvdyn(i)
    133     cufi((j-2)*ii+1+i) = cudyn((j-1)*(ii+1)+i)
    134     cvfi((j-2)*ii+1+i) = cvdyn((j-1)*(ii+1)+i)
     153    k=(j-2)*ii+1+i
     154    latfi_glo((j-2)*ii+1+i)= rlatudyn(j)
     155    lonfi_glo((j-2)*ii+1+i)= rlonvdyn(i)
     156    cufi_glo((j-2)*ii+1+i) = cudyn((j-1)*(ii+1)+i)
     157    cvfi_glo((j-2)*ii+1+i) = cvdyn((j-1)*(ii+1)+i)
     158    boundslonfi_glo(k,north_east)=rlonudyn(i)
     159    boundslatfi_glo(k,north_east)=rlatvdyn(j-1)
     160    boundslonfi_glo(k,north_west)=rlonudyn(i+1)
     161    boundslatfi_glo(k,north_west)=rlatvdyn(j-1)
     162    boundslonfi_glo(k,south_west)=rlonudyn(i+1)
     163    boundslatfi_glo(k,south_west)=rlatvdyn(j)
     164    boundslonfi_glo(k,south_east)=rlonudyn(i)
     165    boundslatfi_glo(k,south_east)=rlatvdyn(j)
    135166  ENDDO
    136167ENDDO
    137 latfi(klon_glo)= rlatudyn(jj+1)
    138 lonfi(klon_glo)= 0.
    139 cufi(klon_glo) = cudyn((ii+1)*jj+1)
    140 cvfi(klon_glo) = cvdyn((ii+1)*jj-ii)
     168! South pole
     169latfi_glo(klon_glo)= rlatudyn(jj+1)
     170lonfi_glo(klon_glo)= 0.
     171cufi_glo(klon_glo) = cudyn((ii+1)*jj+1)
     172cvfi_glo(klon_glo) = cvdyn((ii+1)*jj-ii)
     173boundslonfi_glo(klon_glo,north_east)= 0
     174boundslatfi_glo(klon_glo,north_east)= rlatvdyn(jj)
     175boundslonfi_glo(klon_glo,north_west)= 2*PI
     176boundslatfi_glo(klon_glo,north_west)= rlatvdyn(jj)
     177boundslonfi_glo(klon_glo,south_west)= 2*PI
     178boundslatfi_glo(klon_glo,south_west)= -PI/2
     179boundslonfi_glo(klon_glo,south_east)= 0
     180boundslatfi_glo(klon_glo,south_east)= -Pi/2
    141181
    142182! build airefi(), mesh area on physics grid
    143 allocate(airefi(klon_glo))
    144 CALL gr_dyn_fi(1,ii+1,jj+1,klon_glo,airedyn,airefi)
     183CALL gr_dyn_fi(1,ii+1,jj+1,klon_glo,airedyn,airefi_glo)
    145184! Poles are single points on physics grid
    146 airefi(1)=sum(airedyn(1:ii,1))
    147 airefi(klon_glo)=sum(airedyn(1:ii,jj+1))
     185airefi_glo(1)=sum(airedyn(1:ii,1))
     186airefi_glo(klon_glo)=sum(airedyn(1:ii,jj+1))
    148187
    149188! Sanity check: do total planet area match between physics and dynamics?
    150189total_area_dyn=sum(airedyn(1:ii,1:jj+1))
    151 total_area_phy=sum(airefi(1:klon_glo))
     190total_area_phy=sum(airefi_glo(1:klon_glo))
    152191IF (total_area_dyn/=total_area_phy) THEN
    153192  WRITE (lunout, *) 'iniphysiq: planet total surface discrepancy !!!'
     
    164203!$OMP PARALLEL
    165204! Now generate local lon/lat/cu/cv/area arrays
    166 call initcomgeomphy
    167 
    168 !!!!$OMP PARALLEL PRIVATE(ibegin,iend) &
    169 !!!     !$OMP SHARED(airefi,cufi,cvfi,lonfi,latfi)
     205allocate(latfi(klon_omp),lonfi(klon_omp),cufi(klon_omp),cvfi(klon_omp))
     206allocate(airefi(klon_omp))
     207allocate(boundslonfi(klon_omp,4))
     208allocate(boundslatfi(klon_omp,4))
     209!call initcomgeomphy
    170210
    171211offset=klon_mpi_begin-1
    172 cell_area(1:klon_omp)=airefi(offset+klon_omp_begin:offset+klon_omp_end)
    173 dx(1:klon_omp)=cufi(offset+klon_omp_begin:offset+klon_omp_end)
    174 dy(1:klon_omp)=cvfi(offset+klon_omp_begin:offset+klon_omp_end)
    175 longitude(1:klon_omp)=lonfi(offset+klon_omp_begin:offset+klon_omp_end)
    176 latitude(1:klon_omp)=latfi(offset+klon_omp_begin:offset+klon_omp_end)
     212airefi(1:klon_omp)=airefi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     213cufi(1:klon_omp)=cufi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     214cvfi(1:klon_omp)=cvfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     215lonfi(1:klon_omp)=lonfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     216latfi(1:klon_omp)=latfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     217boundslonfi(1:klon_omp,:)=boundslonfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
     218boundslatfi(1:klon_omp,:)=boundslatfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
     219
     220! copy over local grid longitudes and latitudes
     221CALL init_geometry(klon_omp,lonfi,latfi,boundslonfi,boundslatfi, &
     222                   airefi,cufi,cvfi)
     223
     224call init_dimphy(klon_omp,nlayer) ! Initialize dimphy module
    177225
    178226! copy over preff , ap() and bp()
  • trunk/LMDZ.GENERIC/libf/dynphy_lonlat/phystd/newstart.F

    r1524 r1543  
    1515c=======================================================================
    1616
     17      use mod_phys_lmdz_para, only: is_parallel, is_sequential,
     18     &                              is_mpi_root, is_omp_root,
     19     &                              is_master
    1720      use infotrac, only: infotrac_init, nqtot, tname
    1821      USE tracer_h, ONLY: igcm_co2_ice, igcm_h2o_vap, igcm_h2o_ice
     
    2023      USE surfdat_h, ONLY: phisfi, albedodat,
    2124     &                     zmea, zstd, zsig, zgam, zthe
    22       USE comgeomfi_h, ONLY: lati, long, area
    2325      use datafile_mod, only: datadir, surfdir
    2426      use ioipsl_getin_p_mod, only: getin_p
     
    2628      use phyredem, only: physdem0, physdem1
    2729      use iostart, only: open_startphy
    28       use comgeomphy, only: initcomgeomphy
    2930      use slab_ice_h, only:noceanmx
    3031      use filtreg_mod, only: inifilr
     32      USE mod_const_mpi, ONLY: COMM_LMDZ
    3133      USE comvert_mod, ONLY: ap,bp,aps,bps,pa,preff
    3234      USE comconst_mod, ONLY: lllm,daysec,dtvr,dtphys,cpp,kappa,
    33      .                  rad,omeg,g,r,pi
     35     .                        rad,omeg,g,r,pi
    3436      USE serre_mod, ONLY: alphax
    3537      USE temps_mod, ONLY: day_ini
    3638      USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0
    37       use inifis_mod, only: inifis
     39      use iniphysiq_mod, only: iniphysiq
    3840      implicit none
    3941
    40 #include "dimensions.h"
    41 !#include "dimphys.h"
     42      include "dimensions.h"
    4243      integer, parameter :: ngridmx = (2+(jjm-1)*iim - 1/jjm)
    43 !#include "planete.h"
    44 #include "paramet.h"
    45 #include "comgeom2.h"
    46 !#include "control.h"
    47 #include "comdissnew.h"
    48 #include "netcdf.inc"
    49 !#include "advtrac.h"
     44      include "paramet.h"
     45      include "comgeom2.h"
     46      include "comdissnew.h"
     47      include "netcdf.inc"
     48
    5049c=======================================================================
    5150c   Declarations
     
    5453c Variables dimension du fichier "start_archive"
    5554c------------------------------------
    56       CHARACTER relief*3
     55      CHARACTER        relief*3
    5756
    5857
     
    9493c variable physique
    9594c------------------
    96       REAL tsurf(ngridmx)       ! surface temperature
    97       REAL tsoil(ngridmx,nsoilmx) ! soil temperature
    98 !      REAL co2ice(ngridmx)     ! CO2 ice layer
    99       REAL emis(ngridmx)        ! surface emissivity
     95      REAL tsurf(ngridmx)        ! surface temperature
     96      REAL,ALLOCATABLE :: tsoil(:,:) ! soil temperature
     97!      REAL co2ice(ngridmx)        ! CO2 ice layer
     98      REAL emis(ngridmx)        ! surface emissivity
    10099      real emisread             ! added by RW
    101100      REAL,ALLOCATABLE :: qsurf(:,:)
     
    103102!      REAL rnaturfi(ngridmx)
    104103      real alb(iip1,jjp1),albfi(ngridmx) ! albedos
    105       real ith(iip1,jjp1,nsoilmx),ithfi(ngridmx,nsoilmx) ! thermal inertia (3D)
     104      real,ALLOCATABLE :: ith(:,:,:),ithfi(:,:) ! thermal inertia (3D)
    106105      real surfith(iip1,jjp1),surfithfi(ngridmx) ! surface thermal inertia (2D)
    107106      REAL latfi(ngridmx),lonfi(ngridmx),airefi(ngridmx)
     
    113112
    114113      REAL rnat(ngridmx)
    115       REAL tslab(ngridmx,nsoilmx) ! slab ocean temperature
     114      REAL,ALLOCATABLE :: tslab(:,:) ! slab ocean temperature
    116115      REAL pctsrf_sic(ngridmx) ! sea ice cover
    117116      REAL tsea_ice(ngridmx) ! temperature sea_ice
     
    145144      character*80      fichnom
    146145      character*250  filestring
    147       integer Lmodif,iq,thermo
     146      integer Lmodif,iq
    148147      character modif*20
    149148      real z_reel(iip1,jjp1)
     
    155154      real val, val2, val3, val4 ! to store temporary variables
    156155      real :: iceith=2000 ! thermal inertia of subterranean ice
    157       integer iref,jref
    158156
    159157      INTEGER :: itau
    160158     
    161       INTEGER :: nq,numvanle
    162159      character(len=20) :: txt ! to store some text
    163160      character(len=50) :: surfacefile ! "surface.nc" (or equivalent file)
     
    166163      real :: profile(llm+1) ! to store an atmospheric profile + surface value
    167164
    168 !     added by RW for test
    169       real pmean, phi0
    170 
    171165!     added by BC for equilibrium temperature startup
    172166      real teque
     
    193187                  ! make deliberate choice of these values elsewhere.
    194188
     189      planet_type="generic"
     190
    195191! initialize "serial/parallel" related stuff
    196       CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
    197       call initcomgeomphy
     192! (required because we call tabfi() below, before calling iniphysiq)
     193      is_sequential=.true.
     194      is_parallel=.false.
     195      is_mpi_root=.true.
     196      is_omp_root=.true.
     197      is_master=.true.
     198     
    198199! Load tracer number and names:
    199 !      call iniadvtrac(nqtot,numvanle)
    200200      call infotrac_init
    201201! allocate arrays
     
    203203      allocate(qsurf(ngridmx,nqtot))
    204204     
    205       planet_type="generic"
    206 
     205! get value of nsoilmx and allocate corresponding arrays
     206      nsoilmx=18 ! default value
     207      call getin_p("nsoilmx",nsoilmx)
     208     
     209      allocate(tsoil(ngridmx,nsoilmx))
     210      allocate(ith(iip1,jjp1,nsoilmx),ithfi(ngridmx,nsoilmx))
     211      allocate(tslab(ngridmx,nsoilmx))
     212     
    207213c=======================================================================
    208214c   Choice of the start file(s) to use
     
    284290      IF (.not. ALLOCATED(zgam)) ALLOCATE(zgam(ngridmx))
    285291      IF (.not. ALLOCATED(zthe)) ALLOCATE(zthe(ngridmx))
    286       ! ALLOCATE ARRAYS in comsoil_h (if not already done)
    287       IF (.not.ALLOCATED(layer))
    288      . ALLOCATE(layer(nsoilmx))
    289       IF (.not.ALLOCATED(mlayer))
    290      . ALLOCATE(mlayer(0:nsoilmx-1))
    291       IF (.not.ALLOCATED(inertiedat))
    292      . ALLOCATE(inertiedat(ngridmx,nsoilmx))
    293       ! ALLOCATE ARRAYS IN comgeomfi_h (done in inifis usually)
    294       IF (.not. ALLOCATED(lati)) ALLOCATE(lati(ngridmx))
    295       IF (.not. ALLOCATED(long)) ALLOCATE(long(ngridmx))
    296       IF (.not. ALLOCATED(area)) ALLOCATE(area(ngridmx))
    297292
    298293c-----------------------------------------------------------------------
     
    337332          write(*,*) i,tab_cntrl(i)
    338333        enddo
    339        
     334       
    340335        ! Lmodif set to 0 to disable modifications possibility in phyeta0                           
    341336        write(*,*) 'Reading file START'
     
    355350        do i=1,ngridmx
    356351          albfi(i) = albedodat(i)
    357           do j=1,nsoilmx
     352          do j=1,nsoilmx
    358353           ithfi(i,j) = inertiedat(i,j)
    359           enddo
     354          enddo
    360355        ! build a surfithfi(:) using 1st layer of ithfi(:), which might
    361356        ! be needed later on if reinitializing soil thermal inertia
     
    371366      endif
    372367c-----------------------------------------------------------------------
    373 c               Initialisation des constantes dynamique
     368c                Initialisation des constantes dynamique
    374369c-----------------------------------------------------------------------
    375370
     
    451446      idum=0
    452447
    453 c Initialisation coordonnees /aires
    454 c -------------------------------
    455 ! Note: rlatu(:) and rlonv(:) are commons defined in "comgeom.h"
    456 !       rlatu() and rlonv() are given in radians
    457       latfi(1)=rlatu(1)
    458       lonfi(1)=0.
    459       DO j=2,jjm
    460          DO i=1,iim
    461             latfi((j-2)*iim+1+i)=rlatu(j)
    462             lonfi((j-2)*iim+1+i)=rlonv(i)
    463          ENDDO
    464       ENDDO
    465       latfi(ngridmx)=rlatu(jjp1)
    466       lonfi(ngridmx)=0.
    467        
    468       ! build airefi(), mesh area on physics grid
    469       CALL gr_dyn_fi(1,iip1,jjp1,ngridmx,aire,airefi)
    470       ! Poles are single points on physics grid
    471       airefi(1)=sum(aire(1:iim,1))
    472       airefi(ngridmx)=sum(aire(1:iim,jjm+1))
    473 
    474 ! also initialize various physics flags/settings which might be needed
    475 !    (for instance initracer needs to know about some flags, and/or
    476 !      'datafile' path may be changed by user)
    477       call inifis(ngridmx,llm,nqtot,day_ini,daysec,dtphys,
    478      &                latfi,lonfi,airefi,rad,g,r,cpp)
     448! Initialize the physics
     449         CALL iniphysiq(iim,jjm,llm,
     450     &                  (jjm-1)*iim+2,comm_lmdz,
     451     &                  daysec,day_ini,dtphys,
     452     &                  rlatu,rlatv,rlonu,rlonv,
     453     &                  aire,cu,cv,rad,g,r,cpp,
     454     &                  1)
    479455
    480456c=======================================================================
     
    560536     &   rnat,pctsrf_sic,tslab,tsea_ice,sea_ice)
    561537        write(*,*) "OK, read start_archive file"
    562         ! copy soil thermal inertia
    563         ithfi(:,:)=inertiedat(:,:)
    564        
     538        ! copy soil thermal inertia
     539        ithfi(:,:)=inertiedat(:,:)
     540       
    565541        ierr= NF_CLOSE(nid)
    566542
     
    727703          DO j=1,jjp1
    728704             DO i=1,iip1
    729                 alb(i,j) = alb_bb       ! albedo
    730                 do isoil=1,nsoilmx
    731                   ith(i,j,isoil) = ith_bb       ! thermal inertia
    732                 enddo
     705                alb(i,j) = alb_bb        ! albedo
     706                do isoil=1,nsoilmx
     707                  ith(i,j,isoil) = ith_bb        ! thermal inertia
     708                enddo
    733709             END DO
    734710          END DO
     
    867843         if (yes.eq.'y') then
    868844           write(*,*) 'Value?'
    869                 read(*,*,iostat=ierr) psea
     845                read(*,*,iostat=ierr) psea
    870846             DO i=1,iip1
    871847               DO j=1,jjp1
     
    874850                  ENDDO
    875851               ENDDO
    876                 write(*,*) 'psea=',psea
     852                write(*,*) 'psea=',psea
    877853          else
    878854            write(*,*) 'no'
     
    14671443!       ----------------------------------------------------------------------
    14681444
    1469         else if (trim(modif) .eq. 'therm_ini_s') then
     1445        else if (trim(modif) .eq. 'therm_ini_s') then
    14701446!          write(*,*)"surfithfi(1):",surfithfi(1)
    1471           do isoil=1,nsoilmx
    1472             inertiedat(1:ngridmx,isoil)=surfithfi(1:ngridmx)
    1473           enddo
     1447          do isoil=1,nsoilmx
     1448            inertiedat(1:ngridmx,isoil)=surfithfi(1:ngridmx)
     1449          enddo
    14741450          write(*,*)'OK: Soil thermal inertia has been reset to referenc
    14751451     &e surface values'
    1476 !         write(*,*)"inertiedat(1,1):",inertiedat(1,1)
    1477           ithfi(:,:)=inertiedat(:,:)
    1478         ! recast ithfi() onto ith()
    1479         call gr_fi_dyn(nsoilmx,ngridmx,iip1,jjp1,ithfi,ith)
     1452!          write(*,*)"inertiedat(1,1):",inertiedat(1,1)
     1453          ithfi(:,:)=inertiedat(:,:)
     1454        ! recast ithfi() onto ith()
     1455        call gr_fi_dyn(nsoilmx,ngridmx,iip1,jjp1,ithfi,ith)
    14801456! Check:
    14811457!         do i=1,iip1
     
    14851461!             enddo
    14861462!           enddo
    1487 !        enddo
     1463!        enddo
    14881464
    14891465
     
    16601636
    16611637c=======================================================================
    1662 c       Formats
     1638c        Formats
    16631639c=======================================================================
    16641640
  • trunk/LMDZ.GENERIC/libf/dynphy_lonlat/phystd/start2archive.F

    r1478 r1543  
    2121      use infotrac, only: infotrac_init, nqtot, tname
    2222      USE comsoil_h
    23       USE comgeomfi_h, ONLY: lati, long, area
     23     
     24!      USE comgeomfi_h, ONLY: lati, long, area
    2425!      use control_mod
    25       use comgeomphy, only: initcomgeomphy
     26!      use comgeomphy, only: initcomgeomphy
    2627      use slab_ice_h, only: noceanmx
    2728! to use  'getin'
    2829      USE ioipsl_getincom
    2930      USE planete_mod, only: year_day
     31      USE mod_const_mpi, ONLY: COMM_LMDZ
    3032      USE control_mod, only: planet_type
    3133      USE callkeys_mod, ONLY: ok_slab_ocean
    3234      use filtreg_mod, only: inifilr
    3335      USE comvert_mod, ONLY: ap,bp
    34       USE comconst_mod, ONLY: cpp,g
     36      USE comconst_mod, ONLY: daysec,dtphys,rad,g,r,cpp
    3537      USE logic_mod, ONLY: grireg
    3638      USE temps_mod, ONLY: day_ini
     39      USE iniphysiq_mod, ONLY: iniphysiq
    3740      implicit none
    3841
    39 #include "dimensions.h"
     42      include "dimensions.h"
    4043      integer, parameter :: ngridmx = (2+(jjm-1)*iim - 1/jjm)
    41 #include "paramet.h"
    42 #include "comdissip.h"
    43 #include "comgeom.h"
     44      include "paramet.h"
     45      include "comdissip.h"
     46      include "comgeom.h"
    4447!#include "control.h"
    4548
     
    4750!#include "planete.h"
    4851!#include"advtrac.h"
    49 #include "netcdf.inc"
     52      include "netcdf.inc"
    5053c-----------------------------------------------------------------------
    5154c   Declarations
     
    6871c Variable Physiques (grille physique)
    6972c ------------------------------------
    70       REAL tsurf(ngridmx)       ! Surface temperature
    71       REAL tsoil(ngridmx,nsoilmx) ! Soil temperature
    72       REAL co2ice(ngridmx)      ! CO2 ice layer
     73      REAL tsurf(ngridmx)        ! Surface temperature
     74      REAL,ALLOCATABLE :: tsoil(:,:) ! Soil temperature
     75      REAL co2ice(ngridmx)        ! CO2 ice layer
    7376      REAL q2(ngridmx,llm+1)
    7477      REAL,ALLOCATABLE :: qsurf(:,:)
     
    9396      REAL T(ip1jmp1,llm),us(ip1jmp1,llm),vs(ip1jmp1,llm)
    9497      REAL tsurfS(ip1jmp1)
    95       REAL tsoilS(ip1jmp1,nsoilmx)
    96       REAL ithS(ip1jmp1,nsoilmx) ! Soil Thermal Inertia
     98      REAL,ALLOCATABLE :: tsoilS(:,:)
     99      REAL,ALLOCATABLE :: ithS(:,:) ! Soil Thermal Inertia
    97100      REAL co2iceS(ip1jmp1)
    98101      REAL q2S(ip1jmp1,llm+1)
     
    144147      grireg   = .TRUE.
    145148
    146 ! initialize "serial/parallel" related stuff
    147       CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
    148       call initcomgeomphy
    149 
    150       ! ALLOCATE ARRAYS IN comgeomfi_h (usually done in inifis)
    151       ! this must be here for start2archive to work
    152       IF (.not. ALLOCATED(lati)) ALLOCATE(lati(ngridmx))
    153       IF (.not. ALLOCATED(long)) ALLOCATE(long(ngridmx))
    154       IF (.not. ALLOCATED(area)) ALLOCATE(area(ngridmx))
    155 
    156149      planet_type="generic"
    157150
     
    160153c=======================================================================
    161154! Load tracer number and names:
    162 !      call iniadvtrac(nqtot,numvanle)
    163155      call infotrac_init
    164156
     
    168160      allocate(qsurfS(ip1jmp1,nqtot))
    169161! other array allocations:
    170       call ini_comsoil_h(ngridmx)
     162!      call ini_comsoil_h(ngridmx) ! done via iniphysiq
    171163
    172164      fichnom = 'start.nc'
     
    198190
    199191      ierr = NF_CLOSE(nid1)
     192
     193! Get value of the "subsurface_layers" dimension from physics start file
     194      fichnom = 'startfi.nc'
     195      ierr = NF_OPEN (fichnom, NF_NOWRITE,nid1)
     196       IF (ierr.NE.NF_NOERR) THEN
     197         write(6,*)' Pb d''ouverture du fichier'//trim(fichnom)
     198        CALL ABORT
     199       ENDIF
     200      ierr = NF_INQ_DIMID(nid1,"subsurface_layers",varid)
     201      IF (ierr .NE. NF_NOERR) THEN
     202       PRINT*, "start2archive: No subsurface_layers dimension!!"
     203       CALL abort
     204      ENDIF
     205      ierr = NF_INQ_DIMLEN(nid1,varid,nsoilmx)
     206      IF (ierr .NE. NF_NOERR) THEN
     207       PRINT*, "start2archive: Failed reading subsurface_layers value!!"
     208       CALL abort
     209      ENDIF
     210      ierr = NF_CLOSE(nid1)
    200211     
     212      ! allocate arrays of nsoilmx size
     213      allocate(tsoil(ngridmx,nsoilmx))
     214      allocate(tsoilS(ip1jmp1,nsoilmx))
     215      allocate(ithS(ip1jmp1,nsoilmx))
     216
     217c-----------------------------------------------------------------------
     218c   Initialisations
     219c-----------------------------------------------------------------------
     220
     221      CALL defrun_new(99, .FALSE. )
     222      call iniconst
     223      call inigeom
     224      call inifilr
     225
     226! Initialize the physics
     227         CALL iniphysiq(iim,jjm,llm,
     228     &                  (jjm-1)*iim+2,comm_lmdz,
     229     &                  daysec,day_ini,dtphys,
     230     &                  rlatu,rlatv,rlonu,rlonv,
     231     &                  aire,cu,cv,rad,g,r,cpp,
     232     &                  1)
    201233
    202234      fichnom = 'startfi.nc'
     
    256288c *****************************************************************
    257289
    258 c-----------------------------------------------------------------------
    259 c   Initialisations
    260 c-----------------------------------------------------------------------
    261 
    262       CALL defrun_new(99, .FALSE. )
    263       call iniconst
    264       call inigeom
    265       call inifilr
    266290      CALL pression(ip1jmp1, ap, bp, ps, p3d)
    267291      call exner_hyb(ip1jmp1, ps, p3d, beta, pks, pk, pkf)
  • trunk/LMDZ.GENERIC/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.GENERIC/libf/phy_common/mod_grid_phy_lmdz.F90

    r1521 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
    14 !$OMP THREADPRIVATE(nbp_lon,nbp_lat,nbp_lev,klon_glo)
     18  INTEGER,SAVE :: klon_glo ! total number of atmospheric columns
    1519
    1620  INTERFACE grid1dTo2d_glo
     
    3337
    3438
    35   SUBROUTINE init_grid_phy_lmdz(iim,jjp1,llm)
     39  SUBROUTINE init_grid_phy_lmdz(grid_type_,nvertex_,nbp_lon_,nbp_lat_,nbp_lev_)
    3640  IMPLICIT NONE
    37   INTEGER, INTENT(in) :: iim
    38   INTEGER, INTENT(in) :: jjp1
    39   INTEGER, INTENT(in) :: llm
    40  
    41     nbp_lon=iim
    42     nbp_lat=jjp1
    43     nbp_lev=llm
    44     klon_glo=(iim*jjp1)-2*(iim-1)
    45  
    46   ! Ehouarn: handle 1D case:
    47   if ((iim.eq.1).and.(jjp1.eq.2)) then
    48     nbp_lat=1
    49     klon_glo=1
    50   endif
     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   
     53    IF (nbp_lon*nbp_lat==1) THEN
     54      klon_glo=1
     55    ELSE   
     56      klon_glo=(nbp_lon*nbp_lat)-2*(nbp_lon-1)
     57    ENDIF
    5158 
    5259  END SUBROUTINE init_grid_phy_lmdz
     
    284291
    285292!----------------------------------------------------------------
    286 fonctions generiques (privees)
     293Generic (private) fonctions
    287294!----------------------------------------------------------------
     295 
    288296  SUBROUTINE grid1dTo2d_glo_igen(VarIn,VarOut,dimsize)
     297
    289298    IMPLICIT NONE
    290299
     
    321330
    322331  SUBROUTINE grid1dTo2d_glo_rgen(VarIn,VarOut,dimsize)
     332
    323333    IMPLICIT NONE
    324334
     
    354364
    355365  SUBROUTINE grid1dTo2d_glo_lgen(VarIn,VarOut,dimsize)
     366
    356367    IMPLICIT NONE
    357368   
     
    387398 
    388399  SUBROUTINE grid2dTo1d_glo_igen(VarIn,VarOut,dimsize)
     400
    389401    IMPLICIT NONE
    390402
     
    409421 
    410422  SUBROUTINE grid2dTo1d_glo_rgen(VarIn,VarOut,dimsize)
     423
    411424    IMPLICIT NONE
    412425
     
    431444   
    432445  SUBROUTINE grid2dTo1d_glo_lgen(VarIn,VarOut,dimsize)
     446
    433447    IMPLICIT NONE
    434448
  • trunk/LMDZ.GENERIC/libf/phy_common/mod_phys_lmdz_mpi_data.F90

    r1521 r1543  
    33!
    44MODULE mod_phys_lmdz_mpi_data
    5   USE mod_const_mpi, only: MPI_REAL_LMDZ, COMM_LMDZ
     5!  USE mod_const_mpi
    66 
    77  INTEGER,SAVE :: ii_begin
     
    1616  INTEGER,SAVE :: klon_mpi_end
    1717  INTEGER,SAVE :: klon_mpi
    18 !!$OMP THREADPRIVATE(ii_begin,ii_end,jj_begin,jj_end,jj_nb,ij_begin,&
    19 !       !$OMP ij_end,ij_nb,klon_mpi_begin,klon_mpi_end,klon_mpi)
    2018 
    2119  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_nb
     
    3331  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: klon_mpi_para_begin
    3432  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: klon_mpi_para_end
    35 !!$OMP THREADPRIVATE(jj_para_nb,jj_para_begin,jj_para_end,ii_para_begin,ii_para_end,&
    36 !       !$OMP ij_para_nb,ij_para_begin,ij_para_end,klon_mpi_para_nb,klon_mpi_para_begin,&
    37 !       !$OMP klon_mpi_para_end)
    3833
    3934 
    4035  INTEGER,SAVE :: mpi_rank
    4136  INTEGER,SAVE :: mpi_size
    42   INTEGER,SAVE :: mpi_root
     37  INTEGER,SAVE :: mpi_master
     38!  INTEGER,SAVE :: mpi_root
    4339  LOGICAL,SAVE :: is_mpi_root
    4440  LOGICAL,SAVE :: is_using_mpi
    45 !!$OMP THREADPRIVATE(mpi_rank,mpi_size,mpi_root,is_mpi_root,is_using_mpi)
    4641 
    4742 
     
    4944  LOGICAL,SAVE :: is_south_pole
    5045  INTEGER,SAVE :: COMM_LMDZ_PHY
    51 !!$OMP THREADPRIVATE(is_north_pole,is_south_pole,COMM_LMDZ_PHY)
     46  INTEGER,SAVE :: MPI_REAL_LMDZ   ! MPI_REAL8
    5247
    5348CONTAINS
    5449 
    55   SUBROUTINE Init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)
    56   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
    5753  IMPLICIT NONE
    58     INTEGER,INTENT(in) :: iim
    59     INTEGER,INTENT(in) :: jjp1
    60     INTEGER,INTENT(in) :: nb_proc
    61     INTEGER,INTENT(in) :: distrib(0:nb_proc-1)
    62    
     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(:)
    6363    INTEGER :: ierr
    6464    INTEGER :: klon_glo
     
    7171#endif
    7272   
    73     if (iim.eq.1) then
     73    if ((nbp_lon.eq.1).and.(nbp_lat.eq.1)) then ! running 1D column model
    7474       klon_glo=1
    7575    else
    76        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
    7779    endif
    7880   
    79     COMM_LMDZ_PHY=COMM_LMDZ
     81    COMM_LMDZ_PHY=communicator
    8082
    8183    IF (is_using_mpi) THEN   
    8284#ifdef CPP_MPI
     85      MPI_REAL_LMDZ=MPI_REAL8
    8386      CALL MPI_COMM_SIZE(COMM_LMDZ_PHY,mpi_size,ierr)   
    8487      CALL MPI_COMM_RANK(COMM_LMDZ_PHY,mpi_rank,ierr)
     
    8992    ENDIF
    9093   
     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
    91105    IF (mpi_rank == 0) THEN
    92       mpi_root = 0
     106      mpi_master = 0
    93107      is_mpi_root = .true.
    94108    ENDIF
     
    122136 
    123137     
    124     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)
    125139
    126140    DO i=0,mpi_size-1
     
    139153        ij_para_begin(i) = 1
    140154      ELSE
    141         ij_para_begin(i) = klon_mpi_para_begin(i)+iim-1
     155        ij_para_begin(i) = klon_mpi_para_begin(i)+nbp_lon-1
    142156      ENDIF
    143157
    144       jj_para_begin(i) = (ij_para_begin(i)-1)/iim + 1
    145       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
    146160
    147161     
    148       ij_para_end(i) = klon_mpi_para_end(i)+iim-1
    149       jj_para_end(i) = (ij_para_end(i)-1)/iim + 1
    150       ii_para_end(i) = MOD(ij_para_end(i)-1,iim) + 1
    151 
    152       ! Ehouarn: handle 1D case:
    153       if (klon_glo.eq.1) then
    154         klon_mpi_para_end(i) = 1
    155         klon_mpi_para_nb(i) = 1
    156         ij_para_end(i) = 1
    157         jj_para_end(i) = 1
    158         ii_para_end(i) = 1
    159       endif
     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
     165
    160166
    161167      ij_para_nb(i) = ij_para_end(i)-ij_para_begin(i)+1
     
    181187
    182188  SUBROUTINE print_module_data
     189!  USE print_control_mod, ONLY: lunout
    183190  IMPLICIT NONE
    184 !  INCLUDE "iniprint.h"
    185  
    186     WRITE(*,*) 'ii_begin =', ii_begin
    187     WRITE(*,*) 'ii_end =', ii_end
    188     WRITE(*,*) 'jj_begin =',jj_begin
    189     WRITE(*,*) 'jj_end =', jj_end
    190     WRITE(*,*) 'jj_nb =', jj_nb
    191     WRITE(*,*) 'ij_begin =', ij_begin
    192     WRITE(*,*) 'ij_end =', ij_end
    193     WRITE(*,*) 'ij_nb =', ij_nb
    194     WRITE(*,*) 'klon_mpi_begin =', klon_mpi_begin
    195     WRITE(*,*) 'klon_mpi_end =', klon_mpi_end
    196     WRITE(*,*) 'klon_mpi =', klon_mpi
    197     WRITE(*,*) 'jj_para_nb =', jj_para_nb
    198     WRITE(*,*) 'jj_para_begin =', jj_para_begin
    199     WRITE(*,*) 'jj_para_end =', jj_para_end
    200     WRITE(*,*) 'ii_para_begin =', ii_para_begin
    201     WRITE(*,*) 'ii_para_end =', ii_para_end
    202     WRITE(*,*) 'ij_para_nb =', ij_para_nb
    203     WRITE(*,*) 'ij_para_begin =', ij_para_begin
    204     WRITE(*,*) 'ij_para_end =', ij_para_end
    205     WRITE(*,*) 'klon_mpi_para_nb =', klon_mpi_para_nb
    206     WRITE(*,*) 'klon_mpi_para_begin =', klon_mpi_para_begin
    207     WRITE(*,*) 'klon_mpi_para_end  =', klon_mpi_para_end
    208     WRITE(*,*) 'mpi_rank =', mpi_rank
    209     WRITE(*,*) 'mpi_size =', mpi_size
    210     WRITE(*,*) 'mpi_root =', mpi_root
    211     WRITE(*,*) 'is_mpi_root =', is_mpi_root
    212     WRITE(*,*) 'is_north_pole =', is_north_pole
    213     WRITE(*,*) 'is_south_pole =', is_south_pole
    214     WRITE(*,*) 'COMM_LMDZ_PHY =', COMM_LMDZ_PHY
     191  INCLUDE "iniprint.h"
     192 
     193    WRITE(lunout,*) 'ii_begin =', ii_begin
     194    WRITE(lunout,*) 'ii_end =', ii_end
     195    WRITE(lunout,*) 'jj_begin =',jj_begin
     196    WRITE(lunout,*) 'jj_end =', jj_end
     197    WRITE(lunout,*) 'jj_nb =', jj_nb
     198    WRITE(lunout,*) 'ij_begin =', ij_begin
     199    WRITE(lunout,*) 'ij_end =', ij_end
     200    WRITE(lunout,*) 'ij_nb =', ij_nb
     201    WRITE(lunout,*) 'klon_mpi_begin =', klon_mpi_begin
     202    WRITE(lunout,*) 'klon_mpi_end =', klon_mpi_end
     203    WRITE(lunout,*) 'klon_mpi =', klon_mpi
     204    WRITE(lunout,*) 'jj_para_nb =', jj_para_nb
     205    WRITE(lunout,*) 'jj_para_begin =', jj_para_begin
     206    WRITE(lunout,*) 'jj_para_end =', jj_para_end
     207    WRITE(lunout,*) 'ii_para_begin =', ii_para_begin
     208    WRITE(lunout,*) 'ii_para_end =', ii_para_end
     209    WRITE(lunout,*) 'ij_para_nb =', ij_para_nb
     210    WRITE(lunout,*) 'ij_para_begin =', ij_para_begin
     211    WRITE(lunout,*) 'ij_para_end =', ij_para_end
     212    WRITE(lunout,*) 'klon_mpi_para_nb =', klon_mpi_para_nb
     213    WRITE(lunout,*) 'klon_mpi_para_begin =', klon_mpi_para_begin
     214    WRITE(lunout,*) 'klon_mpi_para_end  =', klon_mpi_para_end
     215    WRITE(lunout,*) 'mpi_rank =', mpi_rank
     216    WRITE(lunout,*) 'mpi_size =', mpi_size
     217    WRITE(lunout,*) 'mpi_master =', mpi_master
     218    WRITE(lunout,*) 'is_mpi_root =', is_mpi_root
     219    WRITE(lunout,*) 'is_north_pole =', is_north_pole
     220    WRITE(lunout,*) 'is_south_pole =', is_south_pole
     221    WRITE(lunout,*) 'COMM_LMDZ_PHY =', COMM_LMDZ_PHY
    215222 
    216223  END SUBROUTINE print_module_data
  • trunk/LMDZ.GENERIC/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   
     
    514514
    515515  SUBROUTINE scatter2D_mpi_i(VarIn, VarOut)
    516     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     516    USE mod_grid_phy_lmdz
    517517    IMPLICIT NONE
    518518 
     
    528528
    529529  SUBROUTINE scatter2D_mpi_i1(VarIn, VarOut)
    530     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     530    USE mod_grid_phy_lmdz
    531531    IMPLICIT NONE
    532532 
     
    541541
    542542  SUBROUTINE scatter2D_mpi_i2(VarIn, VarOut)
    543     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     543    USE mod_grid_phy_lmdz
    544544    IMPLICIT NONE
    545545 
     
    555555 
    556556  SUBROUTINE scatter2D_mpi_i3(VarIn, VarOut)
    557     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     557    USE mod_grid_phy_lmdz
    558558    IMPLICIT NONE
    559559 
     
    570570
    571571  SUBROUTINE scatter2D_mpi_r(VarIn, VarOut)
    572     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     572    USE mod_grid_phy_lmdz
    573573    IMPLICIT NONE
    574574 
     
    585585
    586586  SUBROUTINE scatter2D_mpi_r1(VarIn, VarOut)
    587     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     587    USE mod_grid_phy_lmdz
    588588    IMPLICIT NONE
    589589    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
     
    599599
    600600  SUBROUTINE scatter2D_mpi_r2(VarIn, VarOut)
    601     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     601    USE mod_grid_phy_lmdz
    602602    IMPLICIT NONE
    603603 
     
    613613 
    614614  SUBROUTINE scatter2D_mpi_r3(VarIn, VarOut)
    615     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     615    USE mod_grid_phy_lmdz
    616616    IMPLICIT NONE
    617617 
     
    628628 
    629629  SUBROUTINE scatter2D_mpi_l(VarIn, VarOut)
    630     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     630    USE mod_grid_phy_lmdz
    631631    IMPLICIT NONE
    632632 
     
    643643
    644644  SUBROUTINE scatter2D_mpi_l1(VarIn, VarOut)
    645     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     645    USE mod_grid_phy_lmdz
    646646    IMPLICIT NONE
    647647 
     
    658658
    659659  SUBROUTINE scatter2D_mpi_l2(VarIn, VarOut)
    660     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     660    USE mod_grid_phy_lmdz
    661661    IMPLICIT NONE
    662662 
     
    672672 
    673673  SUBROUTINE scatter2D_mpi_l3(VarIn, VarOut)
    674     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     674    USE mod_grid_phy_lmdz
    675675    IMPLICIT NONE
    676676 
     
    691691
    692692  SUBROUTINE gather2D_mpi_i(VarIn, VarOut)
    693     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     693    USE mod_grid_phy_lmdz
    694694    IMPLICIT NONE
    695695 
     
    705705
    706706  SUBROUTINE gather2D_mpi_i1(VarIn, VarOut)
    707     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     707    USE mod_grid_phy_lmdz
    708708    IMPLICIT NONE
    709709 
     
    719719
    720720  SUBROUTINE gather2D_mpi_i2(VarIn, VarOut)
    721     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     721    USE mod_grid_phy_lmdz
    722722    IMPLICIT NONE
    723723 
     
    733733 
    734734  SUBROUTINE gather2D_mpi_i3(VarIn, VarOut)
    735     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     735    USE mod_grid_phy_lmdz
    736736    IMPLICIT NONE
    737737 
     
    749749
    750750  SUBROUTINE gather2D_mpi_r(VarIn, VarOut)
    751     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     751    USE mod_grid_phy_lmdz
    752752    IMPLICIT NONE
    753753 
     
    763763
    764764  SUBROUTINE gather2D_mpi_r1(VarIn, VarOut)
    765     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     765    USE mod_grid_phy_lmdz
    766766    IMPLICIT NONE
    767767 
     
    777777
    778778  SUBROUTINE gather2D_mpi_r2(VarIn, VarOut)
    779     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     779    USE mod_grid_phy_lmdz
    780780    IMPLICIT NONE
    781781 
     
    791791 
    792792  SUBROUTINE gather2D_mpi_r3(VarIn, VarOut)
    793     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     793    USE mod_grid_phy_lmdz
    794794    IMPLICIT NONE
    795795 
     
    807807 
    808808  SUBROUTINE gather2D_mpi_l(VarIn, VarOut)
    809     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     809    USE mod_grid_phy_lmdz
    810810    IMPLICIT NONE
    811811 
     
    821821
    822822  SUBROUTINE gather2D_mpi_l1(VarIn, VarOut)
    823     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     823    USE mod_grid_phy_lmdz
    824824    IMPLICIT NONE
    825825 
     
    835835
    836836  SUBROUTINE gather2D_mpi_l2(VarIn, VarOut)
    837     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     837    USE mod_grid_phy_lmdz
    838838    IMPLICIT NONE
    839839 
     
    849849 
    850850  SUBROUTINE gather2D_mpi_l3(VarIn, VarOut)
    851     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     851    USE mod_grid_phy_lmdz
    852852    IMPLICIT NONE
    853853 
     
    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)
    1321     if (ierr.ne.MPI_SUCCESS) then
    1322       write(*,*) "bcast_mpi error: ierr=",ierr
    1323       stop
    1324     endif
     1320    CALL MPI_BCAST(Var,nb,MPI_LOGICAL,mpi_master,COMM_LMDZ_PHY,ierr)
    13251321#endif
    13261322
     
    13301326
    13311327  SUBROUTINE scatter_mpi_igen(VarIn, VarOut, dimsize)
    1332     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1328    USE mod_phys_lmdz_mpi_data
    13331329    USE mod_grid_phy_lmdz
    13341330    IMPLICIT NONE
     
    13691365#ifdef CPP_MPI
    13701366    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_INTEGER,VarOut,klon_mpi*dimsize,   &
    1371                       MPI_INTEGER,mpi_root_x, COMM_LMDZ_PHY,ierr)
     1367                      MPI_INTEGER,mpi_master, COMM_LMDZ_PHY,ierr)
    13721368#endif
    13731369
     
    13751371
    13761372  SUBROUTINE scatter_mpi_rgen(VarIn, VarOut, dimsize)
    1377     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1373    USE mod_phys_lmdz_mpi_data
    13781374    USE mod_grid_phy_lmdz
    13791375    IMPLICIT NONE
     
    14131409#ifdef CPP_MPI
    14141410    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_REAL_LMDZ,VarOut,klon_mpi*dimsize,   &
    1415                       MPI_REAL_LMDZ,mpi_root_x, COMM_LMDZ_PHY,ierr)
     1411                      MPI_REAL_LMDZ,mpi_master, COMM_LMDZ_PHY,ierr)
    14161412
    14171413#endif
     
    14211417 
    14221418  SUBROUTINE scatter_mpi_lgen(VarIn, VarOut, dimsize)
    1423     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1419    USE mod_phys_lmdz_mpi_data
    14241420    USE mod_grid_phy_lmdz
    14251421    IMPLICIT NONE
     
    14591455#ifdef CPP_MPI
    14601456    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_LOGICAL,VarOut,klon_mpi*dimsize,   &
    1461                       MPI_LOGICAL,mpi_root_x, COMM_LMDZ_PHY,ierr)
     1457                      MPI_LOGICAL,mpi_master, COMM_LMDZ_PHY,ierr)
    14621458#endif
    14631459
     
    14681464
    14691465  SUBROUTINE gather_mpi_igen(VarIn, VarOut, dimsize)
    1470     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1466    USE mod_phys_lmdz_mpi_data
    14711467    USE mod_grid_phy_lmdz
    14721468    IMPLICIT NONE
     
    14971493        displs(rank)=Index-1
    14981494        counts(rank)=nb*dimsize
    1499         Index=Index+nb*dimsize
     1495        Index=Index+nb*dimsize
    15001496      ENDDO
    15011497     
     
    15041500#ifdef CPP_MPI
    15051501    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_INTEGER,VarTmp,counts,displs,   &
    1506                      MPI_INTEGER,mpi_root_x, COMM_LMDZ_PHY,ierr)
    1507 #endif
    1508 
    1509                          
     1502                     MPI_INTEGER,mpi_master, COMM_LMDZ_PHY,ierr)
     1503#endif
     1504
     1505                         
    15101506    IF (is_mpi_root) THEN
    15111507      Index=1
     
    15141510        DO i=1,dimsize
    15151511          VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
    1516           Index=Index+nb
     1512          Index=Index+nb
    15171513        ENDDO
    15181514      ENDDO
     
    15221518
    15231519  SUBROUTINE gather_mpi_rgen(VarIn, VarOut, dimsize)
    1524     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1520    USE mod_phys_lmdz_mpi_data
    15251521    USE mod_grid_phy_lmdz
    15261522    IMPLICIT NONE
     
    15461542        displs(rank)=Index-1
    15471543        counts(rank)=nb*dimsize
    1548         Index=Index+nb*dimsize
     1544        Index=Index+nb*dimsize
    15491545      ENDDO
    15501546    ENDIF
     
    15571553#ifdef CPP_MPI
    15581554    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_REAL_LMDZ,VarTmp,counts,displs,   &
    1559                       MPI_REAL_LMDZ,mpi_root_x, COMM_LMDZ_PHY,ierr)
    1560 #endif
    1561                          
     1555                      MPI_REAL_LMDZ,mpi_master, COMM_LMDZ_PHY,ierr)
     1556#endif
     1557                         
    15621558    IF (is_mpi_root) THEN
    15631559      Index=1
     
    15661562        DO i=1,dimsize
    15671563          VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
    1568           Index=Index+nb
     1564          Index=Index+nb
    15691565        ENDDO
    15701566      ENDDO
     
    15741570
    15751571  SUBROUTINE gather_mpi_lgen(VarIn, VarOut, dimsize)
    1576     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1572    USE mod_phys_lmdz_mpi_data
    15771573    USE mod_grid_phy_lmdz
    15781574    IMPLICIT NONE
     
    16031599        displs(rank)=Index-1
    16041600        counts(rank)=nb*dimsize
    1605         Index=Index+nb*dimsize
     1601        Index=Index+nb*dimsize
    16061602      ENDDO
    16071603    ENDIF
     
    16101606#ifdef CPP_MPI
    16111607    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_LOGICAL,VarTmp,counts,displs,   &
    1612                       MPI_LOGICAL,mpi_root_x, COMM_LMDZ_PHY,ierr)
    1613 #endif
    1614                          
     1608                      MPI_LOGICAL,mpi_master, COMM_LMDZ_PHY,ierr)
     1609#endif
     1610                         
    16151611    IF (is_mpi_root) THEN
    16161612      Index=1
     
    16191615        DO i=1,dimsize
    16201616          VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
    1621           Index=Index+nb
     1617          Index=Index+nb
    16221618        ENDDO
    16231619      ENDDO
     
    16291625
    16301626  SUBROUTINE reduce_sum_mpi_igen(VarIn,VarOut,nb)
    1631     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1627    USE mod_phys_lmdz_mpi_data
    16321628    USE mod_grid_phy_lmdz
    16331629    IMPLICIT NONE
     
    16371633#endif
    16381634   
     1635    INTEGER,INTENT(IN) :: nb
    16391636    INTEGER,DIMENSION(nb),INTENT(IN) :: VarIn
    16401637    INTEGER,DIMENSION(nb),INTENT(OUT) :: VarOut   
    1641     INTEGER,INTENT(IN) :: nb
    16421638    INTEGER :: ierr
    16431639   
     
    16491645
    16501646#ifdef CPP_MPI
    1651     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)
    16521648#endif
    16531649           
     
    16551651 
    16561652  SUBROUTINE reduce_sum_mpi_rgen(VarIn,VarOut,nb)
    1657     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1653    USE mod_phys_lmdz_mpi_data
    16581654    USE mod_grid_phy_lmdz
    16591655
     
    16641660#endif
    16651661   
     1662    INTEGER,INTENT(IN) :: nb
    16661663    REAL,DIMENSION(nb),INTENT(IN) :: VarIn
    16671664    REAL,DIMENSION(nb),INTENT(OUT) :: VarOut   
    1668     INTEGER,INTENT(IN) :: nb
    16691665    INTEGER :: ierr
    16701666 
     
    16751671   
    16761672#ifdef CPP_MPI
    1677     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)
    16781674#endif
    16791675       
     
    17111707        DO ij=1,nbp_lon
    17121708         VarOut(ij,i)=VarIn(1,i)
    1713         ENDDO
     1709        ENDDO
    17141710      ENDDO
    17151711    ENDIF
     
    17191715        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
    17201716         VarOut(ij,i)=VarIn(klon_mpi,i)
    1721         ENDDO
     1717        ENDDO
    17221718      ENDDO
    17231719    ENDIF
     
    17551751        DO ij=1,nbp_lon
    17561752         VarOut(ij,i)=VarIn(1,i)
    1757         ENDDO
     1753        ENDDO
    17581754      ENDDO
    17591755    ENDIF
     
    17631759        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
    17641760         VarOut(ij,i)=VarIn(klon_mpi,i)
    1765         ENDDO
     1761        ENDDO
    17661762      ENDDO
    17671763    ENDIF
     
    18001796        DO ij=1,nbp_lon
    18011797         VarOut(ij,i)=VarIn(1,i)
    1802         ENDDO
     1798        ENDDO
    18031799      ENDDO
    18041800    ENDIF
     
    18081804        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
    18091805         VarOut(ij,i)=VarIn(klon_mpi,i)
    1810         ENDDO
     1806        ENDDO
    18111807      ENDDO
    18121808    ENDIF
     
    19051901
    19061902END MODULE mod_phys_lmdz_mpi_transfert
     1903
  • trunk/LMDZ.GENERIC/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
     
    9191  SUBROUTINE Print_module_data
    9292  IMPLICIT NONE
    93 !  INCLUDE "iniprint.h"
     93  INCLUDE "iniprint.h"
    9494
    9595!$OMP CRITICAL 
    96   WRITE(*,*)'--------> TASK ',omp_rank
    97   WRITE(*,*)'omp_size =',omp_size
    98   WRITE(*,*)'omp_rank =',omp_rank
    99   WRITE(*,*)'is_omp_root =',is_omp_root
    100   WRITE(*,*)'klon_omp_para_nb =',klon_omp_para_nb
    101   WRITE(*,*)'klon_omp_para_begin =',klon_omp_para_begin
    102   WRITE(*,*)'klon_omp_para_end =',klon_omp_para_end   
    103   WRITE(*,*)'klon_omp =',klon_omp
    104   WRITE(*,*)'klon_omp_begin =',klon_omp_begin
    105   WRITE(*,*)'klon_omp_end =',klon_omp_end   
     96  WRITE(lunout,*)'--------> TASK ',omp_rank
     97  WRITE(lunout,*)'omp_size =',omp_size
     98  WRITE(lunout,*)'omp_rank =',omp_rank
     99  WRITE(lunout,*)'is_omp_root =',is_omp_root
     100  WRITE(lunout,*)'klon_omp_para_nb =',klon_omp_para_nb
     101  WRITE(lunout,*)'klon_omp_para_begin =',klon_omp_para_begin
     102  WRITE(lunout,*)'klon_omp_para_end =',klon_omp_para_end   
     103  WRITE(lunout,*)'klon_omp =',klon_omp
     104  WRITE(lunout,*)'klon_omp_begin =',klon_omp_begin
     105  WRITE(lunout,*)'klon_omp_end =',klon_omp_end   
    106106!$OMP END CRITICAL
    107107
  • trunk/LMDZ.GENERIC/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
     
    802809
    803810  SUBROUTINE scatter_omp_igen(VarIn,VarOut,dimsize,Buff)
    804     USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     811    USE mod_phys_lmdz_omp_data
    805812    USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    806813    IMPLICIT NONE
     
    833840
    834841  SUBROUTINE scatter_omp_rgen(VarIn,VarOut,dimsize,Buff)
    835   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     842  USE mod_phys_lmdz_omp_data
    836843  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    837844  IMPLICIT NONE
     
    864871
    865872  SUBROUTINE scatter_omp_lgen(VarIn,VarOut,dimsize,Buff)
    866   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     873  USE mod_phys_lmdz_omp_data
    867874  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    868875  IMPLICIT NONE
     
    898905
    899906  SUBROUTINE gather_omp_igen(VarIn,VarOut,dimsize,Buff)
    900   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     907  USE mod_phys_lmdz_omp_data
    901908  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    902909  IMPLICIT NONE
     
    930937
    931938  SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize,Buff)
    932   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     939  USE mod_phys_lmdz_omp_data
    933940  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    934941  IMPLICIT NONE
     
    962969
    963970  SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff)
    964   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     971  USE mod_phys_lmdz_omp_data
    965972  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    966973  IMPLICIT NONE
  • trunk/LMDZ.GENERIC/libf/phy_common/mod_phys_lmdz_para.F90

    r1521 r1543  
    1313 
    1414!$OMP THREADPRIVATE(klon_loc,is_master)
    15 !$OMP THREADPRIVATE(is_sequential,is_parallel)
    1615 
    1716CONTAINS
    1817
    19   SUBROUTINE Init_phys_lmdz_para(iim,jjp1,nb_proc,distrib)
     18  SUBROUTINE Init_phys_lmdz_para(nbp,nbp_lon,nbp_lat,communicator)
    2019  IMPLICIT NONE
    21     INTEGER,INTENT(in) :: iim
    22     INTEGER,INTENT(in) :: jjp1
    23     INTEGER,INTENT(in) :: nb_proc
    24     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
    2524
    26     CALL Init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)
     25    CALL Init_phys_lmdz_mpi_data(nbp,nbp_lon,nbp_lat,communicator)
    2726!$OMP PARALLEL
    2827    CALL Init_phys_lmdz_omp_data(klon_mpi)
     
    4645
    4746  SUBROUTINE Test_transfert
    48   USE mod_grid_phy_lmdz, only: klon_glo, nbp_lev, nbp_lon, nbp_lat, &
    49                                grid1dTo2d_glo, grid2dTo1d_glo
     47  USE mod_grid_phy_lmdz
    5048  IMPLICIT NONE
    51 !    INCLUDE "iniprint.h"
     49    INCLUDE "iniprint.h"
    5250 
    5351    REAL :: Test_Field1d_glo(klon_glo,nbp_lev)
     
    8381!$OMP MASTER 
    8482      Checksum=sum(Test_Field1d_glo-tmp1d_glo)
    85       WRITE(*,*) "------> Checksum =",Checksum," MUST BE 0"
     83      WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
    8684!$OMP END MASTER
    8785    ENDIF
     
    9593!$OMP MASTER 
    9694      Checksum=sum(Test_Field1d_glo-tmp1d_glo)
    97       WRITE(*,*) "------> Checksum =",Checksum," MUST BE 0"
     95      WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
    9896!$OMP END MASTER
    9997    ENDIF
     
    105103!$OMP MASTER 
    106104      Checksum=sum(Test_Field1d_glo*omp_size*mpi_size-tmp1d_glo)
    107       WRITE(*,*) "------> Checksum =",Checksum," MUST BE 0"
     105      WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
    108106!$OMP END MASTER
    109107    ENDIF
  • trunk/LMDZ.GENERIC/libf/phystd/condense_co2.F90

    r1542 r1543  
    1111      use aerosol_mod, only : iaero_co2
    1212      USE surfdat_h, only: emisice, emissiv
    13       USE comgeomphy, only: latitude ! in radians
     13      USE geometry_mod, only: latitude ! in radians
    1414      USE tracer_h, only: noms, rho_co2
    1515      use comcstfi_mod, only: g, r, cpp
  • trunk/LMDZ.GENERIC/libf/phystd/dyn1d/rcm1d.F

    r1542 r1543  
    33! to use  'getin'
    44      use ioipsl_getincom, only: getin
     5      use dimphy, only : init_dimphy
     6      use mod_grid_phy_lmdz, only : regular_lonlat
    57      use infotrac, only: nqtot, tname
    68      use surfdat_h, only: albedodat, phisfi, dryness, watercaptag,
     
    911     &                     dtemisice
    1012      use comdiurn_h, only: sinlat, coslat, sinlon, coslon
    11 !      use comsaison_h
    1213      use comsoil_h, only: nsoilmx, layer, mlayer, inertiedat, volcapa
    1314      use phyredem, only: physdem0,physdem1
    14       use comgeomphy, only: initcomgeomphy, cell_area
     15      use geometry_mod, only: init_geometry
    1516      use slab_ice_h, only: noceanmx
    1617      use planete_mod, only: apoastr,periastr,year_day,peri_day,
     
    2728      use regular_lonlat_mod, only: init_regular_lonlat
    2829      use planete_mod, only: ini_planete_mod
     30      use physics_distribution_mod, only: init_physics_distribution
     31      use regular_lonlat_mod, only: init_regular_lonlat
     32      use mod_interface_dyn_phys, only: init_interface_dyn_phys
    2933      use inifis_mod, only: inifis
    3034      implicit none
     
    133137      character*20,allocatable :: nametrac(:)   ! name of the tracer (no need for adv trac common)
    134138
    135       real :: latitude(1), longitude(1)
     139      real :: latitude(1), longitude(1), cell_area(1)
    136140
    137141c=======================================================================
     
    140144! initialize "serial/parallel" related stuff
    141145!      CALL init_phys_lmdz(iim,jjm+1,llm,1,(/(jjm-1)*iim+2/))
    142       CALL init_phys_lmdz(1,1,llm,1,(/1/))
    143       call initcomgeomphy
     146!      CALL init_phys_lmdz(1,1,llm,1,(/1/))
     147!      call initcomgeomphy
    144148
    145149      !! those are defined in surfdat_h.F90
     
    490494
    491495      ! initializations, as with iniphysiq.F90 for the 3D GCM
     496      call init_physics_distribution(regular_lonlat,4,
     497     &                               1,1,1,nlayer,1)
     498      call init_interface_dyn_phys
    492499      CALL init_regular_lonlat(1,1,longitude,latitude,
    493500     &                   (/0.,0./),(/0.,0./))
    494      
     501      call init_geometry(1,longitude,latitude,
     502     &                   (/0.,0.,0.,0./),(/0.,0.,0.,0./),
     503     &                   cell_area)
     504      call init_dimphy(1,nlayer) ! Initialize dimphy module
    495505      call ini_planete_mod(nlayer,preff,ap,bp)
    496506
  • trunk/LMDZ.GENERIC/libf/phystd/hydrol.F90

    r1542 r1543  
    1010  USE surfdat_h
    1111  use comdiurn_h
    12   USE comgeomphy, only: cell_area
     12  USE geometry_mod, only: cell_area
    1313  USE tracer_h
    1414  use slab_ice_h
  • trunk/LMDZ.GENERIC/libf/phystd/phyredem.F90

    r1542 r1543  
    1010! create physics restart file and write time-independent variables
    1111  use comsoil_h, only: volcapa, mlayer
    12   use comgeomphy, only: cell_area
     12  use geometry_mod, only: cell_area
    1313  use surfdat_h, only: zmea, zstd, zsig, zgam, zthe, &
    1414                       emisice, emissiv,             &
  • trunk/LMDZ.GENERIC/libf/phystd/physiq.F90

    r1542 r1543  
    1919      use comsaison_h, only: mu0, fract, dist_star, declin, right_ascen
    2020      use comsoil_h, only: nsoilmx, layer, mlayer, inertiedat
    21       use comgeomphy, only: latitude, longitude, cell_area
     21      use geometry_mod, only: latitude, longitude, cell_area
    2222      USE comgeomfi_h, only: totarea, totarea_planet
    2323      USE tracer_h, only: noms, mmol, radius, rho_q, qext, &
  • trunk/LMDZ.GENERIC/libf/phystd/rings.F90

    r1542 r1543  
    55
    66    use comdiurn_h, only: sinlat, sinlon, coslat, coslon
    7     use comgeomphy, only: latitude ! (rad)
     7    use geometry_mod, only: latitude ! (rad)
    88 
    99    implicit none   
  • trunk/LMDZ.GENERIC/libf/phystd/soil.F

    r1542 r1543  
    88      use time_phylmdz_mod, only: daysec
    99      use planete_mod, only: year_day
    10       use comgeomphy, only: longitude, latitude ! in radians
     10      use geometry_mod, only: longitude, latitude ! in radians
    1111
    1212      implicit none
  • trunk/LMDZ.GENERIC/libf/phystd/surface_nature.F

    r1542 r1543  
    44      USE surfdat_h
    55      USE comsoil_h
    6       USE comgeomphy, ONLY: cell_area
     6      USE geometry_mod, ONLY: cell_area
    77      USE tracer_h
    88
  • trunk/LMDZ.GENERIC/libf/phystd/writediagfi.F

    r1542 r1543  
    4040!=================================================================
    4141      use surfdat_h, only: phisfi
    42       use comgeomphy, only: cell_area
     42      use geometry_mod, only: cell_area
    4343      use time_phylmdz_mod, only: ecritphy, day_step, iphysiq, day_ini
    4444      USE mod_phys_lmdz_para, only : is_parallel, is_mpi_root,
  • trunk/LMDZ.GENERIC/libf/phystd/writediagsoil.F90

    r1542 r1543  
    1313
    1414use comsoil_h, only: nsoilmx, inertiedat
    15 use comgeomphy, only: cell_area
     15use geometry_mod, only: cell_area
    1616use time_phylmdz_mod, only: ecritphy, day_step, iphysiq
    1717use mod_phys_lmdz_para, only : is_mpi_root, is_master, gather
  • trunk/LMDZ.GENERIC/libf/phystd/writediagspecIR.F

    r1542 r1543  
    4343! Addition by RW (2010) to allow OLR to be saved in .nc format
    4444      use radinc_h, only : L_NSPECTI
    45       use comgeomphy, only: cell_area
     45      use geometry_mod, only: cell_area
    4646      use mod_phys_lmdz_para, only : is_mpi_root, is_master, gather
    4747      use mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo,
  • trunk/LMDZ.GENERIC/libf/phystd/writediagspecVI.F

    r1542 r1543  
    4343! Addition by RW (2010) to allow OSR to be saved in .nc format
    4444      use radinc_h, only : L_NSPECTV
    45       use comgeomphy, only: cell_area
     45      use geometry_mod, only: cell_area
    4646      use mod_phys_lmdz_para, only : is_mpi_root, is_master, gather
    4747      use mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo,
  • trunk/LMDZ.MARS/README

    r1541 r1543  
    22702270   comgeomphy.F90 instead
    22712271
     2272== 22/04/2016 == EM
     2273- Updates and cleanup wrt dynamics/physics separation:
     2274  Removed init_phys_lmdz.F90 and comgeomphy.F90 from phymars;
     2275  comgeomphy is replaced by geometry_mod (located in phy_common).
     2276  Added physics_distribution_mod.F90 in phy_common and
     2277  mod_interface_dyn_phys.F90 in dynphy_lonlat.
     2278  Added nrtype.F90 (contains math const. like PI, etc.) in "misc"
  • trunk/LMDZ.MARS/libf/aeronomars/moldiff_red.F90

    r1541 r1543  
    33
    44use tracer_mod, only: noms, mmol
    5 use comgeomphy, only: cell_area
     5use geometry_mod, only: cell_area
    66
    77implicit none
  • trunk/LMDZ.MARS/libf/dyn3d/gcm.F

    r1523 r1543  
    77      use filtreg_mod, only: inifilr
    88!      use comgeomphy, only: initcomgeomphy
     9      USE mod_const_mpi, ONLY: COMM_LMDZ
    910      USE comvert_mod, ONLY: ap,bp
    1011      USE comconst_mod, ONLY: daysec,dtvr,dtphys,dtdiss,rad,g,r,cpp
     
    160161c-----------------------------------------------------------------------
    161162      CALL defrun_new( 99, .TRUE. )
    162 
    163 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    164 ! FH 2008/05/02
    165 ! A nettoyer. On ne veut qu'une ou deux routines d'interface
    166 ! dynamique -> physique pour l'initialisation
    167 !#ifdef CPP_PHYS
    168       CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
    169 !      call initcomgeomphy ! now done in iniphysiq
    170 !#endif
    171 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    172163
    173164! Initialize tracers
     
    254245!#ifdef CPP_PHYS
    255246!         CALL iniphysiq(iim,jjm,llm,daysec,day_ini,dtphys/nsplit_phys,
    256          CALL iniphysiq(iim,jjm,llm,daysec,day_ini,dtphys,
     247         CALL iniphysiq(iim,jjm,llm,
     248     &                  (jjm-1)*iim+2,comm_lmdz,
     249     &                  daysec,day_ini,dtphys,
    257250     &                  rlatu,rlatv,rlonu,rlonv,
    258251     &                  aire,cu,cv,rad,g,r,cpp,
  • trunk/LMDZ.MARS/libf/dynphy_lonlat/phymars/iniphysiq_mod.F90

    r1541 r1543  
    33CONTAINS
    44
    5 subroutine iniphysiq(ii,jj,nlayer,punjours, pdayref,ptimestep,           &
    6                      rlatu,rlatv,rlonu,rlonv,aire,cu,cv,                 &
     5subroutine iniphysiq(ii,jj,nlayer, &
     6                     nbp, communicator, &
     7                     punjours, pdayref,ptimestep, &
     8                     rlatu,rlatv,rlonu,rlonv,aire,cu,cv, &
    79                     prad,pg,pr,pcpp,iflag_phys)
    810
    9 use dimphy, only : klev ! number of atmospheric levels
    10 use mod_grid_phy_lmdz, only : klon_glo ! number of atmospheric columns
    11                                        ! (on full grid)
     11use dimphy, only : init_dimphy
     12use mod_grid_phy_lmdz, only : klon_glo, & ! number of atmospheric columns (on full grid)
     13                              regular_lonlat  ! regular longitude-latitude grid type
    1214use mod_phys_lmdz_para, only : klon_omp, & ! number of columns (on local omp grid)
    1315                               klon_omp_begin, & ! start index of local omp subgrid
    1416                               klon_omp_end, & ! end index of local omp subgrid
    1517                               klon_mpi_begin ! start indes of columns (on local mpi grid)
    16 
    17 use comgeomphy, only : initcomgeomphy, &
    18                        cell_area, & ! physics grid area (m2)
    19                        dx, & ! cu coeff. (u_covariant = cu * u)
    20                        dy, & ! cv coeff. (v_covariant = cv * v)
    21                        longitude, & ! longitudes (rad)
    22                        latitude ! latitudes (rad)
     18use geometry_mod, only: init_geometry
     19!use comgeomphy, only : initcomgeomphy, &
     20!                       cell_area, & ! physics grid area (m2)
     21!                       dx, & ! cu coeff. (u_covariant = cu * u)
     22!                       dy, & ! cv coeff. (v_covariant = cv * v)
     23!                       longitude, & ! longitudes (rad)
     24!                       latitude ! latitudes (rad)
    2325use infotrac, only : nqtot ! number of advected tracers
    2426use comgeomfi_h, only: ini_fillgeom
    2527use temps_mod, only: day_ini, hour_ini
    2628use phys_state_var_init_mod, only: phys_state_var_init
     29use physics_distribution_mod, only: init_physics_distribution
    2730use regular_lonlat_mod, only: init_regular_lonlat, &
    2831                              east, west, north, south, &
    2932                              north_east, north_west, &
    3033                              south_west, south_east
     34use mod_interface_dyn_phys, only: init_interface_dyn_phys
    3135
    3236implicit none
     
    4347integer,intent(in) :: ii ! number of atmospheric coulumns along longitudes
    4448integer,intent(in) :: jj  ! number of atompsheric columns along latitudes
     49integer,intent(in) :: nbp ! number of physics columns for this MPI process
     50integer,intent(in) :: communicator ! MPI communicator
    4551real,intent(in) :: rlatu(jj+1) ! latitudes of the physics grid
    4652real,intent(in) :: rlatv(jj) ! latitude boundaries of the physics grid
     
    5561
    5662integer :: ibegin,iend,offset
    57 integer :: i,j
     63integer :: i,j,k
    5864character(len=20) :: modname='iniphysiq'
    5965character(len=80) :: abort_message
     
    6672
    6773! global array, on full physics grid:
    68 real,allocatable :: latfi(:)
    69 real,allocatable :: lonfi(:)
    70 real,allocatable :: cufi(:)
    71 real,allocatable :: cvfi(:)
    72 real,allocatable :: airefi(:)
     74real,allocatable :: latfi_glo(:)
     75real,allocatable :: lonfi_glo(:)
     76real,allocatable :: cufi_glo(:)
     77real,allocatable :: cvfi_glo(:)
     78real,allocatable :: airefi_glo(:)
     79real,allocatable :: boundslonfi_glo(:,:)
     80real,allocatable :: boundslatfi_glo(:,:)
     81
     82! local arrays, on given MPI/OpenMP domain:
     83real,allocatable,save :: latfi(:)
     84real,allocatable,save :: lonfi(:)
     85real,allocatable,save :: cufi(:)
     86real,allocatable,save :: cvfi(:)
     87real,allocatable,save :: airefi(:)
     88real,allocatable,save :: boundslonfi(:,:)
     89real,allocatable,save :: boundslatfi(:,:)
     90!$OMP THREADPRIVATE (latfi,lonfi,cufi,cvfi,airefi,boundslonfi,boundslatfi)
     91
    7392
    7493pi=2.*asin(1.0)
    7594
    76 IF (nlayer.NE.klev) THEN
    77   write(*,*) 'STOP in ',trim(modname)
    78   write(*,*) 'Problem with dimensions :'
    79   write(*,*) 'nlayer     = ',nlayer
    80   write(*,*) 'klev   = ',klev
    81   abort_message = ''
    82   CALL abort_gcm (modname,abort_message,1)
    83 ENDIF
    84 
    85 !IF (ngrid.NE.klon_glo) THEN
    86 !  write(*,*) 'STOP in ',trim(modname)
    87 !  write(*,*) 'Problem with dimensions :'
    88 !  write(*,*) 'ngrid     = ',ngrid
    89 !  write(*,*) 'klon   = ',klon_glo
    90 !  abort_message = ''
    91 !  CALL abort_gcm (modname,abort_message,1)
    92 !ENDIF
     95! Initialize Physics distibution and parameters and interface with dynamics
     96CALL init_physics_distribution(regular_lonlat,4, &
     97                                 nbp,ii,jj+1,nlayer,communicator)
     98CALL init_interface_dyn_phys
    9399
    94100! init regular global longitude-latitude grid points and boundaries
     
    115121
    116122! Generate global arrays on full physics grid
    117 allocate(latfi(klon_glo),lonfi(klon_glo),cufi(klon_glo),cvfi(klon_glo))
    118 latfi(1)=rlatu(1)
    119 lonfi(1)=0.
    120 cufi(1) = cu(1)
    121 cvfi(1) = cv(1)
     123allocate(latfi_glo(klon_glo),lonfi_glo(klon_glo))
     124allocate(cufi_glo(klon_glo),cvfi_glo(klon_glo))
     125allocate(airefi_glo(klon_glo))
     126allocate(boundslonfi_glo(klon_glo,4))
     127allocate(boundslatfi_glo(klon_glo,4))
     128
     129! North pole
     130latfi_glo(1)=rlatu(1)
     131lonfi_glo(1)=0.
     132cufi_glo(1) = cu(1)
     133cvfi_glo(1) = cv(1)
     134boundslonfi_glo(1,north_east)=0
     135boundslatfi_glo(1,north_east)=PI/2
     136boundslonfi_glo(1,north_west)=2*PI
     137boundslatfi_glo(1,north_west)=PI/2
     138boundslonfi_glo(1,south_west)=2*PI
     139boundslatfi_glo(1,south_west)=rlatv(1)
     140boundslonfi_glo(1,south_east)=0
     141boundslatfi_glo(1,south_east)=rlatv(1)
    122142DO j=2,jj
    123143  DO i=1,ii
    124     latfi((j-2)*ii+1+i)= rlatu(j)
    125     lonfi((j-2)*ii+1+i)= rlonv(i)
    126     cufi((j-2)*ii+1+i) = cu((j-1)*(ii+1)+i)
    127     cvfi((j-2)*ii+1+i) = cv((j-1)*(ii+1)+i)
     144    k=(j-2)*ii+1+i
     145    latfi_glo((j-2)*ii+1+i)= rlatu(j)
     146    lonfi_glo((j-2)*ii+1+i)= rlonv(i)
     147    cufi_glo((j-2)*ii+1+i) = cu((j-1)*(ii+1)+i)
     148    cvfi_glo((j-2)*ii+1+i) = cv((j-1)*(ii+1)+i)
     149    boundslonfi_glo(k,north_east)=rlonu(i)
     150    boundslatfi_glo(k,north_east)=rlatv(j-1)
     151    boundslonfi_glo(k,north_west)=rlonu(i+1)
     152    boundslatfi_glo(k,north_west)=rlatv(j-1)
     153    boundslonfi_glo(k,south_west)=rlonu(i+1)
     154    boundslatfi_glo(k,south_west)=rlatv(j)
     155    boundslonfi_glo(k,south_east)=rlonu(i)
     156    boundslatfi_glo(k,south_east)=rlatv(j)
    128157  ENDDO
    129158ENDDO
    130 latfi(klon_glo)= rlatu(jj+1)
    131 lonfi(klon_glo)= 0.
    132 cufi(klon_glo) = cu((ii+1)*jj+1)
    133 cvfi(klon_glo) = cv((ii+1)*jj-ii)
     159! South pole
     160latfi_glo(klon_glo)= rlatu(jj+1)
     161lonfi_glo(klon_glo)= 0.
     162cufi_glo(klon_glo) = cu((ii+1)*jj+1)
     163cvfi_glo(klon_glo) = cv((ii+1)*jj-ii)
     164boundslonfi_glo(klon_glo,north_east)= 0
     165boundslatfi_glo(klon_glo,north_east)= rlatv(jj)
     166boundslonfi_glo(klon_glo,north_west)= 2*PI
     167boundslatfi_glo(klon_glo,north_west)= rlatv(jj)
     168boundslonfi_glo(klon_glo,south_west)= 2*PI
     169boundslatfi_glo(klon_glo,south_west)= -PI/2
     170boundslonfi_glo(klon_glo,south_east)= 0
     171boundslatfi_glo(klon_glo,south_east)= -Pi/2
    134172
    135173! build airefi(), mesh area on physics grid
    136 allocate(airefi(klon_glo))
    137 CALL gr_dyn_fi(1,ii+1,jj+1,klon_glo,aire,airefi)
     174CALL gr_dyn_fi(1,ii+1,jj+1,klon_glo,aire,airefi_glo)
    138175! Poles are single points on physics grid
    139 airefi(1)=sum(aire(1:ii,1))
    140 airefi(klon_glo)=sum(aire(1:ii,jj+1))
     176airefi_glo(1)=sum(aire(1:ii,1))
     177airefi_glo(klon_glo)=sum(aire(1:ii,jj+1))
    141178
    142179! Sanity check: do total planet area match between physics and dynamics?
    143180total_area_dyn=sum(aire(1:ii,1:jj+1))
    144 total_area_phy=sum(airefi(1:klon_glo))
     181total_area_phy=sum(airefi_glo(1:klon_glo))
    145182IF (total_area_dyn/=total_area_phy) THEN
    146183  WRITE (lunout, *) 'iniphysiq: planet total surface discrepancy !!!'
     
    158195!$OMP PARALLEL
    159196! Now generate local lon/lat/cu/cv/area arrays
    160 call initcomgeomphy
    161 
    162 !!!!$OMP PARALLEL PRIVATE(ibegin,iend)
    163 !!!$OMP+         SHARED(parea,pcu,pcv,plon,plat)
     197allocate(latfi(klon_omp),lonfi(klon_omp),cufi(klon_omp),cvfi(klon_omp))
     198allocate(airefi(klon_omp))
     199allocate(boundslonfi(klon_omp,4))
     200allocate(boundslatfi(klon_omp,4))
     201!call initcomgeomphy
    164202     
    165203offset=klon_mpi_begin-1
    166 cell_area(1:klon_omp)=airefi(offset+klon_omp_begin:offset+klon_omp_end)
    167 dx(1:klon_omp)=cufi(offset+klon_omp_begin:offset+klon_omp_end)
    168 dy(1:klon_omp)=cvfi(offset+klon_omp_begin:offset+klon_omp_end)
    169 longitude(1:klon_omp)=lonfi(offset+klon_omp_begin:offset+klon_omp_end)
    170 latitude(1:klon_omp)=latfi(offset+klon_omp_begin:offset+klon_omp_end)
     204airefi(1:klon_omp)=airefi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     205cufi(1:klon_omp)=cufi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     206cvfi(1:klon_omp)=cvfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     207lonfi(1:klon_omp)=lonfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     208latfi(1:klon_omp)=latfi_glo(offset+klon_omp_begin:offset+klon_omp_end)
     209boundslonfi(1:klon_omp,:)=boundslonfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
     210boundslatfi(1:klon_omp,:)=boundslatfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
     211
     212! copy over local grid longitudes and latitudes
     213CALL init_geometry(klon_omp,lonfi,latfi,boundslonfi,boundslatfi, &
     214                   airefi,cufi,cvfi)
    171215
    172216! copy some fundamental parameters to physics
    173217! and do some initializations
     218
     219call init_dimphy(klon_omp,nlayer) ! Initialize dimphy module
    174220call phys_state_var_init(klon_omp,nlayer,nqtot, &
    175221                         day_ini,hour_ini,punjours,ptimestep, &
    176222                         prad,pg,pr,pcpp)
    177 call ini_fillgeom(klon_omp,latitude,longitude,cell_area)
     223call ini_fillgeom(klon_omp,latfi,lonfi,airefi)
    178224call conf_phys(klon_omp,nlayer,nqtot)
    179225
  • trunk/LMDZ.MARS/libf/dynphy_lonlat/phymars/newstart.F

    r1524 r1543  
    1515c=======================================================================
    1616
    17       use ioipsl_getincom, only: getin
     17      use ioipsl_getincom, only: getin
     18      use mod_phys_lmdz_para, only: is_parallel, is_sequential,
     19     &                              is_mpi_root, is_omp_root,
     20     &                              is_master
    1821      use infotrac, only: infotrac_init, nqtot, tname
    1922      use tracer_mod, only: noms, mmol,
     
    2932      use phyredem, only: physdem0, physdem1
    3033      use iostart, only: open_startphy
    31       use comgeomphy, only: initcomgeomphy
    32 !      use planete_h
    3334      use dimradmars_mod, only: tauscaling
    3435      use turb_mod, only: q2
    35       use comgeomfi_h, only: ini_fillgeom
    3636      use filtreg_mod, only: inifilr
     37      USE mod_const_mpi, ONLY: COMM_LMDZ
    3738      USE comvert_mod, ONLY: ap,bp,pa,preff
    3839      USE comconst_mod, ONLY: lllm,daysec,dtphys,dtvr,
     
    4142      USE temps_mod, ONLY: day_ini,hour_ini
    4243      USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0
    43       USE phys_state_var_init_mod, ONLY: phys_state_var_init
     44      USE iniphysiq_mod, ONLY: iniphysiq
    4445
    4546      implicit none
    4647
    47 #include "dimensions.h"
     48      include "dimensions.h"
    4849      integer, parameter :: ngridmx = (2+(jjm-1)*iim - 1/jjm)
    49 #include "paramet.h"
    50 #include "comgeom2.h"
    51 #include "comdissnew.h"
    52 #include "clesph0.h"
    53 #include "netcdf.inc"
    54 #include "datafile.h"
     50      include "paramet.h"
     51      include "comgeom2.h"
     52      include "comdissnew.h"
     53      include "clesph0.h"
     54      include "netcdf.inc"
     55      include "datafile.h"
    5556c=======================================================================
    5657c   Declarations
     
    181182      planet_type="mars"
    182183
    183 ! initialize "serial/parallel" related stuff
    184       CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
    185       call initcomgeomphy
    186 
     184! initialize "serial/parallel" related stuff:
     185! (required because we call tabfi() below, before calling iniphysiq)
     186      is_sequential=.true.
     187      is_parallel=.false.
     188      is_mpi_root=.true.
     189      is_omp_root=.true.
     190      is_master=.true.
     191     
    187192! Load tracer number and names:
    188 !      call iniadvtrac(nqtot,numvanle)
    189193      call infotrac_init
    190194! allocate arrays
     
    335339      mugaz = p_mugaz
    336340      daysec = p_daysec
    337 !      write(*,*) 'aire',aire
    338341
    339342
     
    349352      idum=0
    350353
    351 c Initialisation coordonnees /aires
    352 c -------------------------------
    353 ! Note: rlatu(:) and rlonv(:) are commons defined in "comgeom.h"
    354 !       rlatu() and rlonv() are given in radians
    355       latfi(1)=rlatu(1)
    356       lonfi(1)=0.
    357       DO j=2,jjm
    358          DO i=1,iim
    359             latfi((j-2)*iim+1+i)=rlatu(j)
    360             lonfi((j-2)*iim+1+i)=rlonv(i)
    361          ENDDO
    362       ENDDO
    363       latfi(ngridmx)=rlatu(jjp1)
    364       lonfi(ngridmx)=0.
    365      
    366       ! build airefi(), mesh area on physics grid
    367       CALL gr_dyn_fi(1,iip1,jjp1,ngridmx,aire,airefi)
    368       ! Poles are single points on physics grid
    369       airefi(1)=sum(aire(1:iim,1))
    370       airefi(ngridmx)=sum(aire(1:iim,jjm+1))
    371 
    372 ! also initialize various physics flags/settings which might be needed
    373 !    (for instance initracer needs to know about some flags, and/or
    374 !      'datafile' path may be changed by user)
    375       call phys_state_var_init(ngridmx,llm,nqtot,
    376      &                         day_ini,hour_ini,daysec,dtphys,
    377      &                         rad,g,r,cpp)
    378       call ini_fillgeom(ngridmx,latfi,lonfi,airefi)
    379       call conf_phys(ngridmx,llm,nqtot)
     354! Initialize the physics
     355         CALL iniphysiq(iim,jjm,llm,
     356     &                  (jjm-1)*iim+2,comm_lmdz,
     357     &                  daysec,day_ini,dtphys,
     358     &                  rlatu,rlatv,rlonu,rlonv,
     359     &                  aire,cu,cv,rad,g,r,cpp,
     360     &                  1)
    380361
    381362c=======================================================================
  • trunk/LMDZ.MARS/libf/dynphy_lonlat/phymars/start2archive.F

    r1433 r1543  
    2323      use surfdat_h, only: ini_surfdat_h, qsurf
    2424      use comsoil_h, only: ini_comsoil_h
    25       use comgeomphy, only: initcomgeomphy
     25!      use comgeomphy, only: initcomgeomphy
    2626      use filtreg_mod, only: inifilr
     27      USE mod_const_mpi, ONLY: COMM_LMDZ
    2728      use control_mod, only: planet_type
    2829      USE comvert_mod, ONLY: ap,bp
    29       USE comconst_mod, ONLY: g,cpp
     30      USE comconst_mod, ONLY: daysec,dtphys,rad,g,r,cpp
    3031      USE logic_mod, ONLY: grireg
    3132      USE temps_mod, ONLY: day_ini,hour_ini
     33      USE iniphysiq_mod, ONLY: iniphysiq
    3234      implicit none
    3335
    34 #include "dimensions.h"
     36      include "dimensions.h"
    3537      integer, parameter :: ngridmx = (2+(jjm-1)*iim - 1/jjm)
    36 #include "paramet.h"
    37 #include "comdissip.h"
    38 #include "comgeom.h"
    39 #include "netcdf.inc"
     38      include "paramet.h"
     39      include "comdissip.h"
     40      include "comgeom.h"
     41      include "netcdf.inc"
    4042
    4143c-----------------------------------------------------------------------
     
    5961c Variable Physiques (grille physique)
    6062c ------------------------------------
    61       REAL tsurf(ngridmx)       ! Surface temperature
     63      REAL tsurf(ngridmx)        ! Surface temperature
    6264      REAL tsoil(ngridmx,nsoilmx) ! Soil temperature
    63       REAL co2ice(ngridmx)      ! CO2 ice layer
     65      REAL co2ice(ngridmx)        ! CO2 ice layer
    6466      REAL tauscaling(ngridmx) ! dust conversion factor
    6567      REAL q2(ngridmx,llm+1)
     
    116118      CALL defrun_new(99, .TRUE. )
    117119      grireg   = .TRUE.
    118 ! initialize "serial/parallel" related stuff
    119       CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
    120       call initcomgeomphy
     120
    121121      planet_type='mars'
    122122
     
    125125c=======================================================================
    126126! Load tracer number and names:
    127 !      call iniadvtrac(nqtot,numvanle)
    128127      call infotrac_init
    129128
     
    131130      allocate(q(ip1jmp1,llm,nqtot))
    132131      allocate(qsurfS(ip1jmp1,nqtot))
    133       call ini_surfdat_h(ngridmx,nqtot)
    134       call ini_comsoil_h(ngridmx)
    135132     
    136133
     
    139136     .       ps,phis,timedyn)
    140137
     138c-----------------------------------------------------------------------
     139c   Initialisations
     140c-----------------------------------------------------------------------
     141
     142      CALL defrun_new(99, .FALSE. )
     143      call iniconst
     144      call inigeom
     145      call inifilr
     146
     147! Initialize the physics
     148         CALL iniphysiq(iim,jjm,llm,
     149     &                  (jjm-1)*iim+2,comm_lmdz,
     150     &                  daysec,day_ini,dtphys,
     151     &                  rlatu,rlatv,rlonu,rlonv,
     152     &                  aire,cu,cv,rad,g,r,cpp,
     153     &                  1)
    141154
    142155      fichnom = 'startfi.nc'
     
    185198c *****************************************************************
    186199
    187 c-----------------------------------------------------------------------
    188 c   Initialisations
    189 c-----------------------------------------------------------------------
    190 
    191       CALL defrun_new(99, .FALSE. )
    192       call iniconst
    193       call inigeom
    194       call inifilr
    195200      CALL pression(ip1jmp1, ap, bp, ps, p3d)
    196201      call exner_hyb(ip1jmp1, ps, p3d, beta, pks, pk, pkf)
  • trunk/LMDZ.MARS/libf/phy_common/ioipsl_getin_p_mod.F90

    r1528 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.MARS/libf/phy_common/mod_grid_phy_lmdz.F90

    r1521 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     klon_glo=(iim*jjp1)-2*(iim-1)
    44  
    45   ! Ehouarn: handle 1D case:
    46   if ((iim.eq.1).and.(jjp1.eq.2)) then
    47     nbp_lat=1
    48     klon_glo=1
    49   endif
     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   
     53    IF (nbp_lon*nbp_lat==1) THEN
     54      klon_glo=1
     55    ELSE   
     56      klon_glo=(nbp_lon*nbp_lat)-2*(nbp_lon-1)
     57    ENDIF
    5058 
    5159  END SUBROUTINE init_grid_phy_lmdz
     
    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.MARS/libf/phy_common/mod_phys_lmdz_mpi_data.F90

    r1521 r1543  
    33!
    44MODULE mod_phys_lmdz_mpi_data
    5   USE mod_const_mpi, only: MPI_REAL_LMDZ, COMM_LMDZ
     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
    144 
    145       ! Ehouarn: handle 1D case:
    146       if (klon_glo.eq.1) then
    147         klon_mpi_para_end(i) = 1
    148         klon_mpi_para_nb(i) = 1
    149         ij_para_end(i) = 1
    150         jj_para_end(i) = 1
    151         ii_para_end(i) = 1
    152       endif
     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
     165
    153166
    154167      ij_para_nb(i) = ij_para_end(i)-ij_para_begin(i)+1
     
    174187
    175188  SUBROUTINE print_module_data
     189!  USE print_control_mod, ONLY: lunout
    176190  IMPLICIT NONE
    177 !  INCLUDE "iniprint.h"
    178  
    179     WRITE(*,*) 'ii_begin =', ii_begin
    180     WRITE(*,*) 'ii_end =', ii_end
    181     WRITE(*,*) 'jj_begin =',jj_begin
    182     WRITE(*,*) 'jj_end =', jj_end
    183     WRITE(*,*) 'jj_nb =', jj_nb
    184     WRITE(*,*) 'ij_begin =', ij_begin
    185     WRITE(*,*) 'ij_end =', ij_end
    186     WRITE(*,*) 'ij_nb =', ij_nb
    187     WRITE(*,*) 'klon_mpi_begin =', klon_mpi_begin
    188     WRITE(*,*) 'klon_mpi_end =', klon_mpi_end
    189     WRITE(*,*) 'klon_mpi =', klon_mpi
    190     WRITE(*,*) 'jj_para_nb =', jj_para_nb
    191     WRITE(*,*) 'jj_para_begin =', jj_para_begin
    192     WRITE(*,*) 'jj_para_end =', jj_para_end
    193     WRITE(*,*) 'ii_para_begin =', ii_para_begin
    194     WRITE(*,*) 'ii_para_end =', ii_para_end
    195     WRITE(*,*) 'ij_para_nb =', ij_para_nb
    196     WRITE(*,*) 'ij_para_begin =', ij_para_begin
    197     WRITE(*,*) 'ij_para_end =', ij_para_end
    198     WRITE(*,*) 'klon_mpi_para_nb =', klon_mpi_para_nb
    199     WRITE(*,*) 'klon_mpi_para_begin =', klon_mpi_para_begin
    200     WRITE(*,*) 'klon_mpi_para_end  =', klon_mpi_para_end
    201     WRITE(*,*) 'mpi_rank =', mpi_rank
    202     WRITE(*,*) 'mpi_size =', mpi_size
    203     WRITE(*,*) 'mpi_root =', mpi_root
    204     WRITE(*,*) 'is_mpi_root =', is_mpi_root
    205     WRITE(*,*) 'is_north_pole =', is_north_pole
    206     WRITE(*,*) 'is_south_pole =', is_south_pole
    207     WRITE(*,*) 'COMM_LMDZ_PHY =', COMM_LMDZ_PHY
     191  INCLUDE "iniprint.h"
     192 
     193    WRITE(lunout,*) 'ii_begin =', ii_begin
     194    WRITE(lunout,*) 'ii_end =', ii_end
     195    WRITE(lunout,*) 'jj_begin =',jj_begin
     196    WRITE(lunout,*) 'jj_end =', jj_end
     197    WRITE(lunout,*) 'jj_nb =', jj_nb
     198    WRITE(lunout,*) 'ij_begin =', ij_begin
     199    WRITE(lunout,*) 'ij_end =', ij_end
     200    WRITE(lunout,*) 'ij_nb =', ij_nb
     201    WRITE(lunout,*) 'klon_mpi_begin =', klon_mpi_begin
     202    WRITE(lunout,*) 'klon_mpi_end =', klon_mpi_end
     203    WRITE(lunout,*) 'klon_mpi =', klon_mpi
     204    WRITE(lunout,*) 'jj_para_nb =', jj_para_nb
     205    WRITE(lunout,*) 'jj_para_begin =', jj_para_begin
     206    WRITE(lunout,*) 'jj_para_end =', jj_para_end
     207    WRITE(lunout,*) 'ii_para_begin =', ii_para_begin
     208    WRITE(lunout,*) 'ii_para_end =', ii_para_end
     209    WRITE(lunout,*) 'ij_para_nb =', ij_para_nb
     210    WRITE(lunout,*) 'ij_para_begin =', ij_para_begin
     211    WRITE(lunout,*) 'ij_para_end =', ij_para_end
     212    WRITE(lunout,*) 'klon_mpi_para_nb =', klon_mpi_para_nb
     213    WRITE(lunout,*) 'klon_mpi_para_begin =', klon_mpi_para_begin
     214    WRITE(lunout,*) 'klon_mpi_para_end  =', klon_mpi_para_end
     215    WRITE(lunout,*) 'mpi_rank =', mpi_rank
     216    WRITE(lunout,*) 'mpi_size =', mpi_size
     217    WRITE(lunout,*) 'mpi_master =', mpi_master
     218    WRITE(lunout,*) 'is_mpi_root =', is_mpi_root
     219    WRITE(lunout,*) 'is_north_pole =', is_north_pole
     220    WRITE(lunout,*) 'is_south_pole =', is_south_pole
     221    WRITE(lunout,*) 'COMM_LMDZ_PHY =', COMM_LMDZ_PHY
    208222 
    209223  END SUBROUTINE print_module_data
  • trunk/LMDZ.MARS/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   
     
    514514
    515515  SUBROUTINE scatter2D_mpi_i(VarIn, VarOut)
    516     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     516    USE mod_grid_phy_lmdz
    517517    IMPLICIT NONE
    518518 
     
    528528
    529529  SUBROUTINE scatter2D_mpi_i1(VarIn, VarOut)
    530     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     530    USE mod_grid_phy_lmdz
    531531    IMPLICIT NONE
    532532 
     
    541541
    542542  SUBROUTINE scatter2D_mpi_i2(VarIn, VarOut)
    543     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     543    USE mod_grid_phy_lmdz
    544544    IMPLICIT NONE
    545545 
     
    555555 
    556556  SUBROUTINE scatter2D_mpi_i3(VarIn, VarOut)
    557     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     557    USE mod_grid_phy_lmdz
    558558    IMPLICIT NONE
    559559 
     
    570570
    571571  SUBROUTINE scatter2D_mpi_r(VarIn, VarOut)
    572     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     572    USE mod_grid_phy_lmdz
    573573    IMPLICIT NONE
    574574 
     
    585585
    586586  SUBROUTINE scatter2D_mpi_r1(VarIn, VarOut)
    587     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     587    USE mod_grid_phy_lmdz
    588588    IMPLICIT NONE
    589589    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
     
    599599
    600600  SUBROUTINE scatter2D_mpi_r2(VarIn, VarOut)
    601     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     601    USE mod_grid_phy_lmdz
    602602    IMPLICIT NONE
    603603 
     
    613613 
    614614  SUBROUTINE scatter2D_mpi_r3(VarIn, VarOut)
    615     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     615    USE mod_grid_phy_lmdz
    616616    IMPLICIT NONE
    617617 
     
    628628 
    629629  SUBROUTINE scatter2D_mpi_l(VarIn, VarOut)
    630     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     630    USE mod_grid_phy_lmdz
    631631    IMPLICIT NONE
    632632 
     
    643643
    644644  SUBROUTINE scatter2D_mpi_l1(VarIn, VarOut)
    645     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     645    USE mod_grid_phy_lmdz
    646646    IMPLICIT NONE
    647647 
     
    658658
    659659  SUBROUTINE scatter2D_mpi_l2(VarIn, VarOut)
    660     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     660    USE mod_grid_phy_lmdz
    661661    IMPLICIT NONE
    662662 
     
    672672 
    673673  SUBROUTINE scatter2D_mpi_l3(VarIn, VarOut)
    674     USE mod_grid_phy_lmdz, only: klon_glo, grid2dTo1d_glo
     674    USE mod_grid_phy_lmdz
    675675    IMPLICIT NONE
    676676 
     
    691691
    692692  SUBROUTINE gather2D_mpi_i(VarIn, VarOut)
    693     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     693    USE mod_grid_phy_lmdz
    694694    IMPLICIT NONE
    695695 
     
    705705
    706706  SUBROUTINE gather2D_mpi_i1(VarIn, VarOut)
    707     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     707    USE mod_grid_phy_lmdz
    708708    IMPLICIT NONE
    709709 
     
    719719
    720720  SUBROUTINE gather2D_mpi_i2(VarIn, VarOut)
    721     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     721    USE mod_grid_phy_lmdz
    722722    IMPLICIT NONE
    723723 
     
    733733 
    734734  SUBROUTINE gather2D_mpi_i3(VarIn, VarOut)
    735     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     735    USE mod_grid_phy_lmdz
    736736    IMPLICIT NONE
    737737 
     
    749749
    750750  SUBROUTINE gather2D_mpi_r(VarIn, VarOut)
    751     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     751    USE mod_grid_phy_lmdz
    752752    IMPLICIT NONE
    753753 
     
    763763
    764764  SUBROUTINE gather2D_mpi_r1(VarIn, VarOut)
    765     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     765    USE mod_grid_phy_lmdz
    766766    IMPLICIT NONE
    767767 
     
    777777
    778778  SUBROUTINE gather2D_mpi_r2(VarIn, VarOut)
    779     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     779    USE mod_grid_phy_lmdz
    780780    IMPLICIT NONE
    781781 
     
    791791 
    792792  SUBROUTINE gather2D_mpi_r3(VarIn, VarOut)
    793     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     793    USE mod_grid_phy_lmdz
    794794    IMPLICIT NONE
    795795 
     
    807807 
    808808  SUBROUTINE gather2D_mpi_l(VarIn, VarOut)
    809     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     809    USE mod_grid_phy_lmdz
    810810    IMPLICIT NONE
    811811 
     
    821821
    822822  SUBROUTINE gather2D_mpi_l1(VarIn, VarOut)
    823     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     823    USE mod_grid_phy_lmdz
    824824    IMPLICIT NONE
    825825 
     
    835835
    836836  SUBROUTINE gather2D_mpi_l2(VarIn, VarOut)
    837     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     837    USE mod_grid_phy_lmdz
    838838    IMPLICIT NONE
    839839 
     
    849849 
    850850  SUBROUTINE gather2D_mpi_l3(VarIn, VarOut)
    851     USE mod_grid_phy_lmdz, only: klon_glo, grid1dTo2d_glo
     851    USE mod_grid_phy_lmdz
    852852    IMPLICIT NONE
    853853 
     
    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)
    1321     if (ierr.ne.MPI_SUCCESS) then
    1322       write(*,*) "bcast_mpi error: ierr=",ierr
    1323       stop
    1324     endif
     1320    CALL MPI_BCAST(Var,nb,MPI_LOGICAL,mpi_master,COMM_LMDZ_PHY,ierr)
    13251321#endif
    13261322
     
    13301326
    13311327  SUBROUTINE scatter_mpi_igen(VarIn, VarOut, dimsize)
    1332     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1328    USE mod_phys_lmdz_mpi_data
    13331329    USE mod_grid_phy_lmdz
    13341330    IMPLICIT NONE
     
    13691365#ifdef CPP_MPI
    13701366    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_INTEGER,VarOut,klon_mpi*dimsize,   &
    1371                       MPI_INTEGER,mpi_root_x, COMM_LMDZ_PHY,ierr)
     1367                      MPI_INTEGER,mpi_master, COMM_LMDZ_PHY,ierr)
    13721368#endif
    13731369
     
    13751371
    13761372  SUBROUTINE scatter_mpi_rgen(VarIn, VarOut, dimsize)
    1377     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1373    USE mod_phys_lmdz_mpi_data
    13781374    USE mod_grid_phy_lmdz
    13791375    IMPLICIT NONE
     
    14131409#ifdef CPP_MPI
    14141410    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_REAL_LMDZ,VarOut,klon_mpi*dimsize,   &
    1415                       MPI_REAL_LMDZ,mpi_root_x, COMM_LMDZ_PHY,ierr)
     1411                      MPI_REAL_LMDZ,mpi_master, COMM_LMDZ_PHY,ierr)
    14161412
    14171413#endif
     
    14211417 
    14221418  SUBROUTINE scatter_mpi_lgen(VarIn, VarOut, dimsize)
    1423     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1419    USE mod_phys_lmdz_mpi_data
    14241420    USE mod_grid_phy_lmdz
    14251421    IMPLICIT NONE
     
    14591455#ifdef CPP_MPI
    14601456    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_LOGICAL,VarOut,klon_mpi*dimsize,   &
    1461                       MPI_LOGICAL,mpi_root_x, COMM_LMDZ_PHY,ierr)
     1457                      MPI_LOGICAL,mpi_master, COMM_LMDZ_PHY,ierr)
    14621458#endif
    14631459
     
    14681464
    14691465  SUBROUTINE gather_mpi_igen(VarIn, VarOut, dimsize)
    1470     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1466    USE mod_phys_lmdz_mpi_data
    14711467    USE mod_grid_phy_lmdz
    14721468    IMPLICIT NONE
     
    14971493        displs(rank)=Index-1
    14981494        counts(rank)=nb*dimsize
    1499         Index=Index+nb*dimsize
     1495        Index=Index+nb*dimsize
    15001496      ENDDO
    15011497     
     
    15041500#ifdef CPP_MPI
    15051501    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_INTEGER,VarTmp,counts,displs,   &
    1506                      MPI_INTEGER,mpi_root_x, COMM_LMDZ_PHY,ierr)
    1507 #endif
    1508 
    1509                          
     1502                     MPI_INTEGER,mpi_master, COMM_LMDZ_PHY,ierr)
     1503#endif
     1504
     1505                         
    15101506    IF (is_mpi_root) THEN
    15111507      Index=1
     
    15141510        DO i=1,dimsize
    15151511          VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
    1516           Index=Index+nb
     1512          Index=Index+nb
    15171513        ENDDO
    15181514      ENDDO
     
    15221518
    15231519  SUBROUTINE gather_mpi_rgen(VarIn, VarOut, dimsize)
    1524     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1520    USE mod_phys_lmdz_mpi_data
    15251521    USE mod_grid_phy_lmdz
    15261522    IMPLICIT NONE
     
    15461542        displs(rank)=Index-1
    15471543        counts(rank)=nb*dimsize
    1548         Index=Index+nb*dimsize
     1544        Index=Index+nb*dimsize
    15491545      ENDDO
    15501546    ENDIF
     
    15571553#ifdef CPP_MPI
    15581554    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_REAL_LMDZ,VarTmp,counts,displs,   &
    1559                       MPI_REAL_LMDZ,mpi_root_x, COMM_LMDZ_PHY,ierr)
    1560 #endif
    1561                          
     1555                      MPI_REAL_LMDZ,mpi_master, COMM_LMDZ_PHY,ierr)
     1556#endif
     1557                         
    15621558    IF (is_mpi_root) THEN
    15631559      Index=1
     
    15661562        DO i=1,dimsize
    15671563          VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
    1568           Index=Index+nb
     1564          Index=Index+nb
    15691565        ENDDO
    15701566      ENDDO
     
    15741570
    15751571  SUBROUTINE gather_mpi_lgen(VarIn, VarOut, dimsize)
    1576     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1572    USE mod_phys_lmdz_mpi_data
    15771573    USE mod_grid_phy_lmdz
    15781574    IMPLICIT NONE
     
    16031599        displs(rank)=Index-1
    16041600        counts(rank)=nb*dimsize
    1605         Index=Index+nb*dimsize
     1601        Index=Index+nb*dimsize
    16061602      ENDDO
    16071603    ENDIF
     
    16101606#ifdef CPP_MPI
    16111607    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_LOGICAL,VarTmp,counts,displs,   &
    1612                       MPI_LOGICAL,mpi_root_x, COMM_LMDZ_PHY,ierr)
    1613 #endif
    1614                          
     1608                      MPI_LOGICAL,mpi_master, COMM_LMDZ_PHY,ierr)
     1609#endif
     1610                         
    16151611    IF (is_mpi_root) THEN
    16161612      Index=1
     
    16191615        DO i=1,dimsize
    16201616          VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
    1621           Index=Index+nb
     1617          Index=Index+nb
    16221618        ENDDO
    16231619      ENDDO
     
    16291625
    16301626  SUBROUTINE reduce_sum_mpi_igen(VarIn,VarOut,nb)
    1631     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1627    USE mod_phys_lmdz_mpi_data
    16321628    USE mod_grid_phy_lmdz
    16331629    IMPLICIT NONE
     
    16371633#endif
    16381634   
     1635    INTEGER,INTENT(IN) :: nb
    16391636    INTEGER,DIMENSION(nb),INTENT(IN) :: VarIn
    16401637    INTEGER,DIMENSION(nb),INTENT(OUT) :: VarOut   
    1641     INTEGER,INTENT(IN) :: nb
    16421638    INTEGER :: ierr
    16431639   
     
    16491645
    16501646#ifdef CPP_MPI
    1651     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)
    16521648#endif
    16531649           
     
    16551651 
    16561652  SUBROUTINE reduce_sum_mpi_rgen(VarIn,VarOut,nb)
    1657     USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root
     1653    USE mod_phys_lmdz_mpi_data
    16581654    USE mod_grid_phy_lmdz
    16591655
     
    16641660#endif
    16651661   
     1662    INTEGER,INTENT(IN) :: nb
    16661663    REAL,DIMENSION(nb),INTENT(IN) :: VarIn
    16671664    REAL,DIMENSION(nb),INTENT(OUT) :: VarOut   
    1668     INTEGER,INTENT(IN) :: nb
    16691665    INTEGER :: ierr
    16701666 
     
    16751671   
    16761672#ifdef CPP_MPI
    1677     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)
    16781674#endif
    16791675       
     
    17111707        DO ij=1,nbp_lon
    17121708         VarOut(ij,i)=VarIn(1,i)
    1713         ENDDO
     1709        ENDDO
    17141710      ENDDO
    17151711    ENDIF
     
    17191715        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
    17201716         VarOut(ij,i)=VarIn(klon_mpi,i)
    1721         ENDDO
     1717        ENDDO
    17221718      ENDDO
    17231719    ENDIF
     
    17551751        DO ij=1,nbp_lon
    17561752         VarOut(ij,i)=VarIn(1,i)
    1757         ENDDO
     1753        ENDDO
    17581754      ENDDO
    17591755    ENDIF
     
    17631759        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
    17641760         VarOut(ij,i)=VarIn(klon_mpi,i)
    1765         ENDDO
     1761        ENDDO
    17661762      ENDDO
    17671763    ENDIF
     
    18001796        DO ij=1,nbp_lon
    18011797         VarOut(ij,i)=VarIn(1,i)
    1802         ENDDO
     1798        ENDDO
    18031799      ENDDO
    18041800    ENDIF
     
    18081804        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
    18091805         VarOut(ij,i)=VarIn(klon_mpi,i)
    1810         ENDDO
     1806        ENDDO
    18111807      ENDDO
    18121808    ENDIF
     
    19051901
    19061902END MODULE mod_phys_lmdz_mpi_transfert
     1903
  • trunk/LMDZ.MARS/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
     
    9191  SUBROUTINE Print_module_data
    9292  IMPLICIT NONE
    93 !  INCLUDE "iniprint.h"
     93  INCLUDE "iniprint.h"
    9494
    9595!$OMP CRITICAL 
    96   WRITE(*,*)'--------> TASK ',omp_rank
    97   WRITE(*,*)'omp_size =',omp_size
    98   WRITE(*,*)'omp_rank =',omp_rank
    99   WRITE(*,*)'is_omp_root =',is_omp_root
    100   WRITE(*,*)'klon_omp_para_nb =',klon_omp_para_nb
    101   WRITE(*,*)'klon_omp_para_begin =',klon_omp_para_begin
    102   WRITE(*,*)'klon_omp_para_end =',klon_omp_para_end   
    103   WRITE(*,*)'klon_omp =',klon_omp
    104   WRITE(*,*)'klon_omp_begin =',klon_omp_begin
    105   WRITE(*,*)'klon_omp_end =',klon_omp_end   
     96  WRITE(lunout,*)'--------> TASK ',omp_rank
     97  WRITE(lunout,*)'omp_size =',omp_size
     98  WRITE(lunout,*)'omp_rank =',omp_rank
     99  WRITE(lunout,*)'is_omp_root =',is_omp_root
     100  WRITE(lunout,*)'klon_omp_para_nb =',klon_omp_para_nb
     101  WRITE(lunout,*)'klon_omp_para_begin =',klon_omp_para_begin
     102  WRITE(lunout,*)'klon_omp_para_end =',klon_omp_para_end   
     103  WRITE(lunout,*)'klon_omp =',klon_omp
     104  WRITE(lunout,*)'klon_omp_begin =',klon_omp_begin
     105  WRITE(lunout,*)'klon_omp_end =',klon_omp_end   
    106106!$OMP END CRITICAL
    107107
  • trunk/LMDZ.MARS/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
     
    802809
    803810  SUBROUTINE scatter_omp_igen(VarIn,VarOut,dimsize,Buff)
    804     USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     811    USE mod_phys_lmdz_omp_data
    805812    USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    806813    IMPLICIT NONE
     
    833840
    834841  SUBROUTINE scatter_omp_rgen(VarIn,VarOut,dimsize,Buff)
    835   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     842  USE mod_phys_lmdz_omp_data
    836843  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    837844  IMPLICIT NONE
     
    864871
    865872  SUBROUTINE scatter_omp_lgen(VarIn,VarOut,dimsize,Buff)
    866   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     873  USE mod_phys_lmdz_omp_data
    867874  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    868875  IMPLICIT NONE
     
    898905
    899906  SUBROUTINE gather_omp_igen(VarIn,VarOut,dimsize,Buff)
    900   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     907  USE mod_phys_lmdz_omp_data
    901908  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    902909  IMPLICIT NONE
     
    930937
    931938  SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize,Buff)
    932   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     939  USE mod_phys_lmdz_omp_data
    933940  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    934941  IMPLICIT NONE
     
    962969
    963970  SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff)
    964   USE mod_phys_lmdz_omp_data, only: klon_omp, klon_omp_begin
     971  USE mod_phys_lmdz_omp_data
    965972  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    966973  IMPLICIT NONE
  • trunk/LMDZ.MARS/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
    2727    CALL Init_phys_lmdz_omp_data(klon_mpi)
     
    4545
    4646  SUBROUTINE Test_transfert
    47   USE mod_grid_phy_lmdz, only: klon_glo, nbp_lev, nbp_lon, nbp_lat, &
    48                                grid1dTo2d_glo, grid2dTo1d_glo
     47  USE mod_grid_phy_lmdz
    4948  IMPLICIT NONE
    50 !    INCLUDE "iniprint.h"
     49    INCLUDE "iniprint.h"
    5150 
    5251    REAL :: Test_Field1d_glo(klon_glo,nbp_lev)
     
    8281!$OMP MASTER 
    8382      Checksum=sum(Test_Field1d_glo-tmp1d_glo)
    84       WRITE(*,*) "------> Checksum =",Checksum," MUST BE 0"
     83      WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
    8584!$OMP END MASTER
    8685    ENDIF
     
    9493!$OMP MASTER 
    9594      Checksum=sum(Test_Field1d_glo-tmp1d_glo)
    96       WRITE(*,*) "------> Checksum =",Checksum," MUST BE 0"
     95      WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
    9796!$OMP END MASTER
    9897    ENDIF
     
    104103!$OMP MASTER 
    105104      Checksum=sum(Test_Field1d_glo*omp_size*mpi_size-tmp1d_glo)
    106       WRITE(*,*) "------> Checksum =",Checksum," MUST BE 0"
     105      WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
    107106!$OMP END MASTER
    108107    ENDIF
  • trunk/LMDZ.MARS/libf/phymars/aeropacity.F

    r1541 r1543  
    88     &                      igcm_dust_submicron, rho_dust, rho_ice,
    99     &                      nqdust
    10       use comgeomphy, only: latitude ! grid point latitudes (rad)
     10      use geometry_mod, only: latitude ! grid point latitudes (rad)
    1111      use comgeomfi_h, only: sinlat ! sines of grid point latitudes
    1212#ifdef DUSTSTORM
    13       use comgeomphy, only: longitude
     13      use geometry_mod, only: longitude
    1414      use tracer_mod, only: r3n_q, ref_r0, igcm_dust_number
    1515#endif
  • trunk/LMDZ.MARS/libf/phymars/albedocaps.F90

    r1541 r1543  
    66! to use the 'getin' routine
    77use ioipsl_getincom, only: getin
    8 use comgeomphy, only: latitude ! grid point latitudes (rad)
     8use geometry_mod, only: latitude ! grid point latitudes (rad)
    99use surfdat_h, only: TESicealbedo, TESice_Ncoef, TESice_Scoef, &
    1010                     emisice, albedice, watercaptag, albedo_h2o_ice, &
     
    8787subroutine TES_icecap_albedo(zls,ig,alb,icap)
    8888
    89 use comgeomphy, only: latitude, longitude ! in radians
     89use geometry_mod, only: latitude, longitude ! in radians
    9090use surfdat_h, only: albedice, TESice_Ncoef, TESice_Scoef
    9191use netcdf, only: nf90_open, NF90_NOWRITE, NF90_NOERR, &
  • trunk/LMDZ.MARS/libf/phymars/co2snow.F

    r1541 r1543  
    33
    44      use surfdat_h, only: iceradius, dtemisice
    5       use comgeomphy, only: latitude ! grid point latitudes (rad)
     5      use geometry_mod, only: latitude ! grid point latitudes (rad)
    66      use time_phylmdz_mod, only: daysec
    77      IMPLICIT NONE
  • trunk/LMDZ.MARS/libf/phymars/dyn1d/testphys1d.F

    r1541 r1543  
    33! to use  'getin'
    44      USE ioipsl_getincom, only: getin
     5      use dimphy, only : init_dimphy
     6      use mod_grid_phy_lmdz, only : regular_lonlat
    57      use infotrac, only: nqtot, tname
    68      use comsoil_h, only: volcapa, layer, mlayer, inertiedat, nsoilmx
     
    1214      use slope_mod, only: theta_sl, psi_sl
    1315      use phyredem, only: physdem0,physdem1
    14       use comgeomphy, only: initcomgeomphy, cell_area
     16      use geometry_mod, only: init_geometry
    1517      use planete_h, only: year_day, periheli, aphelie, peri_day,
    1618     &                     obliquit, emin_turb, lmixmin
     
    2123      USE comvert_mod, ONLY: ap,bp,aps,bps,pa,preff,sig
    2224      USE logic_mod, ONLY: hybrid
     25      use physics_distribution_mod, only: init_physics_distribution
    2326      use regular_lonlat_mod, only: init_regular_lonlat
     27      use mod_interface_dyn_phys, only: init_interface_dyn_phys
    2428      USE phys_state_var_init_mod, ONLY: phys_state_var_init
    2529      IMPLICIT NONE
     
    106110      Logical  tracerdyn
    107111      integer :: nq=1 ! number of tracers
    108       real :: latitude(1), longitude(1)
     112      real :: latitude(1), longitude(1), cell_area(1)
    109113
    110114      character*2 str2
     
    119123! initialize "serial/parallel" related stuff
    120124!      CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
    121       CALL init_phys_lmdz(1,1,llm,1,(/1/))
    122       call initcomgeomphy
     125!      CALL init_phys_lmdz(1,1,llm,1,(/1/))
     126!      call initcomgeomphy
    123127
    124128c ------------------------------------------------------
     
    483487!Mars possible matter with dtphys in input and include!!!
    484488! Initializations below should mimick what is done in iniphysiq for 3D GCM
     489      call init_physics_distribution(regular_lonlat,4,
     490     &                               1,1,1,nlayer,1)
     491      call init_interface_dyn_phys
    485492      call init_regular_lonlat(1,1,longitude,latitude,
    486493     &                   (/0.,0./),(/0.,0./))
     494      call init_geometry(1,longitude,latitude,
     495     &                   (/0.,0.,0.,0./),(/0.,0.,0.,0./),
     496     &                   cell_area)
     497      call init_dimphy(1,nlayer) ! Initialize dimphy module
    487498      call phys_state_var_init(1,llm,nq,
    488499     .          day0,time,daysec,dtphys,rad,g,r,cpp)
  • trunk/LMDZ.MARS/libf/phymars/eofdump_mod.F90

    r1541 r1543  
    8080      subroutine ineofdump(ngrid,nlayer)
    8181
    82       use comgeomphy, only: longitude, latitude
     82      use geometry_mod, only: longitude, latitude
    8383      use comcstfi_h, only: pi
    8484      use time_phylmdz_mod, only: daysec, dtphys
  • trunk/LMDZ.MARS/libf/phymars/getslopes.F90

    r1541 r1543  
    11subroutine getslopes(ngrid,geopot)
    22   
    3 use comgeomphy, only: longitude, latitude ! in radians
     3use geometry_mod, only: longitude, latitude ! in radians
    44use slope_mod, only: theta_sl, psi_sl
    55use comcstfi_h, only: g, rad, pi
  • trunk/LMDZ.MARS/libf/phymars/newcondens.F

    r1541 r1543  
    88       use tracer_mod, only: noms
    99       use surfdat_h, only: emissiv, phisfi
    10        use comgeomphy, only: latitude ! grid point latitudes (rad)
     10       use geometry_mod, only: latitude ! grid point latitudes (rad)
    1111       use planete_h
    1212       USE comcstfi_h
  • trunk/LMDZ.MARS/libf/phymars/phyredem.F90

    r1541 r1543  
    1414  use infotrac, only: nqtot, tname
    1515  use comsoil_h, only: inertiedat, volcapa, mlayer
    16   use comgeomphy, only: cell_area
     16  use geometry_mod, only: cell_area
    1717  use surfdat_h, only: zmea, zstd, zsig, zgam, zthe, &
    1818                       z0_default, albedice, emisice, emissiv, &
  • trunk/LMDZ.MARS/libf/phymars/physiq.F

    r1541 r1543  
    1515      use comsoil_h, only: inertiedat, ! soil thermal inertia
    1616     &                     tsoil, nsoilmx ! number of subsurface layers
    17       use comgeomphy, only: longitude, latitude, cell_area
     17      use geometry_mod, only: longitude, latitude, cell_area
    1818      use comgeomfi_h, only: sinlon, coslon, sinlat, coslat
    1919      use surfdat_h, only: phisfi, albedodat, zmea, zstd, zsig, zgam,
  • trunk/LMDZ.MARS/libf/phymars/read_dust_scenario.F90

    r1541 r1543  
    44
    55use netcdf
    6 use comgeomphy, only: latitude, longitude ! in radians
     6use geometry_mod, only: latitude, longitude ! in radians
    77implicit none
    88
  • trunk/LMDZ.MARS/libf/phymars/surfini.F

    r1541 r1543  
    44      use netcdf
    55      use tracer_mod, only: nqmx, noms
    6       use comgeomphy, only: longitude, latitude ! in radians
     6      use geometry_mod, only: longitude, latitude ! in radians
    77      use surfdat_h, only: watercaptag, frost_albedo_threshold,
    88     &                     albedo_h2o_ice, inert_h2o_ice, albedodat,
  • trunk/LMDZ.MARS/libf/phymars/tabfi.F

    r1524 r1543  
    5656      implicit none
    5757 
    58 #include "netcdf.inc"
     58      include "netcdf.inc"
    5959
    6060c-----------------------------------------------------------------------
     
    148148c Read 'controle' array
    149149c
    150 !      ierr = NF_INQ_VARID (nid, "controle", nvarid)
    151 !      IF (ierr .NE. NF_NOERR) THEN
    152 !         PRINT*, "Tabfi: Could not find <controle> data"
    153 !         CALL abort
    154 !      ENDIF
    155 !#ifdef NC_DOUBLE
    156 !      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tab_cntrl)
    157 !#else
    158 !      ierr = NF_GET_VAR_REAL(nid, nvarid, tab_cntrl)
    159 !#endif
    160 !      IF (ierr .NE. NF_NOERR) THEN
    161 !         PRINT*, "Tabfi: Failed reading <controle> array"
    162 !         CALL abort
    163 !      ENDIF
    164 
    165150       call get_var("controle",tab_cntrl,found)
    166151       if (.not.found) then
     
    173158c  Initialization of some physical constants
    174159c informations on physics grid
    175 !      if(ngridmx.ne.tab_cntrl(tab0+1)) then
    176 !         print*,'tabfi: WARNING !!! tab_cntrl(tab0+1).ne.ngridmx'
    177 !         print*,tab_cntrl(tab0+1),ngridmx
    178 !      endif
    179160      lmax = nint(tab_cntrl(tab0+2))
    180161      day_ini = tab_cntrl(tab0+3)
  • trunk/LMDZ.MARS/libf/phymars/writediagfi.F

    r1541 r1543  
    4040!=================================================================
    4141      use surfdat_h, only: phisfi
    42       use comgeomphy, only: cell_area
     42      use geometry_mod, only: cell_area
    4343      use time_phylmdz_mod, only: ecritphy, day_step, iphysiq, day_ini
    4444      USE mod_phys_lmdz_para, only : is_parallel, is_mpi_root,
  • trunk/LMDZ.MARS/libf/phymars/writediagsoil.F90

    r1541 r1543  
    1313
    1414use comsoil_h, only: nsoilmx, inertiedat
    15 use comgeomphy, only: cell_area
     15use geometry_mod, only: cell_area
    1616use time_phylmdz_mod, only: ecritphy, day_step, iphysiq
    1717use mod_phys_lmdz_para, only : is_mpi_root, is_master, gather
  • trunk/LMDZ.TITAN/libf/phytitan/calchim.F

    r1530 r1543  
    1717      use common_mod, only:utilaer,maer,prodaer,csn,csh,psurfhaze,
    1818     .                     NLEV,NLRT,NC,ND,NR
    19       USE comgeomphy,  only: rlatd
    2019      USE moyzon_mod, only: tmoy,playmoy,zlaymoy,zlevmoy,klat
    2120      use mod_grid_phy_lmdz, only: nbp_lat
  • trunk/LMDZ.TITAN/libf/phytitan/muphys3D.F

    r1056 r1543  
    6565         use dimphy
    6666c         use radcommon_h, only : volume,rayon,vrat,drayon,dvolume
    67          USE comgeomphy,  only: rlatd
     67         USE geometry_mod,  only: latitude
    6868
    6969         IMPLICIT NONE
     
    235235c***************************************************************
    236236        if((IHOR.eq.1)   
    237      & .or.(rlatd(IHOR).ne.rlatd(im1))
     237     & .or.(latitude(IHOR).ne.latitude(im1))
    238238     & .or.(microfi.eq.2)) then
    239239c***************************************************************
  • trunk/LMDZ.TITAN/libf/phytitan/pg2.old

    r175 r1543  
    4242
    4343      use dimphy
    44       USE comgeomphy
     44      USE geometry_mod, ONLY: latitude
    4545#include "dimensions.h"
    4646#include "microtab.h"
     
    180180      lati(1)     = 0.5*RPI
    181181      DO ig=2,ngrid-1
    182         lati(ig)  = rlatd(2+(ig-2)*iim)*RPI/180.
     182        lati(ig)  = latitude(2+(ig-2)*iim)*RPI/180.
    183183      ENDDO
    184184      lati(ngrid) = -0.5*RPI
     
    197197c     print*,"ENTREE PG2 PREMIER APPEL"
    198198c     print*,airetot,' airetot?= ',4.*RPI*RA*RA
    199 c     print*,1,rlatd(1),aire(1),aire(1)/airetot,' aires'
     199c     print*,1,latitude(1),aire(1),aire(1)/airetot,' aires'
    200200c     DO ig=2,ngrid-1
    201 c     print*,ig,rlatd(2+(ig-2)*iim),aire(ig),aire(ig)/airetot,' aires'
     201c     print*,ig,latitude(2+(ig-2)*iim),aire(ig),aire(ig)/airetot,' aires'
    202202c     ENDDO
    203 c     print*,ngrid,rlatd(klon),aire(ngrid),aire(ngrid)/airetot,' aires'
     203c     print*,ngrid,latitude(klon),aire(ngrid),aire(ngrid)/airetot,' aires'
    204204c     stop
    205205     
  • trunk/LMDZ.TITAN/libf/phytitan/phyetat0.F90

    r1530 r1543  
    1313      USE iostart
    1414      USE infotrac
    15       USE comgeomphy,  only: rlatd,rlond
     15      USE geometry_mod,  only: latitude,longitude
    1616      USE time_phylmdz_mod, only: itau_phy, raz_date
    1717
     
    7676
    7777! read latitudes
    78 call get_field("latitude",rlatd,found)
     78call get_field("latitude",latitude,found)
    7979      IF (.not.found) THEN
    8080         PRINT*, 'phyetat0: Le champ <latitude> est absent'
     
    8383
    8484! read longitudes
    85 call get_field("longitude",rlond,found)
     85call get_field("longitude",longitude,found)
    8686      IF (.not.found) THEN
    8787         PRINT*, 'phyetat0: Le champ <longitude> est absent'
     
    319319      resch4(1) = 0.    ! pole nord = 1 point
    320320      DO i=2,klon
    321           if ((rlatd(i).ge.75..and.rlatd(i).le.85.).or.  &
    322               (rlatd(i).ge.-85.and.rlatd(i).le.-75.)) then
     321          if ((latitude(i).ge.75..and.latitude(i).le.85.).or.  &
     322              (latitude(i).ge.-85.and.latitude(i).le.-75.)) then
    323323            resch4(i) = 2.
    324324          else
     
    352352
    353353! do some more initializations
    354 call init_iophy_new(rlatd,rlond)
     354call init_iophy_new(latitude,longitude)
    355355
    356356end subroutine phyetat0
  • trunk/LMDZ.TITAN/libf/phytitan/phyredem.F90

    r1530 r1543  
    1212                          put_var,put_field
    1313      USE infotrac
    14       USE comgeomphy,  only: rlatd,rlond
     14      USE geometry_mod,  only: longitude, latitude
    1515      USE time_phylmdz_mod, only: day_end, annee_ref, itau_phy, raz_date
    1616
     
    6464
    6565      CALL put_field("longitude", &
    66                      "Longitudes de la grille physique",rlond)
     66                     "Longitudes de la grille physique",longitude)
    6767     
    68       CALL put_field("latitude","Latitudes de la grille physique",rlatd)
     68      CALL put_field("latitude", &
     69                     "Latitudes de la grille physique",latitude)
    6970
    7071! variables
  • trunk/LMDZ.TITAN/libf/phytitan/physiq.F

    r1530 r1543  
    5858      USE infotrac
    5959      use dimphy
    60       USE comgeomphy
     60      USE geometry_mod, ONLY: longitude, latitude, cell_area, dx, dy
    6161      use cpdet_mod, only: cpdet, t2tpot
    6262      USE mod_phys_lmdz_para, only : is_parallel,jj_nb
     
    678678      IF (if_ebil.ge.1) THEN
    679679        ztit='after dynamic'
    680         CALL diagetpq(airephy,ztit,ip_ebil,1,1,dtime
     680        CALL diagetpq(cell_area,ztit,ip_ebil,1,1,dtime
    681681     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    682682     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     
    685685C     est egale a la variation de la physique au pas de temps precedent.
    686686C     Donc la somme de ces 2 variations devrait etre nulle.
    687         call diagphy(airephy,ztit,ip_ebil
     687        call diagphy(cell_area,ztit,ip_ebil
    688688     e      , zero_v, zero_v, zero_v, zero_v, zero_v
    689689     e      , zero_v, zero_v, zero_v, ztsol
     
    726726      DO k = 1, klev
    727727       DO i = 1, klon
    728         omega(i,k) = RG*flxmw(i,k) / airephy(i)
     728        omega(i,k) = RG*flxmw(i,k) / cell_area(i)
    729729       END DO
    730730      END DO
     
    786786
    787787       DO i=2,klon
    788         if (rlatd(i).ne.rlatd(i-1)) then
     788        if (latitude(i).ne.latitude(i-1)) then
    789789         DO l=1,klev
    790790c         zzlaybar(i,l)=(zphibar(i,l)+zphisbar(i))/RG
     
    861861
    862862c dans zenang, Ls en degres ; dans mucorr, Ls en radians
    863       call mucorr(klon,zls,rlatd,rmu0bar,fractbar)
     863      call mucorr(klon,zls,latitude,rmu0bar,fractbar)
    864864      IF (cycle_diurne) THEN
    865865        zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s)
    866         CALL zenang(zlsdeg,gmtime,zdtime,rlatd,rlond,rmu0,fract)
     866        CALL zenang(zlsdeg,gmtime,zdtime,latitude,longitude,rmu0,fract)
    867867      ELSE
    868868        rmu0  = rmu0bar
     
    917917     $            paprs,pplay,ppk,radsol,falbe,
    918918     e            solsw, sollw, sollwdown, fder,
    919      e            rlond, rlatd, cuphy, cvphy,   
     919     e            longitude, latitude, dx, dy,   
    920920     e            debut, lafin,
    921921     s            d_t_vdf,d_u_vdf,d_v_vdf,d_ts,
     
    966966      IF (if_ebil.ge.2) THEN
    967967        ztit='after clmain'
    968         CALL diagetpq(airephy,ztit,ip_ebil,2,1,dtime
     968        CALL diagetpq(cell_area,ztit,ip_ebil,2,1,dtime
    969969     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    970970     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    971          call diagphy(airephy,ztit,ip_ebil
     971         call diagphy(cell_area,ztit,ip_ebil
    972972     e      , zero_v, zero_v, zero_v, zero_v, sens
    973973     e      , zero_v, zero_v, zero_v, ztsol
     
    10551055      IF (if_ebil.ge.2) THEN
    10561056        ztit='after dry_adjust'
    1057         CALL diagetpq(airephy,ztit,ip_ebil,2,2,dtime
     1057        CALL diagetpq(cell_area,ztit,ip_ebil,2,2,dtime
    10581058     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    10591059     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1060         call diagphy(airephy,ztit,ip_ebil
     1060        call diagphy(cell_area,ztit,ip_ebil
    10611061     e      , zero_v, zero_v, zero_v, zero_v, sens
    10621062     e      , zero_v, zero_v, zero_v, ztsol
     
    12701270      IF (if_ebil.ge.2) THEN
    12711271        ztit='after rad'
    1272         CALL diagetpq(airephy,ztit,ip_ebil,2,2,dtime
     1272        CALL diagetpq(cell_area,ztit,ip_ebil,2,2,dtime
    12731273     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    12741274     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1275         call diagphy(airephy,ztit,ip_ebil
     1275        call diagphy(cell_area,ztit,ip_ebil
    12761276     e      , topsw, toplw, solsw, sollw, zero_v
    12771277     e      , zero_v, zero_v, zero_v, ztsol
     
    13681368c A ADAPTER POUR VENUS ET TITAN!!!
    13691369c            CALL lift_noro(klon,klev,dtime,paprs,pplay,
    1370 c     e                   rlatd,zmea,zstd,zpic,zgam,zthe,zpic,zval,
     1370c     e                   latitude,zmea,zstd,zpic,zgam,zthe,zpic,zval,
    13711371c     e                   igwd,idx,itest,
    13721372c     e                   t_seri, u_seri, v_seri,
     
    14251425c====================================================================
    14261426      if (ballons.eq.1) then
    1427          CALL ballon(30,pdtphys,rjourvrai,gmtime,rlatd,rlond,
     1427         CALL ballon(30,pdtphys,rjourvrai,gmtime,latitude,longitude,
    14281428c    C               t,pplay,u,v,pphi)   ! alt above surface (smoothed for GCM)
    14291429     C               t,pplay,u,v,zphi)   ! alt above planet average radius
     
    14591459      CALL aaam_bud (27,klon,klev,rjourvrai,gmtime,
    14601460     C               ra,rg,romega,
    1461      C               rlatd,rlond,pphis,
     1461     C               latitude,longitude,pphis,
    14621462     C               zustrdr,zustrli,zustrcl,
    14631463     C               zvstrdr,zvstrli,zvstrcl,
     
    14991499      IF (if_ebil.ge.1) THEN
    15001500        ztit='after physic'
    1501         CALL diagetpq(airephy,ztit,ip_ebil,1,1,dtime
     1501        CALL diagetpq(cell_area,ztit,ip_ebil,1,1,dtime
    15021502     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    15031503     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     
    15061506C     est egale a la variation de la physique au pas de temps precedent.
    15071507C     Donc la somme de ces 2 variations devrait etre nulle.
    1508         call diagphy(airephy,ztit,ip_ebil
     1508        call diagphy(cell_area,ztit,ip_ebil
    15091509     e      , topsw, toplw, solsw, sollw, sens
    15101510     e      , zero_v, zero_v, zero_v, ztsol
     
    15451545c     DO k = 1, klev
    15461546c     DO i = 1, klon
    1547 c       mang(i,k) = RA*cos(rlatd(i)*RPI/180.)
    1548 c    .     *(u_seri(i,k)+RA*cos(rlatd(i)*RPI/180.)*ROMEGA)
    1549 c    .     *airephy(i)*(paprs(i,k)-paprs(i,k+1))/RG
     1547c       mang(i,k) = RA*cos(latitude(i)*RPI/180.)
     1548c    .     *(u_seri(i,k)+RA*cos(latitude(i)*RPI/180.)*ROMEGA)
     1549c    .     *cell_area(i)*(paprs(i,k)-paprs(i,k+1))/RG
    15501550c       mangtot=mangtot+mang(i,k)
    15511551c     ENDDO
  • trunk/LMDZ.TITAN/libf/phytitan/radlwsw.F

    r1530 r1543  
    3535c======================================================================
    3636      use dimphy
    37       USE comgeomphy
    3837      USE phys_state_var_mod, only: falbe,heat,cool,radsol,
    3938     .      topsw,toplw,solsw,sollw,sollwdown,lwnet,swnet,
  • trunk/LMDZ.TITAN/libf/phytitan/radtitan.F

    r1461 r1543  
    3333      USE infotrac
    3434      use dimphy
    35       USE comgeomphy
     35      USE geometry_mod, ONLY: latitude
    3636      USE optcld, only : iniqcld
    3737      use moyzon_mod, only:plevmoy
     
    214214          somcoslat=0.
    215215          do j=1,klon
    216             coslat(j) = cos(rlatd(j)*RPI/180.)
     216            coslat(j) = cos(latitude(j)*RPI/180.)
    217217            somcoslat=somcoslat+coslat(j)
    218218          enddo
  • trunk/LMDZ.TITAN/libf/phytitan/write_histday.h

    r1056 r1543  
    1414
    1515      call histwrite_phy(nid_day,.false.,"phis",itau_w,pphis)
    16       call histwrite_phy(nid_day,.false.,"aire",itau_w,airephy)
     16      call histwrite_phy(nid_day,.false.,"aire",itau_w,cell_area)
    1717
    1818ccccccc axe Ls ... Faudrait le reduire a axe temporel seulement...
  • trunk/LMDZ.TITAN/libf/phytitan/write_histins.h

    r1056 r1543  
    1414
    1515      call histwrite_phy(nid_ins,.false.,"phis",itau_w,pphis)
    16       call histwrite_phy(nid_ins,.false.,"aire",itau_w,airephy)
     16      call histwrite_phy(nid_ins,.false.,"aire",itau_w,cell_area)
    1717
    1818ccccccc axe Ls ... Faudrait le reduire a axe temporel seulement...
  • trunk/LMDZ.TITAN/libf/phytitan/write_histmth.h

    r1356 r1543  
    1111
    1212      call histwrite_phy(nid_mth,.false.,"phis",itau_w,pphis)
    13       call histwrite_phy(nid_mth,.false.,"aire",itau_w,airephy)
     13      call histwrite_phy(nid_mth,.false.,"aire",itau_w,cell_area)
    1414
    1515ccccccc axe Ls ... Faudrait le reduire a axe temporel seulement...
  • trunk/LMDZ.VENUS/libf/phyvenus/clmain.F

    r1530 r1543  
    1111     .                  paprs,pplay,ppk,radsol,albe,
    1212     .                  solsw, sollw, sollwdown, fder,
    13      .                  rlon, rlat, cufi, cvfi,
     13     .                  rlon, rlat, dx, dy,
    1414     .                  debut, lafin,
    1515     .                  d_t,d_u,d_v,d_ts,
     
    5252c radsol---input-R- flux radiatif net (positif vers le sol) en W/m**2
    5353c rlat-----input-R- latitude en degree
    54 c cufi-----input-R- resolution des mailles en x (m)
    55 c cvfi-----input-R- resolution des mailles en y (m)
     54c dx-----input-R- resolution des mailles en x (m)
     55c dy-----input-R- resolution des mailles en y (m)
    5656c
    5757c d_t------output-R- le changement pour "t"
     
    8080! ADAPTATION GCM POUR CP(T)
    8181      real ppk(klon,klev)
    82       REAL rlon(klon), rlat(klon), cufi(klon), cvfi(klon)
     82      REAL rlon(klon), rlat(klon), dx(klon), dy(klon)
    8383      REAL d_t(klon, klev)
    8484      REAL d_u(klon, klev), d_v(klon, klev)
     
    398398! ADAPTATION GCM POUR CP(T)
    399399      CALL clqh(dtime, itap, debut,lafin,
    400      e          rlon, rlat, cufi, cvfi,
     400     e          rlon, rlat, dx, dy,
    401401     e          knon,
    402402     e          soil_model, ytsoil,
     
    465465
    466466      SUBROUTINE clqh(dtime,itime, debut,lafin,
    467      e                rlon, rlat, cufi, cvfi,
     467     e                rlon, rlat, dx, dy,
    468468     e                knon,
    469469     $                soil_model,tsoil,
     
    510510      REAL albedo(klon)       ! albedo de la surface
    511511      real rmu0(klon)         ! cosinus de l'angle solaire zenithal
    512       real rlon(klon), rlat(klon), cufi(klon), cvfi(klon)
     512      real rlon(klon), rlat(klon), dx(klon), dy(klon)
    513513c
    514514      REAL d_t(klon,klev)     ! incrementation de "t"
     
    686686      CALL interfsurf_hq(itime, dtime, rmu0,
    687687     e klon, nbp_lon, nbp_lat-1, knon,
    688      e rlon, rlat, cufi, cvfi,
     688     e rlon, rlat, dx, dy,
    689689     e debut, lafin, soil_model, nsoilmx,tsoil,
    690690     e zlev1,  u1lay, v1lay, temp_air, epot_air, 
  • trunk/LMDZ.VENUS/libf/phyvenus/dyn1d/rcm1d.F

    r1525 r1543  
    33      USE infotrac
    44      use control_mod, only: planet_type, day_step
    5       use comgeomphy
    65      USE phys_state_var_mod
    76      use chemparam_mod
     
    1413      use conc, only: rho
    1514      USE iniphysiq_mod, ONLY: iniphysiq
    16 
     15      USE mod_const_mpi, ONLY: comm_lmdz
    1716      IMPLICIT NONE
    1817
     
    199198c   ---------------------------------
    200199
    201       CALL init_phys_lmdz(iim,jjm,llm,1,(/1/))
     200!      CALL init_phys_lmdz(iim,jjm,llm,1,(/1/))
    202201
    203202c   la surface de chaque maille est inutile en 1D --->
     
    210209c e.g. for cell boundaries, which are meaningless in 1D; so pad these
    211210c with '0.' when necessary
    212       CALL iniphysiq(1,1,llm,daysec,day0,dtphys,
     211      CALL iniphysiq(1,1,llm,
     212     &            1,comm_lmdz,
     213     &            daysec,day0,dtphys,
    213214     &            (/lati(1),0./),(/0./),
    214215     &            (/0.,0./),(/long(1),0./),
  • trunk/LMDZ.VENUS/libf/phyvenus/new_cloud_sedim.F

    r1530 r1543  
    77      USE infotrac
    88      USE dimphy
    9       USE comgeomphy
    109      USE chemparam_mod
    1110      IMPLICIT NONE
  • trunk/LMDZ.VENUS/libf/phyvenus/nirco2abs.F

    r1530 r1543  
    33
    44       use dimphy
    5        use comgeomphy, only: rlatd, rlond     
     5       use geometry_mod, only: longitude, latitude
    66       use chemparam_mod, only: i_co2, i_o
    77c       use compo_hedin83_mod2
     
    236236            zday_int = (n-1)/float(nstep)
    237237
    238             CALL zenang(0.,zday_int,RDAY/nstep,rlatd,rlond,
     238            CALL zenang(0.,zday_int,RDAY/nstep,latitude,longitude,
    239239     s             mu0_int,fract_int)
    240240
  • trunk/LMDZ.VENUS/libf/phyvenus/phyetat0.F90

    r1530 r1543  
    1313      USE iostart
    1414      USE infotrac
    15       USE comgeomphy,  only: rlatd,rlond
     15      use geometry_mod, only: longitude, latitude
    1616      USE time_phylmdz_mod, only: itau_phy, raz_date
    1717
     
    6565
    6666! read latitudes
    67 call get_field("latitude",rlatd,found)
     67call get_field("latitude",latitude,found)
    6868      IF (.not.found) THEN
    6969         PRINT*, 'phyetat0: Le champ <latitude> est absent'
     
    7272
    7373! read longitudes
    74 call get_field("longitude",rlond,found)
     74call get_field("longitude",longitude,found)
    7575      IF (.not.found) THEN
    7676         PRINT*, 'phyetat0: Le champ <longitude> est absent'
     
    344344
    345345! do some more initializations
    346 call init_iophy_new(rlatd,rlond)
     346call init_iophy_new(latitude,longitude)
    347347
    348348end subroutine phyetat0
  • trunk/LMDZ.VENUS/libf/phyvenus/phyredem.F90

    r1530 r1543  
    1212                          put_var,put_field
    1313      USE infotrac
    14       USE comgeomphy,  only: rlatd,rlond
     14      use geometry_mod, only: longitude, latitude
    1515      USE time_phylmdz_mod, only: day_end, annee_ref, itau_phy, raz_date
    1616
     
    6262
    6363      CALL put_field("longitude", &
    64                      "Longitudes de la grille physique",rlond)
     64                     "Longitudes de la grille physique",longitude)
    6565     
    66       CALL put_field("latitude","Latitudes de la grille physique",rlatd)
     66      CALL put_field("latitude", &
     67                     "Latitudes de la grille physique",latitude)
    6768
    6869! variables
  • trunk/LMDZ.VENUS/libf/phyvenus/physiq.F

    r1530 r1543  
    5858      USE infotrac
    5959      use dimphy
    60       USE comgeomphy
     60      USE geometry_mod, only: longitude, latitude, cell_area, dx, dy
    6161      USE mod_phys_lmdz_para, only : is_parallel,jj_nb
    6262      USE phys_state_var_mod ! Variables sauvegardees de la physique
     
    665665      DO k = 1, klev
    666666      DO i = 1, klon     
    667          ilat=(rlatd(i)/5.625) + 17.
     667         ilat=(latitude(i)/5.625) + 17.
    668668         delta_temp(i,k)=mat_dtemp(INT(ilat),k)
    669669      ENDDO
     
    719719      IF (if_ebil.ge.1) THEN
    720720        ztit='after dynamic'
    721         CALL diagetpq(airephy,ztit,ip_ebil,1,1,dtime
     721        CALL diagetpq(cell_area,ztit,ip_ebil,1,1,dtime
    722722     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    723723     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     
    726726C     est egale a la variation de la physique au pas de temps precedent.
    727727C     Donc la somme de ces 2 variations devrait etre nulle.
    728         call diagphy(airephy,ztit,ip_ebil
     728        call diagphy(cell_area,ztit,ip_ebil
    729729     e      , zero_v, zero_v, zero_v, zero_v, zero_v
    730730     e      , zero_v, zero_v, zero_v, ztsol
     
    767767      DO k = 1, klev
    768768       DO i = 1, klon
    769         omega(i,k) = RG*flxmw(i,k) / airephy(i)
     769        omega(i,k) = RG*flxmw(i,k) / cell_area(i)
    770770       END DO
    771771      END DO
     
    832832      IF (cycle_diurne) THEN
    833833        zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s)
    834         CALL zenang(zlongi,gmtime,zdtime,rlatd,rlond,rmu0,fract)
     834        CALL zenang(zlongi,gmtime,zdtime,latitude,longitude,rmu0,fract)
    835835      ELSE
    836         call mucorr(klon,zlongi,rlatd,rmu0,fract)
     836        call mucorr(klon,zlongi,latitude,rmu0,fract)
    837837      ENDIF
    838838     
     
    859859     I                   debut,lafin,nqmax,
    860860     I                   nlon,nlev,dtime,paprs,
    861      I                   rlatd,rlond,
     861     I                   latitude,longitude,
    862862     O                   tr_seri)
    863863
     
    869869           DO k = 1, klev
    870870           DO i = 1, klon     
    871              ilat=(rlatd(i)/5.625) + 17.
    872 !             PRINT*,INT(ilat),rlatd(i),mat_dtemp(INT(ilat),k)
     871             ilat=(latitude(i)/5.625) + 17.
     872!             PRINT*,INT(ilat),latitude(i),mat_dtemp(INT(ilat),k)
    873873             delta_temp(i,k)=mat_dtemp(INT(ilat),k)
    874874           ENDDO
     
    888888     I             nqmax,
    889889     I             klon,
    890      I             rlatd,
    891      I             rlond,
     890     I             latitude,
     891     I             longitude,
    892892     I             nlev,
    893893     I             dtime,
     
    902902     I             nqmax,
    903903     I             klon,
    904      I             rlatd,
    905      I             rlond,
     904     I             latitude,
     905     I             longitude,
    906906     I             nlev,
    907907     I             dtime,
     
    926926           CALL new_cloud_sedim(
    927927     I                 klon,
    928      I               nlev,
    929      I               dtime,
     928     I                     nlev,
     929     I                     dtime,
    930930     I                 pplay,
    931      I               paprs,
    932      I               t_seri+delta_temp,
     931     I                     paprs,
     932     I                     t_seri+delta_temp,
    933933     I                 tr_seri,
    934      O               d_tr_sed,
    935      O               d_tr_ssed,
    936      I               nqmax,
     934     O                     d_tr_sed,
     935     O                     d_tr_ssed,
     936     I                     nqmax,
    937937     O                 Fsedim)
    938938         else
     
    940940           CALL new_cloud_sedim(
    941941     I                 klon,
    942      I               nlev,
    943      I               dtime,
     942     I                     nlev,
     943     I                     dtime,
    944944     I                 pplay,
    945      I               paprs,
    946      I               t_seri,
     945     I                     paprs,
     946     I                     t_seri,
    947947     I                 tr_seri,
    948      O               d_tr_sed,
    949      O               d_tr_ssed,
    950      I               nqmax,
     948     O                     d_tr_sed,
     949     O                     d_tr_ssed,
     950     I                     nqmax,
    951951     O                 Fsedim)
    952952
     
    10321032     $            paprs,pplay,ppk,radsol,falbe,
    10331033     e            solsw, sollw, sollwdown, fder,
    1034      e            rlond, rlatd, cuphy, cvphy,   
     1034     e            longitude, latitude, dx, dy,   
    10351035     e            debut, lafin,
    10361036     s            d_t_vdf,d_u_vdf,d_v_vdf,d_ts,
     
    10821082      IF (if_ebil.ge.2) THEN
    10831083        ztit='after clmain'
    1084         CALL diagetpq(airephy,ztit,ip_ebil,2,1,dtime
     1084        CALL diagetpq(cell_area,ztit,ip_ebil,2,1,dtime
    10851085     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    10861086     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1087          call diagphy(airephy,ztit,ip_ebil
     1087         call diagphy(cell_area,ztit,ip_ebil
    10881088     e      , zero_v, zero_v, zero_v, zero_v, sens
    10891089     e      , zero_v, zero_v, zero_v, ztsol
     
    11751175      IF (if_ebil.ge.2) THEN
    11761176        ztit='after dry_adjust'
    1177         CALL diagetpq(airephy,ztit,ip_ebil,2,2,dtime
     1177        CALL diagetpq(cell_area,ztit,ip_ebil,2,2,dtime
    11781178     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    11791179     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1180         call diagphy(airephy,ztit,ip_ebil
     1180        call diagphy(cell_area,ztit,ip_ebil
    11811181     e      , zero_v, zero_v, zero_v, zero_v, sens
    11821182     e      , zero_v, zero_v, zero_v, ztsol
     
    12151215      IF(callnlte.or.callthermos) THEN                                 
    12161216         call compo_hedin83_mod(pplay,rmu0,   
    1217      &           co2vmr_gcm,covmr_gcm,ovmr_gcm,n2vmr_gcm,nvmr_gcm)
     1217     &                 co2vmr_gcm,covmr_gcm,ovmr_gcm,n2vmr_gcm,nvmr_gcm)
    12181218
    12191219         IF(ok_chem) then
     
    12341234         ENDIF
    12351235
    1236        ENDIF   
     1236       ENDIF       
    12371237
    12381238c
     
    12611261          d_t_nlte(:,:)=0.
    12621262
    1263         ENDIF   
     1263        ENDIF       
    12641264
    12651265c      Find number of layers for LTE radiation calculations
     
    12931293     &          cool, d_t_nirco2,d_t_nlte, dtsw, dtlw)
    12941294        ELSE
    1295            dtsw(:,:)=heat(:,:)
    1296            dtlw(:,:)=-1*cool(:,:)
    1297         ENDIF
     1295           dtsw(:,:)=heat(:,:)
     1296           dtlw(:,:)=-1*cool(:,:)
     1297        ENDIF
    12981298
    12991299         DO k=1,klev
     
    13191319     $         rmu0,pdtphys,gmtime,rjourvrai,
    13201320     $         tr_seri, d_tr, d_t_euv )
    1321                 
     1321                
    13221322           DO k=1,klev
    13231323              DO ig=1,klon
     
    14051405      IF (if_ebil.ge.2) THEN
    14061406        ztit='after rad'
    1407         CALL diagetpq(airephy,ztit,ip_ebil,2,2,dtime
     1407        CALL diagetpq(cell_area,ztit,ip_ebil,2,2,dtime
    14081408     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    14091409     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1410         call diagphy(airephy,ztit,ip_ebil
     1410        call diagphy(cell_area,ztit,ip_ebil
    14111411     e      , topsw, toplw, solsw, sollw, zero_v
    14121412     e      , zero_v, zero_v, zero_v, ztsol
     
    14241424       do i=1,klon
    14251425        do k=2,klev
    1426           ztlev(i,k)  = (t_seri(i,k)+t_seri(i,k-1))/2.
    1427           zpklev(i,k) = sqrt(ppk(i,k)*ppk(i,k-1))
    1428         enddo
     1426          ztlev(i,k)  = (t_seri(i,k)+t_seri(i,k-1))/2.
     1427          zpklev(i,k) = sqrt(ppk(i,k)*ppk(i,k-1))
     1428        enddo
    14291429       enddo
    14301430       call t2tpot(klon*klev,ztlev, ztetalev,zpklev)
     
    14321432       do i=1,klon
    14331433        do k=2,klev
    1434           zdtetalev(i,k) = ztetalay(i,k)-ztetalay(i,k-1)
    1435           zdzlev(i,k)    = (zphi(i,k)-zphi(i,k-1))/RG
     1434          zdtetalev(i,k) = ztetalay(i,k)-ztetalay(i,k-1)
     1435          zdzlev(i,k)    = (zphi(i,k)-zphi(i,k-1))/RG
    14361436          zn2(i,k) = RG*zdtetalev(i,k)/(ztetalev(i,k)*zdzlev(i,k))
    14371437          zn2(i,k) = max(zn2(i,k),1.e-12)  ! securite
    1438         enddo
     1438        enddo
    14391439        zn2(i,1) = 1.e-12  ! securite
    14401440       enddo
     
    14791479         d_u_oro = 0.
    14801480         d_v_oro = 0.
    1481         zustrdr = 0.
    1482         zvstrdr = 0.
     1481        zustrdr = 0.
     1482        zvstrdr = 0.
    14831483c
    14841484      ENDIF ! fin de test sur ok_orodr
     
    15081508c A ADAPTER POUR VENUS!!!
    15091509c            CALL lift_noro(klon,klev,dtime,paprs,pplay,
    1510 c     e                   rlatd,zmea,zstd,zpic,zgam,zthe,zpic,zval,
     1510c     e                   latitude,zmea,zstd,zpic,zgam,zthe,zpic,zval,
    15111511c     e                   igwd,idx,itest,
    15121512c     e                   t_seri, u_seri, v_seri,
     
    15671567c====================================================================
    15681568      if (ballons.eq.1) then
    1569          CALL ballon(30,pdtphys,rjourvrai,gmtime*RDAY,rlatd,rlond,
    1570 c    C               t,pplay,u,v,pphi)   ! alt above surface (smoothed for GCM)
    1571      C               t,pplay,u,v,zphi)   ! alt above planet average radius
     1569        CALL ballon(30,pdtphys,rjourvrai,gmtime*RDAY,latitude,longitude,
     1570c    C              t,pplay,u,v,pphi)   ! alt above surface (smoothed for GCM)
     1571     C              t,pplay,u,v,zphi)   ! alt above planet average radius
    15721572      endif !ballons
    15731573
     
    16011601      CALL aaam_bud (27,klon,klev,rjourvrai,gmtime*RDAY,
    16021602     C               ra,rg,romega,
    1603      C               rlatd,rlond,pphis,
     1603     C               latitude,longitude,pphis,
    16041604     C               zustrdr,zustrli,zustrcl,
    16051605     C               zvstrdr,zvstrli,zvstrcl,
     
    16411641      IF (if_ebil.ge.1) THEN
    16421642        ztit='after physic'
    1643         CALL diagetpq(airephy,ztit,ip_ebil,1,1,dtime
     1643        CALL diagetpq(cell_area,ztit,ip_ebil,1,1,dtime
    16441644     e      , t_seri,zero_v2,zero_v2,zero_v2,u_seri,v_seri,paprs,pplay
    16451645     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     
    16481648C     est egale a la variation de la physique au pas de temps precedent.
    16491649C     Donc la somme de ces 2 variations devrait etre nulle.
    1650         call diagphy(airephy,ztit,ip_ebil
     1650        call diagphy(cell_area,ztit,ip_ebil
    16511651     e      , topsw, toplw, solsw, sollw, sens
    16521652     e      , zero_v, zero_v, zero_v, ztsol
     
    16871687c     DO k = 1, klev
    16881688c     DO i = 1, klon
    1689 c       mang(i,k) = RA*cos(rlatd(i)*RPI/180.)
    1690 c    .     *(u_seri(i,k)+RA*cos(rlatd(i)*RPI/180.)*ROMEGA)
    1691 c    .     *airephy(i)*(paprs(i,k)-paprs(i,k+1))/RG
     1689c       mang(i,k) = RA*cos(latitude(i)*RPI/180.)
     1690c    .     *(u_seri(i,k)+RA*cos(latitude(i)*RPI/180.)*ROMEGA)
     1691c    .     *cell_area(i)*(paprs(i,k)-paprs(i,k+1))/RG
    16921692c       mangtot=mangtot+mang(i,k)
    16931693c     ENDDO
  • trunk/LMDZ.VENUS/libf/phyvenus/phytrac_emiss.F

    r1530 r1543  
    3030      USE infotrac
    3131      use dimphy
    32       USE comgeomphy
     32      USE geometry_mod, only: cell_area
    3333      USE chemparam_mod,only:M_tr
    3434      USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat
     
    139139     &     .and.((xlon(i)+deltalon).gt.lon_volcan(ilon)) ) then
    140140             ig_volcan(ilat,ilon)= i
    141              area_emiss(ilat,ilon) = airephy(i)
     141             area_emiss(ilat,ilon) = cell_area(i)
    142142             print*,"Lat,lon=",ilat,ilon," OK"
    143143            end if
  • trunk/LMDZ.VENUS/libf/phyvenus/phytrac_relax.F

    r1530 r1543  
    2727      USE infotrac
    2828      use dimphy
    29       USE comgeomphy
    3029      USE chemparam_mod,only:M_tr
    3130      IMPLICIT none
  • trunk/LMDZ.VENUS/libf/phyvenus/radlwsw.F

    r1530 r1543  
    2727c======================================================================
    2828      use dimphy
    29       USE comgeomphy
     29      USE geometry_mod, ONLY: latitude
    3030      USE phys_state_var_mod, only: heat,cool,radsol,
    3131     .      topsw,toplw,solsw,sollw,sollwdown,lwnet,swnet
     
    164164         lat=1
    165165       else
    166          if (abs(rlatd(j)).le.50.) then
     166         if (abs(latitude(j)).le.50.) then
    167167           lat=1
    168          elseif (abs(rlatd(j)).le.60.) then
     168         elseif (abs(latitude(j)).le.60.) then
    169169           lat=2
    170          elseif (abs(rlatd(j)).le.70.) then
     170         elseif (abs(latitude(j)).le.70.) then
    171171           lat=3
    172          elseif (abs(rlatd(j)).le.80.) then
     172         elseif (abs(latitude(j)).le.80.) then
    173173           lat=4
    174174         else
  • trunk/LMDZ.VENUS/libf/phyvenus/radlwsw.NewtonCool

    r1530 r1543  
    2424c======================================================================
    2525      use dimphy
    26       USE comgeomphy
     26      USE geometry_mod, ONLY: latitude
    2727      USE phys_state_var_mod, only: heat,cool,radsol,
    2828     .      topsw,toplw,solsw,sollw,sollwdown,lwnet,swnet
     
    9898            ztemp = tempCLee(level)*(1-fact)+tempCLee(level+1)*fact
    9999            zdt   = dt_epCLee(level)*(1-fact)+dt_epCLee(level+1)*fact
    100 c           zt_eq(i,k) = ztemp + zdt*(cos(rlatd(i)*RPI/180.)-2./RPI)
    101             zt_eq(i,k) = ztemp + zdt*(cos(rlatd(i)*RPI/180.)-RPI/4.)
     100c           zt_eq(i,k) = ztemp + zdt*(cos(latitude(i)*RPI/180.)-2./RPI)
     101            zt_eq(i,k) = ztemp + zdt*(cos(latitude(i)*RPI/180.)-RPI/4.)
    102102           
    103103          enddo
  • trunk/LMDZ.VENUS/libf/phyvenus/write_histday.h

    r1310 r1543  
    1212
    1313      call histwrite_phy(nid_day,.false.,"phis",itau_w,pphis)
    14       call histwrite_phy(nid_day,.false.,"aire",itau_w,airephy)
     14      call histwrite_phy(nid_day,.false.,"aire",itau_w,cell_area)
    1515      call histwrite_phy(nid_day,.false.,"tsol",itau_w,ftsol)
    1616      call histwrite_phy(nid_day,.false.,"psol",itau_w,paprs(:,1))
  • trunk/LMDZ.VENUS/libf/phyvenus/write_histins.h

    r1453 r1543  
    1212
    1313      call histwrite_phy(nid_ins,.false.,"phis",itau_w,pphis)
    14       call histwrite_phy(nid_ins,.false.,"aire",itau_w,airephy)
     14      call histwrite_phy(nid_ins,.false.,"aire",itau_w,cell_area)
    1515      call histwrite_phy(nid_ins,.false.,"tsol",itau_w,ftsol)
    1616      call histwrite_phy(nid_ins,.false.,"psol",itau_w,paprs(:,1))
  • trunk/LMDZ.VENUS/libf/phyvenus/write_histmth.h

    r1518 r1543  
    1212
    1313      call histwrite_phy(nid_mth,.false.,"phis",itau_w,pphis)
    14       call histwrite_phy(nid_mth,.false.,"aire",itau_w,airephy)
     14      call histwrite_phy(nid_mth,.false.,"aire",itau_w,cell_area)
    1515      call histwrite_phy(nid_mth,.false.,"tsol",itau_w,ftsol)
    1616      call histwrite_phy(nid_mth,.false.,"psol",itau_w,paprs(:,1))
Note: See TracChangeset for help on using the changeset viewer.