Changeset 2344 for LMDZ5/trunk/libf/phylmd/iophy.F90
- Timestamp:
- Aug 21, 2015, 9:23:13 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/iophy.F90
r2319 r2344 54 54 #endif 55 55 IMPLICIT NONE 56 INCLUDE 'dimensions.h'56 ! INCLUDE 'dimensions.h' 57 57 REAL,DIMENSION(klon),INTENT(IN) :: rlon 58 58 REAL,DIMENSION(klon),INTENT(IN) :: rlat … … 77 77 78 78 !$OMP MASTER 79 ALLOCATE(io_lat( jjm+1-1/(iim*jjm)))79 ALLOCATE(io_lat(nbp_lat-1/(nbp_lon*(nbp_lat-1)))) 80 80 io_lat(1)=rlat_glo(1) 81 io_lat( jjm+1-1/(iim*jjm))=rlat_glo(klon_glo)82 IF (( iim*jjm) > 1) then83 DO i=2, jjm84 io_lat(i)=rlat_glo(2+(i-2)* iim)81 io_lat(nbp_lat-1/(nbp_lon*(nbp_lat-1)))=rlat_glo(klon_glo) 82 IF ((nbp_lon*nbp_lat) > 1) then 83 DO i=2,nbp_lat-1 84 io_lat(i)=rlat_glo(2+(i-2)*nbp_lon) 85 85 ENDDO 86 86 ENDIF 87 87 88 ALLOCATE(io_lon(iim)) 89 io_lon(:)=rlon_glo(2-1/(iim*jjm):iim+1-1/(iim*jjm)) 88 ALLOCATE(io_lon(nbp_lon)) 89 IF (klon_glo == 1) THEN 90 io_lon(1)=rlon_glo(1) 91 ELSE 92 io_lon(1:nbp_lon)=rlon_glo(2:nbp_lon+1) 93 ENDIF 94 90 95 !! (I) dtnb : total number of domains 91 96 !! (I) dnb : domain number … … 104 109 105 110 ddid=(/ 1,2 /) 106 dsg=(/ iim, jjm+1-1/(iim*jjm)/)107 dsl=(/ iim, jj_nb /)111 dsg=(/ nbp_lon, nbp_lat /) 112 dsl=(/ nbp_lon, jj_nb /) 108 113 dpf=(/ 1,jj_begin /) 109 dpl=(/ iim, jj_end /)114 dpl=(/ nbp_lon, jj_end /) 110 115 dhs=(/ ii_begin-1,0 /) 111 116 IF (mpi_rank==mpi_size-1) THEN 112 117 dhe=(/0,0/) 113 118 ELSE 114 dhe=(/ iim-ii_end,0 /)119 dhe=(/ nbp_lon-ii_end,0 /) 115 120 ENDIF 116 121 … … 155 160 mpi_size, mpi_rank 156 161 USE ioipsl, only: flio_dom_set 162 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 157 163 IMPLICIT NONE 158 INCLUDE 'dimensions.h' 159 REAL,DIMENSION(iim),INTENT(IN) :: lon 160 REAL,DIMENSION(jjm+1-1/(iim*jjm)),INTENT(IN) :: lat 164 REAL,DIMENSION(nbp_lon),INTENT(IN) :: lon 165 REAL,DIMENSION(nbp_lat),INTENT(IN) :: lat 161 166 162 167 INTEGER,DIMENSION(2) :: ddid … … 169 174 170 175 !$OMP MASTER 171 allocate(io_lat( jjm+1-1/(iim*jjm)))176 allocate(io_lat(nbp_lat)) 172 177 io_lat(:)=lat(:) 173 allocate(io_lon( iim))178 allocate(io_lon(nbp_lon)) 174 179 io_lon(:)=lon(:) 175 180 176 181 ddid=(/ 1,2 /) 177 dsg=(/ iim, jjm+1-1/(iim*jjm)/)178 dsl=(/ iim, jj_nb /)182 dsg=(/ nbp_lon, nbp_lat /) 183 dsl=(/ nbp_lon, jj_nb /) 179 184 dpf=(/ 1,jj_begin /) 180 dpl=(/ iim, jj_end /)185 dpl=(/ nbp_lon, jj_end /) 181 186 dhs=(/ ii_begin-1,0 /) 182 187 if (mpi_rank==mpi_size-1) then 183 188 dhe=(/0,0/) 184 189 else 185 dhe=(/ iim-ii_end,0 /)190 dhe=(/ nbp_lon-ii_end,0 /) 186 191 endif 187 192 … … 198 203 USE mod_phys_lmdz_para, only: is_sequential, is_using_mpi, is_mpi_root, & 199 204 jj_begin, jj_end, jj_nb 205 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 200 206 use ioipsl, only: histbeg 201 207 #ifdef CPP_XIOS … … 203 209 #endif 204 210 IMPLICIT NONE 205 include 'dimensions.h'206 211 include 'clesphys.h' 207 212 … … 217 222 !$OMP MASTER 218 223 if (is_sequential) then 219 call histbeg(name, iim,io_lon, jj_nb,io_lat(jj_begin:jj_end), &220 1, iim,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day)224 call histbeg(name,nbp_lon,io_lon, jj_nb,io_lat(jj_begin:jj_end), & 225 1,nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day) 221 226 else 222 call histbeg(name, iim,io_lon, jj_nb,io_lat(jj_begin:jj_end), &223 1, iim,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day,phys_domain_id)227 call histbeg(name,nbp_lon,io_lon, jj_nb,io_lat(jj_begin:jj_end), & 228 1,nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day,phys_domain_id) 224 229 endif 225 230 … … 240 245 241 246 USE mod_phys_lmdz_para, only: jj_begin, jj_end, jj_nb, is_sequential 247 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 242 248 use ioipsl, only: histbeg 243 249 244 250 IMPLICIT NONE 245 include 'dimensions.h'246 251 247 252 character*(*), INTENT(IN) :: name … … 255 260 #ifndef CPP_IOIPSL_NO_OUTPUT 256 261 if (is_sequential) then 257 call histbeg(name, iim,io_lon, jj_nb,io_lat(jj_begin:jj_end), &258 1, iim,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day)262 call histbeg(name,nbp_lon,io_lon, jj_nb,io_lat(jj_begin:jj_end), & 263 1,nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day) 259 264 else 260 call histbeg(name, iim,io_lon, jj_nb,io_lat(jj_begin:jj_end), &261 1, iim,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day,phys_domain_id)265 call histbeg(name,nbp_lon,io_lon, jj_nb,io_lat(jj_begin:jj_end), & 266 1,nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day,phys_domain_id) 262 267 endif 263 268 #endif … … 274 279 is_sequential, klon_mpi_begin, klon_mpi_end, & 275 280 mpi_rank 276 USE mod_grid_phy_lmdz, only: klon_glo 281 USE mod_grid_phy_lmdz, only: klon_glo, nbp_lon, nbp_lat 277 282 use ioipsl, only: histbeg 278 283 279 284 IMPLICIT NONE 280 include 'dimensions.h'281 285 282 286 REAL,DIMENSION(klon),INTENT(IN) :: rlon … … 304 308 REAL, allocatable, DIMENSION(:) :: npplat, npplon 305 309 REAL, allocatable, DIMENSION(:,:) :: npplat_bounds, npplon_bounds 306 INTEGER, PARAMETER :: jjmp1=jjm+1-1/jjm 307 REAL, DIMENSION(iim,jjmp1) :: zx_lon, zx_lat 310 REAL, DIMENSION(nbp_lon,nbp_lat) :: zx_lon, zx_lat 308 311 309 312 CALL gather(rlat,rlat_glo) … … 330 333 endif 331 334 ! 332 IF ( tabij(i).LE. iim) THEN335 IF ( tabij(i).LE.nbp_lon) THEN 333 336 plat_bounds(i,1)=rlat_glo(tabij(i)) 334 337 ELSE 335 plat_bounds(i,1)=rlat_glo(tabij(i)- iim)338 plat_bounds(i,1)=rlat_glo(tabij(i)-nbp_lon) 336 339 ENDIF 337 plat_bounds(i,2)=rlat_glo(tabij(i)+ iim)340 plat_bounds(i,2)=rlat_glo(tabij(i)+nbp_lon) 338 341 ! 339 342 ! print*,'CFMIP_iophy point i lon lon_bds',i,plon_bounds(i,1),rlon_glo(tabij(i)),plon_bounds(i,2) … … 351 354 ENDDO 352 355 353 CALL gr_fi_ecrit(1,klon, iim,jjmp1,rlon_glo,zx_lon)354 if (( iim*jjm).gt.1) then355 DO i = 1, iim356 CALL gr_fi_ecrit(1,klon,nbp_lon,nbp_lat,rlon_glo,zx_lon) 357 if ((nbp_lon*nbp_lat).gt.1) then 358 DO i = 1, nbp_lon 356 359 zx_lon(i,1) = rlon_glo(i+1) 357 zx_lon(i, jjmp1) = rlon_glo(i+1)360 zx_lon(i,nbp_lat) = rlon_glo(i+1) 358 361 ENDDO 359 362 endif 360 CALL gr_fi_ecrit(1,klon, iim,jjmp1,rlat_glo,zx_lat)363 CALL gr_fi_ecrit(1,klon,nbp_lon,nbp_lat,rlat_glo,zx_lat) 361 364 362 365 DO i=1,pim … … 367 370 368 371 if (ipt(i).EQ.1) then 369 plon_bounds(i,1)=zx_lon( iim,jpt(i))372 plon_bounds(i,1)=zx_lon(nbp_lon,jpt(i)) 370 373 plon_bounds(i,2)=360.+zx_lon(ipt(i)+1,jpt(i)) 371 374 endif 372 375 373 if (ipt(i).EQ. iim) then376 if (ipt(i).EQ.nbp_lon) then 374 377 plon_bounds(i,2)=360.+zx_lon(1,jpt(i)) 375 378 endif … … 383 386 endif 384 387 385 if (jpt(i).EQ. jjmp1) then386 plat_bounds(i,1)=zx_lat(ipt(i), jjmp1)+0.001387 plat_bounds(i,2)=zx_lat(ipt(i), jjmp1)-0.001388 if (jpt(i).EQ.nbp_lat) then 389 plat_bounds(i,1)=zx_lat(ipt(i),nbp_lat)+0.001 390 plat_bounds(i,2)=zx_lat(ipt(i),nbp_lat)-0.001 388 391 endif 389 392 ! … … 451 454 use phys_output_var_mod, only: type_ecri, zoutm, zdtime_moy, lev_files, & 452 455 nid_files, nhorim, swaero_diag, nfiles 456 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 453 457 IMPLICIT NONE 454 458 455 INCLUDE "dimensions.h"456 INCLUDE "temps.h"457 459 INCLUDE "clesphys.h" 458 460 … … 478 480 IF ( flag_var(iff)<=lev_files(iff) ) THEN 479 481 CALL histdef (nid_files(iff),nomvar,titrevar,unitvar, & 480 iim,jj_nb,nhorim(iff), 1,1,1, -99, 32, &482 nbp_lon,jj_nb,nhorim(iff), 1,1,1, -99, 32, & 481 483 type_ecri(iff), zstophym,zoutm(iff)) 482 484 ENDIF … … 507 509 nhorim, zdtime_moy, levmin, levmax, & 508 510 nvertm, nfiles 511 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 509 512 IMPLICIT NONE 510 513 511 INCLUDE "dimensions.h"512 INCLUDE "temps.h"513 ! INCLUDE "indicesol.h"514 514 INCLUDE "clesphys.h" 515 515 … … 535 535 IF ( flag_var(iff)<=lev_files(iff) ) THEN 536 536 CALL histdef (nid_files(iff), nomvar, titrevar, unitvar, & 537 iim, jj_nb, nhorim(iff), klev, levmin(iff), &537 nbp_lon, jj_nb, nhorim(iff), klev, levmin(iff), & 538 538 levmax(iff)-levmin(iff)+1, nvertm(iff), 32, type_ecri(iff), & 539 539 zstophym, zoutm(iff)) … … 564 564 nid_files, nhorim, swaero_diag 565 565 USE print_control_mod, ONLY: prt_level,lunout 566 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 566 567 #ifdef CPP_XIOS 567 568 use wxios, only: wxios_add_field_to_file … … 569 570 IMPLICIT NONE 570 571 571 INCLUDE "dimensions.h"572 INCLUDE "temps.h"573 572 INCLUDE "clesphys.h" 574 573 … … 621 620 IF ( var%flag(iff)<=lev_files(iff) ) THEN 622 621 CALL histdef (nid_files(iff), var%name, var%description, var%unit, & 623 iim,jj_nb,nhorim(iff), 1,1,1, -99, 32, &622 nbp_lon,jj_nb,nhorim(iff), 1,1,1, -99, 32, & 624 623 typeecrit, zstophym,zoutm(iff)) 625 624 ENDIF … … 651 650 levmax, nvertm 652 651 USE print_control_mod, ONLY: prt_level,lunout 652 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 653 653 #ifdef CPP_XIOS 654 654 use wxios, only: wxios_add_field_to_file … … 656 656 IMPLICIT NONE 657 657 658 INCLUDE "dimensions.h"659 INCLUDE "temps.h"660 658 INCLUDE "clesphys.h" 661 659 … … 708 706 IF ( var%flag(iff)<=lev_files(iff) ) THEN 709 707 CALL histdef (nid_files(iff), var%name, var%description, var%unit, & 710 iim, jj_nb, nhorim(iff), klev, levmin(iff), &708 nbp_lon, jj_nb, nhorim(iff), klev, levmin(iff), & 711 709 levmax(iff)-levmin(iff)+1, nvertm(iff), 32, typeecrit, & 712 710 zstophym, zoutm(iff)) … … 750 748 USE ioipsl, only: histwrite 751 749 USE print_control_mod, ONLY: prt_level,lunout 750 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 752 751 IMPLICIT NONE 753 include 'dimensions.h'754 752 755 753 integer,INTENT(IN) :: nid … … 760 758 REAL,DIMENSION(klon_mpi) :: buffer_omp 761 759 INTEGER, allocatable, DIMENSION(:) :: index2d 762 REAL :: Field2d( iim,jj_nb)760 REAL :: Field2d(nbp_lon,jj_nb) 763 761 764 762 integer :: ip … … 772 770 CALL grid1Dto2D_mpi(buffer_omp,Field2d) 773 771 if(.NOT.lpoint) THEN 774 ALLOCATE(index2d( iim*jj_nb))775 ALLOCATE(fieldok( iim*jj_nb))772 ALLOCATE(index2d(nbp_lon*jj_nb)) 773 ALLOCATE(fieldok(nbp_lon*jj_nb)) 776 774 IF (prt_level >= 10) write(lunout,*)'Sending ',name,' to IOIPSL' 777 CALL histwrite(nid,name,itau,Field2d, iim*jj_nb,index2d)775 CALL histwrite(nid,name,itau,Field2d,nbp_lon*jj_nb,index2d) 778 776 IF (prt_level >= 10) write(lunout,*)'Finished sending ',name,' to IOIPSL' 779 777 else … … 813 811 is_sequential, klon_mpi_begin, klon_mpi_end, & 814 812 jj_nb, klon_mpi 813 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 815 814 use ioipsl, only: histwrite 816 815 USE print_control_mod, ONLY: prt_level,lunout 817 816 IMPLICIT NONE 818 include 'dimensions.h'819 817 820 818 integer,INTENT(IN) :: nid … … 824 822 REAL,DIMENSION(:,:),INTENT(IN) :: field ! --> field(klon,:) 825 823 REAL,DIMENSION(klon_mpi,size(field,2)) :: buffer_omp 826 REAL :: Field3d( iim,jj_nb,size(field,2))824 REAL :: Field3d(nbp_lon,jj_nb,size(field,2)) 827 825 INTEGER :: ip, n, nlev 828 826 INTEGER, ALLOCATABLE, DIMENSION(:) :: index3d … … 837 835 CALL grid1Dto2D_mpi(buffer_omp,field3d) 838 836 if(.NOT.lpoint) THEN 839 ALLOCATE(index3d( iim*jj_nb*nlev))840 ALLOCATE(fieldok( iim*jj_nb,nlev))837 ALLOCATE(index3d(nbp_lon*jj_nb*nlev)) 838 ALLOCATE(fieldok(nbp_lon*jj_nb,nlev)) 841 839 IF (prt_level >= 10) write(lunout,*)'Sending ',name,' to IOIPSL' 842 CALL histwrite(nid,name,itau,Field3d, iim*jj_nb*nlev,index3d)840 CALL histwrite(nid,name,itau,Field3d,nbp_lon*jj_nb*nlev,index3d) 843 841 IF (prt_level >= 10) write(lunout,*)'Finished sending ',name,' to IOIPSL' 844 842 else … … 889 887 nid_files 890 888 USE print_control_mod, ONLY: prt_level,lunout 889 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 891 890 #ifdef CPP_XIOS 892 891 USE xios, only: xios_send_field … … 895 894 896 895 IMPLICIT NONE 897 INCLUDE 'dimensions.h'898 896 include 'clesphys.h' 899 897 … … 908 906 REAL,DIMENSION(klon_mpi) :: buffer_omp 909 907 INTEGER, allocatable, DIMENSION(:) :: index2d 910 REAL :: Field2d( iim,jj_nb)908 REAL :: Field2d(nbp_lon,jj_nb) 911 909 912 910 INTEGER :: ip … … 989 987 990 988 IF(.NOT.clef_stations(iff)) THEN 991 ALLOCATE(index2d( iim*jj_nb))992 ALLOCATE(fieldok( iim*jj_nb))989 ALLOCATE(index2d(nbp_lon*jj_nb)) 990 ALLOCATE(fieldok(nbp_lon*jj_nb)) 993 991 #ifndef CPP_IOIPSL_NO_OUTPUT 994 CALL histwrite(nid_files(iff),var%name,itau_iophy,Field2d, iim*jj_nb,index2d)992 CALL histwrite(nid_files(iff),var%name,itau_iophy,Field2d,nbp_lon*jj_nb,index2d) 995 993 #endif 996 994 !#ifdef CPP_XIOS … … 1048 1046 nfiles, vars_defined, clef_stations, & 1049 1047 nid_files 1048 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 1050 1049 #ifdef CPP_XIOS 1051 1050 USE xios, only: xios_send_field … … 1054 1053 1055 1054 IMPLICIT NONE 1056 INCLUDE 'dimensions.h'1057 1055 include 'clesphys.h' 1058 1056 … … 1065 1063 !$OMP THREADPRIVATE(firstx) 1066 1064 REAL,DIMENSION(klon_mpi,SIZE(field,2)) :: buffer_omp 1067 REAL :: Field3d( iim,jj_nb,SIZE(field,2))1065 REAL :: Field3d(nbp_lon,jj_nb,SIZE(field,2)) 1068 1066 INTEGER :: ip, n, nlev, nlevx 1069 1067 INTEGER, ALLOCATABLE, DIMENSION(:) :: index3d … … 1131 1129 write(lunout,*)'histwrite3d_phy: call xios_send_field for ', & 1132 1130 trim(var%name), ' with iim jjm nlevx = ', & 1133 iim,jj_nb,nlevx1131 nbp_lon,jj_nb,nlevx 1134 1132 endif 1135 1133 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) … … 1138 1136 #endif 1139 1137 IF (.NOT.clef_stations(iff)) THEN 1140 ALLOCATE(index3d( iim*jj_nb*nlev))1141 ALLOCATE(fieldok( iim*jj_nb,nlev))1138 ALLOCATE(index3d(nbp_lon*jj_nb*nlev)) 1139 ALLOCATE(fieldok(nbp_lon*jj_nb,nlev)) 1142 1140 1143 1141 #ifndef CPP_IOIPSL_NO_OUTPUT 1144 CALL histwrite(nid_files(iff),var%name,itau_iophy,Field3d, iim*jj_nb*nlev,index3d)1142 CALL histwrite(nid_files(iff),var%name,itau_iophy,Field3d,nbp_lon*jj_nb*nlev,index3d) 1145 1143 #endif 1146 1144 … … 1194 1192 is_sequential, klon_mpi_begin, klon_mpi_end, & 1195 1193 jj_nb, klon_mpi 1194 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 1196 1195 USE xios, only: xios_send_field 1197 1196 USE print_control_mod, ONLY: prt_level,lunout 1198 1197 1199 1198 IMPLICIT NONE 1200 INCLUDE 'dimensions.h'1201 1199 1202 1200 CHARACTER(LEN=*), INTENT(IN) :: field_name … … 1205 1203 REAL,DIMENSION(klon_mpi) :: buffer_omp 1206 1204 INTEGER, allocatable, DIMENSION(:) :: index2d 1207 REAL :: Field2d( iim,jj_nb)1205 REAL :: Field2d(nbp_lon,jj_nb) 1208 1206 1209 1207 INTEGER :: ip … … 1224 1222 !IF(.NOT.clef_stations(iff)) THEN 1225 1223 IF (.TRUE.) THEN 1226 ALLOCATE(index2d( iim*jj_nb))1227 ALLOCATE(fieldok( iim*jj_nb))1224 ALLOCATE(index2d(nbp_lon*jj_nb)) 1225 ALLOCATE(fieldok(nbp_lon*jj_nb)) 1228 1226 1229 1227 … … 1265 1263 jj_nb, klon_mpi 1266 1264 USE xios, only: xios_send_field 1265 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 1267 1266 USE print_control_mod, ONLY: prt_level,lunout 1268 1267 1269 1268 IMPLICIT NONE 1270 INCLUDE 'dimensions.h'1271 1269 1272 1270 CHARACTER(LEN=*), INTENT(IN) :: field_name … … 1274 1272 1275 1273 REAL,DIMENSION(klon_mpi,SIZE(field,2)) :: buffer_omp 1276 REAL :: Field3d( iim,jj_nb,SIZE(field,2))1274 REAL :: Field3d(nbp_lon,jj_nb,SIZE(field,2)) 1277 1275 INTEGER :: ip, n, nlev 1278 1276 INTEGER, ALLOCATABLE, DIMENSION(:) :: index3d … … 1295 1293 !IF (.NOT.clef_stations(iff)) THEN 1296 1294 IF(.TRUE.)THEN 1297 ALLOCATE(index3d( iim*jj_nb*nlev))1298 ALLOCATE(fieldok( iim*jj_nb,nlev))1295 ALLOCATE(index3d(nbp_lon*jj_nb*nlev)) 1296 ALLOCATE(fieldok(nbp_lon*jj_nb,nlev)) 1299 1297 CALL xios_send_field(field_name, Field3d(:,:,1:nlev)) 1300 1298
Note: See TracChangeset
for help on using the changeset viewer.