Changeset 1543 for trunk/LMDZ.COMMON/libf
- Timestamp:
- Apr 22, 2016, 9:02:11 AM (9 years ago)
- Location:
- trunk/LMDZ.COMMON/libf
- Files:
-
- 2 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/dyn3d/gcm.F90
r1523 r1543 25 25 ok_dyn_ins,ok_dyn_ave,iecri,periodav, & 26 26 less1day,fractday,ndynstep,nsplit_phys 27 USE mod_const_mpi, ONLY: COMM_LMDZ 27 28 use cpdet_mod, only: ini_cpdet 28 29 USE temps_mod, ONLY: calend,start_time,annee_ref,day_ref, & 29 30 itau_dyn,itau_phy,day_ini,jD_ref,jH_ref,day_end 30 31 31 #ifdef INCA32 ! Only INCA needs these informations (from the Earth's physics)33 USE indice_sol_mod34 USE mod_phys_lmdz_para, ONLY : klon_mpi_para_nb35 #endif36 32 37 33 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 184 180 ! A nettoyer. On ne veut qu'une ou deux routines d'interface 185 181 ! dynamique -> physique pour l'initialisation 186 #ifdef CPP_PHYS187 CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))188 ! call initcomgeomphy ! now done in iniphysiq189 #endif182 !#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 190 186 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 191 187 ! … … 225 221 #endif 226 222 !----------------------------------------------------------------------- 227 228 IF (type_trac == 'inca') THEN229 #ifdef INCA230 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 #endif234 END IF235 223 ! 236 224 ! … … 281 269 282 270 endif ! of if (read_start) 283 284 IF (type_trac == 'inca') THEN285 #ifdef INCA286 call init_inca_dim(klon,llm,iim,jjm, &287 rlonu,rlatu,rlonv,rlatv)288 #endif289 END IF290 271 291 272 … … 445 426 ! Physics: 446 427 #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) 450 433 #endif 451 434 ENDIF ! of IF ((iflag_phys==1).or.(iflag_phys>=100)) -
trunk/LMDZ.COMMON/libf/dyn3dpar/bands.F90
r1019 r1543 1 1 ! 2 ! $Id: bands.F90 1615 2012-02-10 15:42:26Z emillour $2 ! $Id: bands.F90 2351 2015-08-25 15:14:59Z emillour $ 3 3 ! 4 4 module Bands … … 19 19 20 20 subroutine AllocateBands 21 useparallel_lmdz21 USE parallel_lmdz 22 22 implicit none 23 23 … … 33 33 34 34 subroutine Read_distrib 35 useparallel_lmdz35 USE parallel_lmdz 36 36 implicit none 37 37 … … 93 93 SUBROUTINE Set_Bands 94 94 USE parallel_lmdz 95 #ifdef CPP_PHYS96 ! Ehouarn: what follows is only related to // physics97 USE mod_phys_lmdz_para, ONLY : jj_para_begin,jj_para_end98 #endif99 95 IMPLICIT NONE 100 96 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 103 101 do i=0,mpi_size-1 104 102 jj_nb_vanleer2(i)=(jjm+1)/mpi_size … … 106 104 enddo 107 105 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 109 117 do i=0,MPI_Size-1 110 118 jj_Nb_physic(i)=jj_para_end(i)-jj_para_begin(i)+1 … … 127 135 endif 128 136 enddo 129 #endif130 137 131 138 end subroutine Set_Bands … … 134 141 subroutine AdjustBands_caldyn 135 142 use times 136 useparallel_lmdz143 USE parallel_lmdz 137 144 implicit none 138 145 … … 199 206 subroutine AdjustBands_vanleer 200 207 use times 201 useparallel_lmdz208 USE parallel_lmdz 202 209 implicit none 203 210 … … 265 272 subroutine AdjustBands_dissip 266 273 use times 267 useparallel_lmdz274 USE parallel_lmdz 268 275 implicit none 269 276 -
trunk/LMDZ.COMMON/libf/dyn3dpar/gcm.F
r1523 r1543 14 14 USE parallel_lmdz 15 15 USE infotrac 16 #ifdef CPP_PHYS17 USE mod_interface_dyn_phys18 #endif16 !#ifdef CPP_PHYS 17 ! USE mod_interface_dyn_phys 18 !#endif 19 19 USE mod_hallo 20 20 USE Bands … … 40 40 USE mod_phys_lmdz_omp_data, ONLY: klon_omp 41 41 USE dimphy 42 USE comgeomphy43 42 #endif 44 43 USE comconst_mod, ONLY: daysec,dtvr,dtphys,rad,g,r,cpp … … 196 195 call Read_Distrib 197 196 198 #ifdef CPP_PHYS199 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) 200 199 !#endif 201 200 ! CALL set_bands 202 201 !#ifdef CPP_PHYS 203 CALL Init_interface_dyn_phys204 #endif202 ! CALL Init_interface_dyn_phys 203 !#endif 205 204 CALL barrier 206 205 … … 497 496 ! & latfi,lonfi,airefi,zcufi,zcvfi,rad,g,r,cpp, 498 497 ! & 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, 500 501 & rlatu,rlatv,rlonu,rlonv,aire,cu,cv,rad,g,r,cpp, 501 502 & iflag_phys) -
trunk/LMDZ.COMMON/libf/dynphy_lonlat/calfis_p.F
r1459 r1543 29 29 ! Ehouarn: if using (parallelized) physics 30 30 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 32 34 USE mod_interface_dyn_phys 33 35 ! USE IOPHY -
trunk/LMDZ.COMMON/libf/dynphy_lonlat/mod_interface_dyn_phys.F90
r1403 r1543 1 1 ! 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 $ 3 3 ! 4 4 MODULE mod_interface_dyn_phys … … 7 7 8 8 9 #ifdef CPP_PHYS10 ! Interface with parallel physics,11 9 CONTAINS 12 10 11 #ifdef CPP_PARA 12 ! Interface with parallel physics, 13 13 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 16 15 IMPLICIT NONE 17 16 include 'dimensions.h' … … 55 54 56 55 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 57 60 #endif 58 ! of #ifdef CPP_P HYS61 ! of #ifdef CPP_PARA 59 62 END MODULE mod_interface_dyn_phys -
trunk/LMDZ.COMMON/libf/dynphy_lonlat/phytitan/iniphysiq_mod.F90
r1525 r1543 6 6 CONTAINS 7 7 8 SUBROUTINE iniphysiq(iim,jjm,nlayer,punjours, pdayref,ptimestep, & 9 rlatu,rlatv,rlonu,rlonv,aire,cu,cv, & 8 SUBROUTINE iniphysiq(iim,jjm,nlayer, & 9 nbp, communicator, & 10 punjours, pdayref,ptimestep, & 11 rlatu,rlatv,rlonu,rlonv,aire,cu,cv, & 10 12 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 14 17 USE mod_phys_lmdz_para, ONLY: klon_omp, & ! number of columns (on local omp grid) 15 18 klon_omp_begin, & ! start index of local omp subgrid … … 17 20 klon_mpi_begin ! start indes of columns (on local mpi grid) 18 21 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 25 29 USE temps_mod, ONLY: annee_ref, day_ref, day_ini, day_end 26 30 USE time_phylmdz_mod, ONLY: init_time 31 USE physics_distribution_mod, ONLY : init_physics_distribution 27 32 USE regular_lonlat_mod, ONLY : init_regular_lonlat, & 28 33 east, west, north, south, & 29 34 north_east, north_west, & 30 35 south_west, south_east 36 USE mod_interface_dyn_phys, ONLY : init_interface_dyn_phys 31 37 USE nrtype, ONLY: pi 32 38 IMPLICIT NONE … … 48 54 INTEGER, INTENT (IN) :: iim ! number of atmospheric columns along longitudes 49 55 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 50 58 REAL, INTENT (IN) :: rlatu(jjm+1) ! latitudes of the physics grid 51 59 REAL, INTENT (IN) :: rlatv(jjm) ! latitude boundaries of the physics grid … … 60 68 61 69 INTEGER :: ibegin, iend, offset 62 INTEGER :: i,j 70 INTEGER :: i,j,k 63 71 CHARACTER (LEN=20) :: modname = 'iniphysiq' 64 72 CHARACTER (LEN=80) :: abort_message … … 70 78 71 79 ! 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 88 107 89 108 ! init regular global longitude-latitude grid points and boundaries … … 110 129 111 130 ! 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)) 114 136 115 137 IF (klon_glo>1) THEN ! general case 116 138 ! 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) 121 151 DO j=2,jjm 122 152 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) 127 166 ENDDO 128 167 ENDDO 129 168 ! 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 134 181 135 182 ! 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) 137 184 ! 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)) 140 187 141 188 ! Sanity check: do total planet area match between physics and dynamics? 142 189 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)) 144 191 IF (total_area_dyn/=total_area_phy) THEN 145 192 WRITE (lunout, *) 'iniphysiq: planet total surface discrepancy !!!' … … 154 201 ELSE ! klon_glo==1, running the 1D model 155 202 ! 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) 161 216 ENDIF ! of IF (klon_glo>1) 162 217 163 218 !$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 166 225 167 226 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) 173 238 174 239 ! Initialize some physical constants … … 177 242 ! Initialize some "temporal and calendar" related variables 178 243 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) 179 247 180 248 !$OMP END PARALLEL -
trunk/LMDZ.COMMON/libf/dynphy_lonlat/phyvenus/iniphysiq_mod.F90
r1524 r1543 6 6 CONTAINS 7 7 8 SUBROUTINE iniphysiq(iim,jjm,nlayer,punjours, pdayref,ptimestep, & 9 rlatu,rlatv,rlonu,rlonv,aire,cu,cv, & 8 SUBROUTINE iniphysiq(iim,jjm,nlayer, & 9 nbp, communicator, & 10 punjours, pdayref,ptimestep, & 11 rlatu,rlatv,rlonu,rlonv,aire,cu,cv, & 10 12 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 14 17 USE mod_phys_lmdz_para, ONLY: klon_omp, & ! number of columns (on local omp grid) 15 18 klon_omp_begin, & ! start index of local omp subgrid 16 19 klon_omp_end, & ! end index of local omp subgrid 17 20 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 24 28 USE temps_mod, ONLY: annee_ref, day_ref, day_ini, day_end 25 29 USE time_phylmdz_mod, ONLY: init_time 30 USE physics_distribution_mod, ONLY : init_physics_distribution 26 31 USE regular_lonlat_mod, ONLY : init_regular_lonlat, & 27 32 east, west, north, south, & 28 33 north_east, north_west, & 29 34 south_west, south_east 35 USE mod_interface_dyn_phys, ONLY : init_interface_dyn_phys 30 36 USE nrtype, ONLY: pi 31 37 IMPLICIT NONE … … 47 53 INTEGER, INTENT (IN) :: iim ! number of atmospheric columns along longitudes 48 54 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 49 57 REAL, INTENT (IN) :: rlatu(jjm+1) ! latitudes of the physics grid 50 58 REAL, INTENT (IN) :: rlatv(jjm) ! latitude boundaries of the physics grid … … 59 67 60 68 INTEGER :: ibegin, iend, offset 61 INTEGER :: i,j 69 INTEGER :: i,j,k 62 70 CHARACTER (LEN=20) :: modname = 'iniphysiq' 63 71 CHARACTER (LEN=80) :: abort_message … … 69 77 70 78 ! 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 87 106 88 107 ! init regular global longitude-latitude grid points and boundaries … … 109 128 110 129 ! 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)) 113 135 114 136 IF (klon_glo>1) THEN ! general case 115 137 ! 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) 120 150 DO j=2,jjm 121 151 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) 126 165 ENDDO 127 166 ENDDO 128 167 ! 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 133 180 134 181 ! 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) 136 183 ! 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)) 139 186 140 187 ! Sanity check: do total planet area match between physics and dynamics? 141 188 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)) 143 190 IF (total_area_dyn/=total_area_phy) THEN 144 191 WRITE (lunout, *) 'iniphysiq: planet total surface discrepancy !!!' … … 153 200 ELSE ! klon_glo==1, running the 1D model 154 201 ! 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) 160 215 ENDIF ! of IF (klon_glo>1) 161 216 162 217 !$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 165 224 166 225 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) 172 237 173 238 ! Initialize some physical constants … … 176 241 ! Initialize some "temporal and calendar" related variables 177 242 CALL init_time(annee_ref,day_ref,day_ini,day_end,ptimestep) 243 244 ! Initialize dimphy module 245 CALL Init_dimphy(klon_omp,nlayer) 178 246 179 247 !$OMP END PARALLEL -
trunk/LMDZ.COMMON/libf/phy_common/ioipsl_getin_p_mod.F90
r1521 r1543 12 12 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 13 13 USE mod_phys_lmdz_omp_data, ONLY : is_omp_root 14 use mod_phys_lmdz_para, only: bcast14 USE mod_phys_lmdz_transfert_para, ONLY : bcast 15 15 !- 16 16 IMPLICIT NONE -
trunk/LMDZ.COMMON/libf/phy_common/mod_grid_phy_lmdz.F90
r1534 r1543 1 1 ! 2 !$ Header$2 !$Id $ 3 3 ! 4 4 MODULE mod_grid_phy_lmdz … … 7 7 PRIVATE :: grid1dTo2d_glo_igen, grid1dTo2d_glo_rgen, grid1dTo2d_glo_lgen, & 8 8 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 10 15 INTEGER,SAVE :: nbp_lon ! == iim 11 INTEGER,SAVE :: nbp_lat ! == jjmp1 16 INTEGER,SAVE :: nbp_lat ! == jjmp1 (or == 1 if running 1D model) 12 17 INTEGER,SAVE :: nbp_lev ! == llm 13 INTEGER,SAVE :: klon_glo 18 INTEGER,SAVE :: klon_glo ! total number of atmospheric columns 14 19 15 20 INTERFACE grid1dTo2d_glo … … 32 37 33 38 34 SUBROUTINE init_grid_phy_lmdz( iim,jjp1,llm)39 SUBROUTINE init_grid_phy_lmdz(grid_type_,nvertex_,nbp_lon_,nbp_lat_,nbp_lev_) 35 40 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 45 53 IF (nbp_lon*nbp_lat==1) THEN 46 54 klon_glo=1 … … 283 291 284 292 !---------------------------------------------------------------- 285 ! fonctions generiques (privees)293 ! Generic (private) fonctions 286 294 !---------------------------------------------------------------- 295 287 296 SUBROUTINE grid1dTo2d_glo_igen(VarIn,VarOut,dimsize) 297 288 298 IMPLICIT NONE 289 299 … … 320 330 321 331 SUBROUTINE grid1dTo2d_glo_rgen(VarIn,VarOut,dimsize) 332 322 333 IMPLICIT NONE 323 334 … … 353 364 354 365 SUBROUTINE grid1dTo2d_glo_lgen(VarIn,VarOut,dimsize) 366 355 367 IMPLICIT NONE 356 368 … … 386 398 387 399 SUBROUTINE grid2dTo1d_glo_igen(VarIn,VarOut,dimsize) 400 388 401 IMPLICIT NONE 389 402 … … 408 421 409 422 SUBROUTINE grid2dTo1d_glo_rgen(VarIn,VarOut,dimsize) 423 410 424 IMPLICIT NONE 411 425 … … 430 444 431 445 SUBROUTINE grid2dTo1d_glo_lgen(VarIn,VarOut,dimsize) 446 432 447 IMPLICIT NONE 433 448 -
trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_mpi_data.F90
r1521 r1543 3 3 ! 4 4 MODULE mod_phys_lmdz_mpi_data 5 USE mod_const_mpi5 ! USE mod_const_mpi 6 6 7 7 INTEGER,SAVE :: ii_begin … … 35 35 INTEGER,SAVE :: mpi_rank 36 36 INTEGER,SAVE :: mpi_size 37 INTEGER,SAVE :: mpi_root 37 INTEGER,SAVE :: mpi_master 38 ! INTEGER,SAVE :: mpi_root 38 39 LOGICAL,SAVE :: is_mpi_root 39 40 LOGICAL,SAVE :: is_using_mpi … … 43 44 LOGICAL,SAVE :: is_south_pole 44 45 INTEGER,SAVE :: COMM_LMDZ_PHY 46 INTEGER,SAVE :: MPI_REAL_LMDZ ! MPI_REAL8 45 47 46 48 CONTAINS 47 49 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 50 53 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(:) 56 63 INTEGER :: ierr 57 64 INTEGER :: klon_glo … … 64 71 #endif 65 72 66 if ( iim.eq.1) then73 if ((nbp_lon.eq.1).and.(nbp_lat.eq.1)) then ! running 1D column model 67 74 klon_glo=1 68 75 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 70 79 endif 71 80 72 COMM_LMDZ_PHY= COMM_LMDZ81 COMM_LMDZ_PHY=communicator 73 82 74 83 IF (is_using_mpi) THEN 75 84 #ifdef CPP_MPI 85 MPI_REAL_LMDZ=MPI_REAL8 76 86 CALL MPI_COMM_SIZE(COMM_LMDZ_PHY,mpi_size,ierr) 77 87 CALL MPI_COMM_RANK(COMM_LMDZ_PHY,mpi_rank,ierr) … … 82 92 ENDIF 83 93 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 84 105 IF (mpi_rank == 0) THEN 85 mpi_ root= 0106 mpi_master = 0 86 107 is_mpi_root = .true. 87 108 ENDIF … … 115 136 116 137 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) 118 139 119 140 DO i=0,mpi_size-1 … … 132 153 ij_para_begin(i) = 1 133 154 ELSE 134 ij_para_begin(i) = klon_mpi_para_begin(i)+ iim-1155 ij_para_begin(i) = klon_mpi_para_begin(i)+nbp_lon-1 135 156 ENDIF 136 157 137 jj_para_begin(i) = (ij_para_begin(i)-1)/ iim+ 1138 ii_para_begin(i) = MOD(ij_para_begin(i)-1, iim) + 1158 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 139 160 140 161 141 ij_para_end(i) = klon_mpi_para_end(i)+ iim-1142 jj_para_end(i) = (ij_para_end(i)-1)/ iim+ 1143 ii_para_end(i) = MOD(ij_para_end(i)-1, iim) + 1162 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 144 165 145 166 … … 161 182 klon_mpi = klon_mpi_para_nb(mpi_rank) 162 183 163 CALL print_module_data164 165 END SUBROUTINE init_phys_lmdz_mpi_data184 CALL Print_module_data 185 186 END SUBROUTINE Init_phys_lmdz_mpi_data 166 187 167 188 SUBROUTINE print_module_data 189 ! USE print_control_mod, ONLY: lunout 168 190 IMPLICIT NONE 169 191 INCLUDE "iniprint.h" … … 193 215 WRITE(lunout,*) 'mpi_rank =', mpi_rank 194 216 WRITE(lunout,*) 'mpi_size =', mpi_size 195 WRITE(lunout,*) 'mpi_ root =', mpi_root217 WRITE(lunout,*) 'mpi_master =', mpi_master 196 218 WRITE(lunout,*) 'is_mpi_root =', is_mpi_root 197 219 WRITE(lunout,*) 'is_north_pole =', is_north_pole -
trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_mpi_transfert.F90
r1521 r1543 9 9 bcast_mpi_i,bcast_mpi_i1,bcast_mpi_i2,bcast_mpi_i3,bcast_mpi_i4, & 10 10 bcast_mpi_r,bcast_mpi_r1,bcast_mpi_r2,bcast_mpi_r3,bcast_mpi_r4, & 11 11 bcast_mpi_l,bcast_mpi_l1,bcast_mpi_l2,bcast_mpi_l3,bcast_mpi_l4 12 12 END INTERFACE 13 13 … … 15 15 MODULE PROCEDURE scatter_mpi_i,scatter_mpi_i1,scatter_mpi_i2,scatter_mpi_i3, & 16 16 scatter_mpi_r,scatter_mpi_r1,scatter_mpi_r2,scatter_mpi_r3, & 17 17 scatter_mpi_l,scatter_mpi_l1,scatter_mpi_l2,scatter_mpi_l3 18 18 END INTERFACE 19 19 … … 22 22 MODULE PROCEDURE gather_mpi_i,gather_mpi_i1,gather_mpi_i2,gather_mpi_i3, & 23 23 gather_mpi_r,gather_mpi_r1,gather_mpi_r2,gather_mpi_r3, & 24 24 gather_mpi_l,gather_mpi_l1,gather_mpi_l2,gather_mpi_l3 25 25 END INTERFACE 26 26 … … 28 28 MODULE PROCEDURE scatter2D_mpi_i,scatter2D_mpi_i1,scatter2D_mpi_i2,scatter2D_mpi_i3, & 29 29 scatter2D_mpi_r,scatter2D_mpi_r1,scatter2D_mpi_r2,scatter2D_mpi_r3, & 30 30 scatter2D_mpi_l,scatter2D_mpi_l1,scatter2D_mpi_l2,scatter2D_mpi_l3 31 31 END INTERFACE 32 32 … … 34 34 MODULE PROCEDURE gather2D_mpi_i,gather2D_mpi_i1,gather2D_mpi_i2,gather2D_mpi_i3, & 35 35 gather2D_mpi_r,gather2D_mpi_r1,gather2D_mpi_r2,gather2D_mpi_r3, & 36 36 gather2D_mpi_l,gather2D_mpi_l1,gather2D_mpi_l2,gather2D_mpi_l3 37 37 END INTERFACE 38 38 … … 45 45 MODULE PROCEDURE grid1dTo2d_mpi_i,grid1dTo2d_mpi_i1,grid1dTo2d_mpi_i2,grid1dTo2d_mpi_i3, & 46 46 grid1dTo2d_mpi_r,grid1dTo2d_mpi_r1,grid1dTo2d_mpi_r2,grid1dTo2d_mpi_r3, & 47 47 grid1dTo2d_mpi_l,grid1dTo2d_mpi_l1,grid1dTo2d_mpi_l2,grid1dTo2d_mpi_l3 48 48 END INTERFACE 49 49 … … 51 51 MODULE PROCEDURE grid2dTo1d_mpi_i,grid2dTo1d_mpi_i1,grid2dTo1d_mpi_i2,grid2dTo1d_mpi_i3, & 52 52 grid2dTo1d_mpi_r,grid2dTo1d_mpi_r1,grid2dTo1d_mpi_r2,grid2dTo1d_mpi_r3, & 53 53 grid2dTo1d_mpi_l,grid2dTo1d_mpi_l1,grid2dTo1d_mpi_l2,grid2dTo1d_mpi_l3 54 54 END INTERFACE 55 55 … … 1236 1236 1237 1237 SUBROUTINE bcast_mpi_cgen(var,nb) 1238 USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root1238 USE mod_phys_lmdz_mpi_data 1239 1239 IMPLICIT NONE 1240 1240 … … 1250 1250 1251 1251 #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) 1253 1253 #endif 1254 1254 … … 1258 1258 1259 1259 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 1263 1264 INTEGER,DIMENSION(nb),INTENT(INOUT) :: Var 1264 INTEGER,INTENT(IN) :: nb1265 1265 1266 1266 #ifdef CPP_MPI … … 1272 1272 1273 1273 #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) 1275 1275 #endif 1276 1276 … … 1281 1281 1282 1282 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 1286 1287 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 1287 1309 INTEGER,INTENT(IN) :: nb 1310 LOGICAL,DIMENSION(nb),INTENT(INOUT) :: Var 1288 1311 1289 1312 #ifdef CPP_MPI … … 1295 1318 1296 1319 #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) 1321 1321 #endif 1322 1322 … … 1326 1326 1327 1327 SUBROUTINE scatter_mpi_igen(VarIn, VarOut, dimsize) 1328 USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root1328 USE mod_phys_lmdz_mpi_data 1329 1329 USE mod_grid_phy_lmdz 1330 1330 IMPLICIT NONE … … 1365 1365 #ifdef CPP_MPI 1366 1366 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) 1368 1368 #endif 1369 1369 … … 1371 1371 1372 1372 SUBROUTINE scatter_mpi_rgen(VarIn, VarOut, dimsize) 1373 USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root1373 USE mod_phys_lmdz_mpi_data 1374 1374 USE mod_grid_phy_lmdz 1375 1375 IMPLICIT NONE … … 1409 1409 #ifdef CPP_MPI 1410 1410 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) 1412 1412 1413 1413 #endif … … 1417 1417 1418 1418 SUBROUTINE scatter_mpi_lgen(VarIn, VarOut, dimsize) 1419 USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root1419 USE mod_phys_lmdz_mpi_data 1420 1420 USE mod_grid_phy_lmdz 1421 1421 IMPLICIT NONE … … 1455 1455 #ifdef CPP_MPI 1456 1456 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) 1458 1458 #endif 1459 1459 … … 1464 1464 1465 1465 SUBROUTINE gather_mpi_igen(VarIn, VarOut, dimsize) 1466 USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root1466 USE mod_phys_lmdz_mpi_data 1467 1467 USE mod_grid_phy_lmdz 1468 1468 IMPLICIT NONE … … 1493 1493 displs(rank)=Index-1 1494 1494 counts(rank)=nb*dimsize 1495 1495 Index=Index+nb*dimsize 1496 1496 ENDDO 1497 1497 … … 1500 1500 #ifdef CPP_MPI 1501 1501 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 1506 1506 IF (is_mpi_root) THEN 1507 1507 Index=1 … … 1510 1510 DO i=1,dimsize 1511 1511 VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1) 1512 1512 Index=Index+nb 1513 1513 ENDDO 1514 1514 ENDDO … … 1518 1518 1519 1519 SUBROUTINE gather_mpi_rgen(VarIn, VarOut, dimsize) 1520 USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root1520 USE mod_phys_lmdz_mpi_data 1521 1521 USE mod_grid_phy_lmdz 1522 1522 IMPLICIT NONE … … 1542 1542 displs(rank)=Index-1 1543 1543 counts(rank)=nb*dimsize 1544 1544 Index=Index+nb*dimsize 1545 1545 ENDDO 1546 1546 ENDIF … … 1553 1553 #ifdef CPP_MPI 1554 1554 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 1558 1558 IF (is_mpi_root) THEN 1559 1559 Index=1 … … 1562 1562 DO i=1,dimsize 1563 1563 VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1) 1564 1564 Index=Index+nb 1565 1565 ENDDO 1566 1566 ENDDO … … 1570 1570 1571 1571 SUBROUTINE gather_mpi_lgen(VarIn, VarOut, dimsize) 1572 USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root1572 USE mod_phys_lmdz_mpi_data 1573 1573 USE mod_grid_phy_lmdz 1574 1574 IMPLICIT NONE … … 1599 1599 displs(rank)=Index-1 1600 1600 counts(rank)=nb*dimsize 1601 1601 Index=Index+nb*dimsize 1602 1602 ENDDO 1603 1603 ENDIF … … 1606 1606 #ifdef CPP_MPI 1607 1607 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 1611 1611 IF (is_mpi_root) THEN 1612 1612 Index=1 … … 1615 1615 DO i=1,dimsize 1616 1616 VarOut(klon_mpi_para_begin(rank):klon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1) 1617 1617 Index=Index+nb 1618 1618 ENDDO 1619 1619 ENDDO … … 1625 1625 1626 1626 SUBROUTINE reduce_sum_mpi_igen(VarIn,VarOut,nb) 1627 USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root1627 USE mod_phys_lmdz_mpi_data 1628 1628 USE mod_grid_phy_lmdz 1629 1629 IMPLICIT NONE … … 1633 1633 #endif 1634 1634 1635 INTEGER,INTENT(IN) :: nb 1635 1636 INTEGER,DIMENSION(nb),INTENT(IN) :: VarIn 1636 1637 INTEGER,DIMENSION(nb),INTENT(OUT) :: VarOut 1637 INTEGER,INTENT(IN) :: nb1638 1638 INTEGER :: ierr 1639 1639 … … 1645 1645 1646 1646 #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) 1648 1648 #endif 1649 1649 … … 1651 1651 1652 1652 SUBROUTINE reduce_sum_mpi_rgen(VarIn,VarOut,nb) 1653 USE mod_phys_lmdz_mpi_data , mpi_root_x=>mpi_root1653 USE mod_phys_lmdz_mpi_data 1654 1654 USE mod_grid_phy_lmdz 1655 1655 … … 1660 1660 #endif 1661 1661 1662 INTEGER,INTENT(IN) :: nb 1662 1663 REAL,DIMENSION(nb),INTENT(IN) :: VarIn 1663 1664 REAL,DIMENSION(nb),INTENT(OUT) :: VarOut 1664 INTEGER,INTENT(IN) :: nb1665 1665 INTEGER :: ierr 1666 1666 … … 1671 1671 1672 1672 #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) 1674 1674 #endif 1675 1675 … … 1707 1707 DO ij=1,nbp_lon 1708 1708 VarOut(ij,i)=VarIn(1,i) 1709 1709 ENDDO 1710 1710 ENDDO 1711 1711 ENDIF … … 1715 1715 DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb 1716 1716 VarOut(ij,i)=VarIn(klon_mpi,i) 1717 1717 ENDDO 1718 1718 ENDDO 1719 1719 ENDIF … … 1751 1751 DO ij=1,nbp_lon 1752 1752 VarOut(ij,i)=VarIn(1,i) 1753 1753 ENDDO 1754 1754 ENDDO 1755 1755 ENDIF … … 1759 1759 DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb 1760 1760 VarOut(ij,i)=VarIn(klon_mpi,i) 1761 1761 ENDDO 1762 1762 ENDDO 1763 1763 ENDIF … … 1796 1796 DO ij=1,nbp_lon 1797 1797 VarOut(ij,i)=VarIn(1,i) 1798 1798 ENDDO 1799 1799 ENDDO 1800 1800 ENDIF … … 1804 1804 DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb 1805 1805 VarOut(ij,i)=VarIn(klon_mpi,i) 1806 1806 ENDDO 1807 1807 ENDDO 1808 1808 ENDIF … … 1901 1901 1902 1902 END MODULE mod_phys_lmdz_mpi_transfert 1903 -
trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_omp_data.F90
r1521 r1543 1 1 ! 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 $ 3 3 ! 4 4 MODULE mod_phys_lmdz_omp_data … … 20 20 CONTAINS 21 21 22 SUBROUTINE init_phys_lmdz_omp_data(klon_mpi)22 SUBROUTINE Init_phys_lmdz_omp_data(klon_mpi) 23 23 USE dimphy 24 24 IMPLICIT NONE … … 85 85 klon_omp_end=klon_omp_para_end(omp_rank) 86 86 87 CALL print_module_data87 CALL Print_module_data 88 88 89 END SUBROUTINE init_phys_lmdz_omp_data89 END SUBROUTINE Init_phys_lmdz_omp_data 90 90 91 SUBROUTINE print_module_data91 SUBROUTINE Print_module_data 92 92 IMPLICIT NONE 93 93 INCLUDE "iniprint.h" … … 106 106 !$OMP END CRITICAL 107 107 108 END SUBROUTINE print_module_data108 END SUBROUTINE Print_module_data 109 109 END MODULE mod_phys_lmdz_omp_data -
trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_omp_transfert.F90
r1521 r1543 25 25 bcast_omp_i,bcast_omp_i1,bcast_omp_i2,bcast_omp_i3,bcast_omp_i4, & 26 26 bcast_omp_r,bcast_omp_r1,bcast_omp_r2,bcast_omp_r3,bcast_omp_r4, & 27 27 bcast_omp_l,bcast_omp_l1,bcast_omp_l2,bcast_omp_l3,bcast_omp_l4 28 28 END INTERFACE 29 29 … … 31 31 MODULE PROCEDURE scatter_omp_i,scatter_omp_i1,scatter_omp_i2,scatter_omp_i3, & 32 32 scatter_omp_r,scatter_omp_r1,scatter_omp_r2,scatter_omp_r3, & 33 33 scatter_omp_l,scatter_omp_l1,scatter_omp_l2,scatter_omp_l3 34 34 END INTERFACE 35 35 … … 38 38 MODULE PROCEDURE gather_omp_i,gather_omp_i1,gather_omp_i2,gather_omp_i3, & 39 39 gather_omp_r,gather_omp_r1,gather_omp_r2,gather_omp_r3, & 40 40 gather_omp_l,gather_omp_l1,gather_omp_l2,gather_omp_l3 41 41 END INTERFACE 42 42 … … 48 48 49 49 50 PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp 50 PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp, omp_barrier 51 51 52 52 CONTAINS 53 53 54 SUBROUTINE omp_barrier 55 IMPLICIT NONE 56 57 !$OMP BARRIER 58 59 END SUBROUTINE omp_barrier 60 54 61 SUBROUTINE check_buffer_i(buff_size) 55 62 IMPLICIT NONE … … 733 740 IMPLICIT NONE 734 741 742 INTEGER,INTENT(IN) :: Nb 735 743 INTEGER,DIMENSION(Nb),INTENT(INOUT) :: Var 736 744 INTEGER,DIMENSION(Nb),INTENT(INOUT) :: Buff 737 INTEGER,INTENT(IN) :: Nb738 745 739 746 INTEGER :: i … … 757 764 IMPLICIT NONE 758 765 766 INTEGER,INTENT(IN) :: Nb 759 767 REAL,DIMENSION(Nb),INTENT(INOUT) :: Var 760 768 REAL,DIMENSION(Nb),INTENT(INOUT) :: Buff 761 INTEGER,INTENT(IN) :: Nb762 769 763 770 INTEGER :: i … … 780 787 IMPLICIT NONE 781 788 789 INTEGER,INTENT(IN) :: Nb 782 790 LOGICAL,DIMENSION(Nb),INTENT(INOUT) :: Var 783 791 LOGICAL,DIMENSION(Nb),INTENT(INOUT) :: Buff 784 INTEGER,INTENT(IN) :: Nb785 792 786 793 INTEGER :: i -
trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_para.F90
r1521 r1543 16 16 CONTAINS 17 17 18 SUBROUTINE init_phys_lmdz_para(iim,jjp1,nb_proc,distrib)18 SUBROUTINE Init_phys_lmdz_para(nbp,nbp_lon,nbp_lat,communicator) 19 19 IMPLICIT NONE 20 INTEGER,INTENT(in) :: iim21 INTEGER,INTENT(in) :: jjp122 INTEGER,INTENT(in) :: nb _proc23 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 24 24 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) 26 26 !$OMP PARALLEL 27 CALL init_phys_lmdz_omp_data(klon_mpi)27 CALL Init_phys_lmdz_omp_data(klon_mpi) 28 28 klon_loc=klon_omp 29 29 IF (is_mpi_root .AND. is_omp_root) THEN … … 32 32 is_master=.FALSE. 33 33 ENDIF 34 CALL test_transfert34 CALL Test_transfert 35 35 !$OMP END PARALLEL 36 36 IF (is_using_mpi .OR. is_using_omp) THEN … … 42 42 ENDIF 43 43 44 END SUBROUTINE init_phys_lmdz_para44 END SUBROUTINE Init_phys_lmdz_para 45 45 46 SUBROUTINE test_transfert46 SUBROUTINE Test_transfert 47 47 USE mod_grid_phy_lmdz 48 48 IMPLICIT NONE … … 108 108 109 109 110 END SUBROUTINE test_transfert110 END SUBROUTINE Test_transfert 111 111 112 112 END MODULE mod_phys_lmdz_para -
trunk/LMDZ.COMMON/libf/phy_common/write_field_phy.F90
r1523 r1543 1 1 ! 2 ! $ Header$2 ! $Id: write_field_phy.F90 2342 2015-08-19 13:21:38Z emillour $ 3 3 ! 4 4 MODULE write_field_phy 5 5 6 ! Dump a field on the global (nbp_lon by nbp_lat) physics grid 7 6 8 CONTAINS 7 9 8 10 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 13 16 14 17 IMPLICIT NONE 15 include 'dimensions.h'16 include 'paramet.h'17 18 18 character(len=*):: name19 INTEGER :: ll20 real, dimension(klon_omp,ll) :: Field21 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 22 23 real, dimension(klon_glo,ll):: New_Field 23 real, dimension( iim,jjp1,ll):: Field_2d24 real, dimension(nbp_lon,nbp_lat,ll):: Field_2d 24 25 25 26 CALL Gather(Field,New_Field)
Note: See TracChangeset
for help on using the changeset viewer.