Changeset 1682 for trunk/LMDZ.MARS/libf/phy_common
- Timestamp:
- Mar 31, 2017, 11:31:38 AM (8 years ago)
- Location:
- trunk/LMDZ.MARS/libf/phy_common
- Files:
-
- 3 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/phy_common/geometry_mod.F90
r1543 r1682 30 30 !$OMP THREADPRIVATE(cell_area) 31 31 32 INTEGER,SAVE,ALLOCATABLE :: ind_cell_glo(:) ! global index of a local cell 33 !$OMP THREADPRIVATE(ind_cell_glo) 32 34 33 35 CONTAINS … … 35 37 SUBROUTINE init_geometry(klon,longitude_,latitude_, & 36 38 boundslon_,boundslat_, & 37 cell_area_, dx_,dy_)39 cell_area_,ind_cell_glo_,dx_,dy_) 38 40 USE mod_grid_phy_lmdz, ONLY: nvertex 39 41 USE nrtype, ONLY : PI … … 45 47 REAL,INTENT(IN) :: boundslat_(klon,nvertex) 46 48 REAL,INTENT(IN) :: cell_area_(klon) 49 INTEGER,OPTIONAL,INTENT(IN) :: ind_cell_glo_(klon) 47 50 REAL,OPTIONAL,INTENT(IN) :: dx_(klon) 48 51 REAL,OPTIONAL,INTENT(IN) :: dy_(klon) … … 55 58 ALLOCATE(boundslat(klon,nvertex)) 56 59 ALLOCATE(cell_area(klon)) 60 IF (PRESENT(ind_cell_glo_)) ALLOCATE(ind_cell_glo(klon)) 57 61 IF (PRESENT(dx_)) ALLOCATE(dx(klon)) 58 62 IF (PRESENT(dy_))ALLOCATE(dy(klon)) … … 65 69 boundslat(:,:) = boundslat_(:,:) 66 70 cell_area(:) = cell_area_(:) 71 IF (PRESENT(ind_cell_glo_)) ind_cell_glo(:) = ind_cell_glo_(:) 67 72 IF (PRESENT(dx_)) dx(:) = dx_(:) 68 73 IF (PRESENT(dy_)) dy(:) = dy_(:) -
trunk/LMDZ.MARS/libf/phy_common/mod_phys_lmdz_mpi_data.F90
r1543 r1682 1 1 ! 2 !$ Header$2 !$Id$ 3 3 ! 4 4 MODULE mod_phys_lmdz_mpi_data 5 ! USE mod_const_mpi6 5 7 6 INTEGER,SAVE :: ii_begin … … 36 35 INTEGER,SAVE :: mpi_size 37 36 INTEGER,SAVE :: mpi_master 38 ! INTEGER,SAVE :: mpi_root39 37 LOGICAL,SAVE :: is_mpi_root 40 38 LOGICAL,SAVE :: is_using_mpi 41 39 42 40 43 LOGICAL,SAVE :: is_north_pole 44 LOGICAL,SAVE :: is_south_pole 41 LOGICAL,SAVE :: is_north_pole_dyn 42 LOGICAL,SAVE :: is_south_pole_dyn 45 43 INTEGER,SAVE :: COMM_LMDZ_PHY 46 44 INTEGER,SAVE :: MPI_REAL_LMDZ ! MPI_REAL8 … … 48 46 CONTAINS 49 47 50 ! SUBROUTINE Init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)51 48 SUBROUTINE init_phys_lmdz_mpi_data(nbp, nbp_lon, nbp_lat, communicator) 52 ! USE mod_const_mpi, ONLY : COMM_LMDZ53 49 IMPLICIT NONE 54 50 #ifdef CPP_MPI 55 51 INCLUDE 'mpif.h' 56 52 #endif 57 INTEGER,INTENT( in) :: nbp58 INTEGER,INTENT( in) :: nbp_lon59 INTEGER,INTENT( in) :: nbp_lat60 INTEGER,INTENT( in) :: communicator53 INTEGER,INTENT(IN) :: nbp 54 INTEGER,INTENT(IN) :: nbp_lon 55 INTEGER,INTENT(IN) :: nbp_lat 56 INTEGER,INTENT(IN) :: communicator 61 57 62 58 INTEGER,ALLOCATABLE :: distrib(:) … … 109 105 110 106 IF (mpi_rank == 0) THEN 111 is_north_pole = .TRUE.112 ELSE 113 is_north_pole = .FALSE.107 is_north_pole_dyn = .TRUE. 108 ELSE 109 is_north_pole_dyn = .FALSE. 114 110 ENDIF 115 111 116 112 IF (mpi_rank == mpi_size-1) THEN 117 is_south_pole = .TRUE.118 ELSE 119 is_south_pole = .FALSE.113 is_south_pole_dyn = .TRUE. 114 ELSE 115 is_south_pole_dyn = .FALSE. 120 116 ENDIF 121 117 … … 187 183 188 184 SUBROUTINE print_module_data 189 !USE print_control_mod, ONLY: lunout185 USE print_control_mod, ONLY: lunout 190 186 IMPLICIT NONE 191 INCLUDE "iniprint.h"192 187 193 188 WRITE(lunout,*) 'ii_begin =', ii_begin … … 217 212 WRITE(lunout,*) 'mpi_master =', mpi_master 218 213 WRITE(lunout,*) 'is_mpi_root =', is_mpi_root 219 WRITE(lunout,*) 'is_north_pole =', is_north_pole220 WRITE(lunout,*) 'is_south_pole =', is_south_pole214 WRITE(lunout,*) 'is_north_pole_dyn =', is_north_pole_dyn 215 WRITE(lunout,*) 'is_south_pole_dyn =', is_south_pole_dyn 221 216 WRITE(lunout,*) 'COMM_LMDZ_PHY =', COMM_LMDZ_PHY 222 217 -
trunk/LMDZ.MARS/libf/phy_common/mod_phys_lmdz_mpi_transfert.F90
r1543 r1682 1 1 ! 2 !$ Header$2 !$Id$ 3 3 ! 4 4 MODULE mod_phys_lmdz_mpi_transfert … … 1693 1693 1694 1694 offset=ii_begin 1695 IF (is_north_pole ) Offset=nbp_lon1695 IF (is_north_pole_dyn) Offset=nbp_lon 1696 1696 1697 1697 … … 1703 1703 1704 1704 1705 IF (is_north_pole ) THEN1705 IF (is_north_pole_dyn) THEN 1706 1706 DO i=1,dimsize 1707 1707 DO ij=1,nbp_lon … … 1711 1711 ENDIF 1712 1712 1713 IF (is_south_pole ) THEN1713 IF (is_south_pole_dyn) THEN 1714 1714 DO i=1,dimsize 1715 1715 DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb … … 1737 1737 1738 1738 offset=ii_begin 1739 IF (is_north_pole ) Offset=nbp_lon1739 IF (is_north_pole_dyn) Offset=nbp_lon 1740 1740 1741 1741 … … 1747 1747 1748 1748 1749 IF (is_north_pole ) THEN1749 IF (is_north_pole_dyn) THEN 1750 1750 DO i=1,dimsize 1751 1751 DO ij=1,nbp_lon … … 1755 1755 ENDIF 1756 1756 1757 IF (is_south_pole ) THEN1757 IF (is_south_pole_dyn) THEN 1758 1758 DO i=1,dimsize 1759 1759 DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb … … 1782 1782 1783 1783 offset=ii_begin 1784 IF (is_north_pole ) Offset=nbp_lon1784 IF (is_north_pole_dyn) Offset=nbp_lon 1785 1785 1786 1786 … … 1792 1792 1793 1793 1794 IF (is_north_pole ) THEN1794 IF (is_north_pole_dyn) THEN 1795 1795 DO i=1,dimsize 1796 1796 DO ij=1,nbp_lon … … 1800 1800 ENDIF 1801 1801 1802 IF (is_south_pole ) THEN1802 IF (is_south_pole_dyn) THEN 1803 1803 DO i=1,dimsize 1804 1804 DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb … … 1824 1824 1825 1825 offset=ii_begin 1826 IF (is_north_pole ) offset=nbp_lon1826 IF (is_north_pole_dyn) offset=nbp_lon 1827 1827 1828 1828 DO i=1,dimsize … … 1832 1832 ENDDO 1833 1833 1834 IF (is_north_pole ) THEN1834 IF (is_north_pole_dyn) THEN 1835 1835 DO i=1,dimsize 1836 1836 VarOut(1,i)=VarIn(1,i) … … 1854 1854 1855 1855 offset=ii_begin 1856 IF (is_north_pole ) offset=nbp_lon1856 IF (is_north_pole_dyn) offset=nbp_lon 1857 1857 1858 1858 DO i=1,dimsize … … 1862 1862 ENDDO 1863 1863 1864 IF (is_north_pole ) THEN1864 IF (is_north_pole_dyn) THEN 1865 1865 DO i=1,dimsize 1866 1866 VarOut(1,i)=VarIn(1,i) … … 1883 1883 1884 1884 offset=ii_begin 1885 IF (is_north_pole ) offset=nbp_lon1885 IF (is_north_pole_dyn) offset=nbp_lon 1886 1886 1887 1887 DO i=1,dimsize … … 1891 1891 ENDDO 1892 1892 1893 IF (is_north_pole ) THEN1893 IF (is_north_pole_dyn) THEN 1894 1894 DO i=1,dimsize 1895 1895 VarOut(1,i)=VarIn(1,i) -
trunk/LMDZ.MARS/libf/phy_common/mod_phys_lmdz_omp_data.F90
r1657 r1682 1 1 ! 2 !$Id: mod_phys_lmdz_omp_data.F90 2 326 2015-07-10 12:24:29Z emillour$2 !$Id: mod_phys_lmdz_omp_data.F90 2429 2016-01-27 12:43:09Z fairhead $ 3 3 ! 4 4 MODULE mod_phys_lmdz_omp_data … … 7 7 INTEGER,SAVE :: omp_rank 8 8 LOGICAL,SAVE :: is_omp_root 9 LOGICAL,SAVE :: is_omp_master ! alias of is_omp_root 9 10 LOGICAL,SAVE :: is_using_omp 11 LOGICAL,SAVE :: is_north_pole_phy, is_south_pole_phy 10 12 11 13 INTEGER,SAVE,DIMENSION(:),ALLOCATABLE :: klon_omp_para_nb … … 16 18 INTEGER,SAVE :: klon_omp_begin 17 19 INTEGER,SAVE :: klon_omp_end 18 !$OMP THREADPRIVATE(omp_rank,klon_omp,is_omp_root,klon_omp_begin,klon_omp_end) 20 !$OMP THREADPRIVATE(omp_rank,klon_omp,is_omp_root,is_omp_master,klon_omp_begin,klon_omp_end) 21 !$OMP THREADPRIVATE(is_north_pole_phy, is_south_pole_phy) 19 22 20 23 CONTAINS 21 24 22 25 SUBROUTINE Init_phys_lmdz_omp_data(klon_mpi) 23 USE dimphy 26 USE dimphy 27 USE mod_phys_lmdz_mpi_data, ONLY : is_north_pole_dyn, is_south_pole_dyn 24 28 IMPLICIT NONE 25 29 INTEGER, INTENT(in) :: klon_mpi … … 43 47 omp_size=OMP_GET_NUM_THREADS() 44 48 !$OMP END MASTER 49 !$OMP BARRIER 45 50 omp_rank=OMP_GET_THREAD_NUM() 46 51 #else … … 56 61 ELSE 57 62 abort_message = 'ANORMAL : OMP_MASTER /= 0' 58 !-- abort_gcm only in the dynamics 59 !CALL abort_gcm (modname,abort_message,1) 60 print *,modname,abort_message 61 STOP 63 CALL abort_physic (modname,abort_message,1) 62 64 ENDIF 63 65 !$OMP END MASTER 64 66 is_omp_master=is_omp_root 65 67 66 68 !$OMP MASTER 69 67 70 ALLOCATE(klon_omp_para_nb(0:omp_size-1)) 68 71 ALLOCATE(klon_omp_para_begin(0:omp_size-1)) … … 83 86 !$OMP END MASTER 84 87 !$OMP BARRIER 88 89 if ((is_north_pole_dyn) .AND. (omp_rank == 0 )) then 90 is_north_pole_phy = .TRUE. 91 else 92 is_north_pole_phy = .FALSE. 93 endif 94 if ((is_south_pole_dyn) .AND. (omp_rank == omp_size-1)) then 95 is_south_pole_phy = .TRUE. 96 else 97 is_south_pole_phy = .FALSE. 98 endif 85 99 86 100 klon_omp=klon_omp_para_nb(omp_rank) … … 93 107 94 108 SUBROUTINE Print_module_data 109 USE print_control_mod, ONLY: lunout 95 110 IMPLICIT NONE 96 INCLUDE "iniprint.h"97 111 98 112 !$OMP CRITICAL -
trunk/LMDZ.MARS/libf/phy_common/mod_phys_lmdz_para.F90
r1543 r1682 1 1 ! 2 ! $Header$2 ! $Id: mod_phys_lmdz_para.F90 2429 2016-01-27 12:43:09Z fairhead $ 3 3 ! 4 4 MODULE mod_phys_lmdz_para … … 11 11 LOGICAL,SAVE :: is_parallel 12 12 LOGICAL,SAVE :: is_master 13 13 14 14 15 !$OMP THREADPRIVATE(klon_loc,is_master) … … 18 19 SUBROUTINE Init_phys_lmdz_para(nbp,nbp_lon,nbp_lat,communicator) 19 20 IMPLICIT NONE 20 INTEGER,INTENT( in) :: nbp21 INTEGER,INTENT( in) :: nbp_lon22 INTEGER,INTENT( in) :: nbp_lat23 INTEGER,INTENT( in) :: communicator21 INTEGER,INTENT(IN) :: nbp 22 INTEGER,INTENT(IN) :: nbp_lon 23 INTEGER,INTENT(IN) :: nbp_lat 24 INTEGER,INTENT(IN) :: communicator 24 25 25 26 CALL Init_phys_lmdz_mpi_data(nbp,nbp_lon,nbp_lat,communicator) … … 41 42 is_parallel=.FALSE. 42 43 ENDIF 44 45 43 46 44 47 END SUBROUTINE Init_phys_lmdz_para … … 46 49 SUBROUTINE Test_transfert 47 50 USE mod_grid_phy_lmdz 51 USE print_control_mod, ONLY: lunout 48 52 IMPLICIT NONE 49 INCLUDE "iniprint.h"50 53 51 54 REAL :: Test_Field1d_glo(klon_glo,nbp_lev) -
trunk/LMDZ.MARS/libf/phy_common/physics_distribution_mod.F90
r1543 r1682 10 10 nbp, nbp_lon, nbp_lat, nbp_lev, & 11 11 communicator) 12 USE mod_phys_lmdz_para, ONLY: init_phys_lmdz_para 12 USE mod_phys_lmdz_para, ONLY: init_phys_lmdz_para, klon_omp 13 13 USE mod_grid_phy_lmdz, ONLY: init_grid_phy_lmdz 14 USE dimphy, ONLY : Init_dimphy 15 14 16 IMPLICIT NONE 15 17 INTEGER,INTENT(IN) :: grid_type … … 24 26 CALL init_grid_phy_lmdz(grid_type,nvertex, nbp_lon,nbp_lat,nbp_lev) 25 27 CALL init_phys_lmdz_para(nbp,nbp_lon, nbp_lat, communicator) 28 !$OMP PARALLEL 29 CALL init_dimphy(klon_omp,nbp_lev) 30 !$OMP END PARALLEL 26 31 27 32 END SUBROUTINE init_physics_distribution
Note: See TracChangeset
for help on using the changeset viewer.