Changeset 2854 for LMDZ5/trunk/libf/phylmd/iophy.F90
- Timestamp:
- Apr 14, 2017, 4:42:31 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/iophy.F90
r2660 r2854 45 45 46 46 SUBROUTINE init_iophy_new(rlat,rlon) 47 USE dimphy, only: klon48 USE mod_phys_lmdz_para, only: gather, bcast, &47 USE dimphy, ONLY: klon 48 USE mod_phys_lmdz_para, ONLY: gather, bcast, & 49 49 jj_nb, jj_begin, jj_end, ii_begin, ii_end, & 50 50 mpi_size, mpi_rank, klon_mpi, & 51 51 is_sequential, is_south_pole_dyn 52 USE mod_grid_phy_lmdz, only: nbp_lon, nbp_lat, klon_glo52 USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, klon_glo 53 53 USE print_control_mod, ONLY: prt_level,lunout 54 54 #ifdef CPP_IOIPSL 55 USE ioipsl, only: flio_dom_set56 #endif 57 #ifdef CPP_XIOS 58 use wxios, only: wxios_domain_param55 USE ioipsl, ONLY: flio_dom_set 56 #endif 57 #ifdef CPP_XIOS 58 USE wxios, ONLY: wxios_domain_param 59 59 #endif 60 60 IMPLICIT NONE … … 136 136 ELSE 137 137 data_ibegin = ii_begin - 1 138 END 138 ENDIF 139 139 140 140 IF (mpi_rank == mpi_size-1) THEN … … 142 142 ELSE 143 143 data_iend = ii_end + 1 144 END 145 146 if (prt_level>=10) then144 ENDIF 145 146 IF (prt_level>=10) THEN 147 147 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," iibegin=",ii_begin , " ii_end=",ii_end," jjbegin=",jj_begin," jj_nb=",jj_nb," jj_end=",jj_end 148 148 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," nbp_lon=",nbp_lon," nbp_lat=",nbp_lat … … 150 150 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," data_ibegin=",data_ibegin," data_iend=",data_iend 151 151 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," is_south_pole=",is_south_pole_dyn 152 endif152 ENDIF 153 153 154 154 ! Initialize the XIOS domain coreesponding to this process: … … 163 163 164 164 SUBROUTINE init_iophy(lat,lon) 165 USE mod_phys_lmdz_para, only: jj_begin, jj_end, ii_begin, ii_end, jj_nb, &165 USE mod_phys_lmdz_para, ONLY: jj_begin, jj_end, ii_begin, ii_end, jj_nb, & 166 166 mpi_size, mpi_rank 167 USE ioipsl, only: flio_dom_set167 USE ioipsl, ONLY: flio_dom_set 168 168 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 169 169 IMPLICIT NONE … … 180 180 181 181 !$OMP MASTER 182 allocate(io_lat(nbp_lat))182 ALLOCATE(io_lat(nbp_lat)) 183 183 io_lat(:)=lat(:) 184 allocate(io_lon(nbp_lon))184 ALLOCATE(io_lon(nbp_lon)) 185 185 io_lon(:)=lon(:) 186 186 … … 191 191 dpl=(/ nbp_lon, jj_end /) 192 192 dhs=(/ ii_begin-1,0 /) 193 if (mpi_rank==mpi_size-1) then193 IF (mpi_rank==mpi_size-1) THEN 194 194 dhe=(/0,0/) 195 else195 ELSE 196 196 dhe=(/ nbp_lon-ii_end,0 /) 197 endif197 ENDIF 198 198 199 199 #ifndef CPP_IOIPSL_NO_OUTPUT … … 203 203 !$OMP END MASTER 204 204 205 endSUBROUTINE init_iophy205 END SUBROUTINE init_iophy 206 206 207 207 SUBROUTINE histbeg_phyxios(name,itau0,zjulian,dtime,ffreq,lev,nhori,nid_day) 208 208 ! USE dimphy 209 USE mod_phys_lmdz_para, only: is_sequential, is_using_mpi, is_mpi_root, &209 USE mod_phys_lmdz_para, ONLY: is_sequential, is_using_mpi, is_mpi_root, & 210 210 jj_begin, jj_end, jj_nb 211 211 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 212 use ioipsl, only: histbeg213 #ifdef CPP_XIOS 214 use wxios, only: wxios_add_file212 USE ioipsl, ONLY: histbeg 213 #ifdef CPP_XIOS 214 USE wxios, ONLY: wxios_add_file 215 215 #endif 216 216 IMPLICIT NONE 217 217 include 'clesphys.h' 218 218 219 character*(*), INTENT(IN) :: name220 integer, INTENT(IN) :: itau0219 CHARACTER*(*), INTENT(IN) :: name 220 INTEGER, INTENT(IN) :: itau0 221 221 REAL,INTENT(IN) :: zjulian 222 222 REAL,INTENT(IN) :: dtime 223 character(LEN=*), INTENT(IN) :: ffreq223 CHARACTER(LEN=*), INTENT(IN) :: ffreq 224 224 INTEGER,INTENT(IN) :: lev 225 integer,intent(out) :: nhori226 integer,intent(out) :: nid_day225 INTEGER,INTENT(OUT) :: nhori 226 INTEGER,INTENT(OUT) :: nid_day 227 227 228 228 !$OMP MASTER 229 if (is_sequential) then229 IF (is_sequential) THEN 230 230 call histbeg(name,nbp_lon,io_lon, jj_nb,io_lat(jj_begin:jj_end), & 231 231 1,nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day) 232 else232 ELSE 233 233 call histbeg(name,nbp_lon,io_lon, jj_nb,io_lat(jj_begin:jj_end), & 234 234 1,nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day,phys_domain_id) 235 endif235 ENDIF 236 236 237 237 #ifdef CPP_XIOS … … 242 242 CALL wxios_add_file(name, ffreq, lev) 243 243 ENDIF 244 END 244 ENDIF 245 245 #endif 246 246 !$OMP END MASTER … … 250 250 SUBROUTINE histbeg_phy(name,itau0,zjulian,dtime,nhori,nid_day) 251 251 252 USE mod_phys_lmdz_para, only: jj_begin, jj_end, jj_nb, is_sequential252 USE mod_phys_lmdz_para, ONLY: jj_begin, jj_end, jj_nb, is_sequential 253 253 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 254 use ioipsl, only: histbeg254 USE ioipsl, ONLY: histbeg 255 255 256 256 IMPLICIT NONE 257 257 258 character*(*), INTENT(IN) :: name259 integer, INTENT(IN) :: itau0258 CHARACTER*(*), INTENT(IN) :: name 259 INTEGER, INTENT(IN) :: itau0 260 260 REAL,INTENT(IN) :: zjulian 261 261 REAL,INTENT(IN) :: dtime 262 integer,intent(out) :: nhori263 integer,intent(out) :: nid_day262 INTEGER,INTENT(OUT) :: nhori 263 INTEGER,INTENT(OUT) :: nid_day 264 264 265 265 !$OMP MASTER 266 266 #ifndef CPP_IOIPSL_NO_OUTPUT 267 if (is_sequential) then267 IF (is_sequential) THEN 268 268 call histbeg(name,nbp_lon,io_lon, jj_nb,io_lat(jj_begin:jj_end), & 269 269 1,nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day) 270 else270 ELSE 271 271 call histbeg(name,nbp_lon,io_lon, jj_nb,io_lat(jj_begin:jj_end), & 272 272 1,nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day,phys_domain_id) 273 endif273 ENDIF 274 274 #endif 275 275 !$OMP END MASTER … … 281 281 plon,plat,plon_bounds,plat_bounds, & 282 282 nname,itau0,zjulian,dtime,nnhori,nnid_day) 283 USE dimphy, only: klon284 USE mod_phys_lmdz_para, only: gather, bcast, &283 USE dimphy, ONLY: klon 284 USE mod_phys_lmdz_para, ONLY: gather, bcast, & 285 285 is_sequential, klon_mpi_begin, klon_mpi_end, & 286 286 mpi_rank 287 USE mod_grid_phy_lmdz, only: klon_glo, nbp_lon, nbp_lat288 use ioipsl, only: histbeg287 USE mod_grid_phy_lmdz, ONLY: klon_glo, nbp_lon, nbp_lat 288 USE ioipsl, ONLY: histbeg 289 289 290 290 IMPLICIT NONE … … 292 292 REAL,DIMENSION(klon),INTENT(IN) :: rlon 293 293 REAL,DIMENSION(klon),INTENT(IN) :: rlat 294 integer, INTENT(IN) :: itau0294 INTEGER, INTENT(IN) :: itau0 295 295 REAL,INTENT(IN) :: zjulian 296 296 REAL,INTENT(IN) :: dtime 297 integer, INTENT(IN) :: pim298 integer, intent(out) :: nnhori299 character(len=20), INTENT(IN) :: nname300 INTEGER, intent(out) :: nnid_day301 integer:: i297 INTEGER, INTENT(IN) :: pim 298 INTEGER, intent(out) :: nnhori 299 CHARACTER(len=20), INTENT(IN) :: nname 300 INTEGER, INTENT(OUT) :: nnid_day 301 INTEGER :: i 302 302 REAL,DIMENSION(klon_glo) :: rlat_glo 303 303 REAL,DIMENSION(klon_glo) :: rlon_glo … … 328 328 plon_bounds(i,1)=rlon_glo(tabij(i)-1) 329 329 plon_bounds(i,2)=rlon_glo(tabij(i)+1) 330 if(plon_bounds(i,2).LE.0..AND.plon_bounds(i,1).GE.0.) THEN331 if(rlon_glo(tabij(i)).GE.0.) THEN330 IF (plon_bounds(i,2).LE.0..AND.plon_bounds(i,1).GE.0.) THEN 331 IF (rlon_glo(tabij(i)).GE.0.) THEN 332 332 plon_bounds(i,2)=-1*plon_bounds(i,2) 333 endif334 endif335 if(plon_bounds(i,2).GE.0..AND.plon_bounds(i,1).LE.0.) THEN336 if(rlon_glo(tabij(i)).LE.0.) THEN333 ENDIF 334 ENDIF 335 IF (plon_bounds(i,2).GE.0..AND.plon_bounds(i,1).LE.0.) THEN 336 IF (rlon_glo(tabij(i)).LE.0.) THEN 337 337 plon_bounds(i,2)=-1*plon_bounds(i,2) 338 endif339 endif338 ENDIF 339 ENDIF 340 340 ! 341 341 IF ( tabij(i).LE.nbp_lon) THEN … … 361 361 362 362 CALL gr_fi_ecrit(1,klon,nbp_lon,nbp_lat,rlon_glo,zx_lon) 363 if ((nbp_lon*nbp_lat).gt.1) then363 IF ((nbp_lon*nbp_lat).GT.1) THEN 364 364 DO i = 1, nbp_lon 365 365 zx_lon(i,1) = rlon_glo(i+1) 366 366 zx_lon(i,nbp_lat) = rlon_glo(i+1) 367 367 ENDDO 368 endif368 ENDIF 369 369 CALL gr_fi_ecrit(1,klon,nbp_lon,nbp_lat,rlat_glo,zx_lat) 370 370 … … 375 375 plon_bounds(i,2)=zx_lon(ipt(i)+1,jpt(i)) 376 376 377 if (ipt(i).EQ.1) then377 IF (ipt(i).EQ.1) THEN 378 378 plon_bounds(i,1)=zx_lon(nbp_lon,jpt(i)) 379 379 plon_bounds(i,2)=360.+zx_lon(ipt(i)+1,jpt(i)) 380 endif380 ENDIF 381 381 382 if (ipt(i).EQ.nbp_lon) then382 IF (ipt(i).EQ.nbp_lon) THEN 383 383 plon_bounds(i,2)=360.+zx_lon(1,jpt(i)) 384 endif384 ENDIF 385 385 386 386 plat_bounds(i,1)=zx_lat(ipt(i),jpt(i)-1) 387 387 plat_bounds(i,2)=zx_lat(ipt(i),jpt(i)+1) 388 388 389 if (jpt(i).EQ.1) then389 IF (jpt(i).EQ.1) THEN 390 390 plat_bounds(i,1)=zx_lat(ipt(i),1)+0.001 391 391 plat_bounds(i,2)=zx_lat(ipt(i),1)-0.001 392 endif392 ENDIF 393 393 394 if (jpt(i).EQ.nbp_lat) then394 IF (jpt(i).EQ.nbp_lat) THEN 395 395 plat_bounds(i,1)=zx_lat(ipt(i),nbp_lat)+0.001 396 396 plat_bounds(i,2)=zx_lat(ipt(i),nbp_lat)-0.001 397 endif397 ENDIF 398 398 ! 399 399 ! print*,'CFMIP_iophy point i lon lon_bds',i,plon_bounds(i,1),rlon(tabij(i)),plon_bounds(i,2) … … 407 407 itau0, zjulian, dtime, nnhori, nnid_day) 408 408 #endif 409 else409 ELSE 410 410 npproc=0 411 411 DO ip=1, pim … … 448 448 itau0,zjulian,dtime,nnhori,nnid_day,phys_domain_id) 449 449 #endif 450 endif450 ENDIF 451 451 !$OMP END MASTER 452 452 453 endSUBROUTINE histbeg_phy_points453 END SUBROUTINE histbeg_phy_points 454 454 455 455 456 456 SUBROUTINE histdef2d_old (iff,lpoint,flag_var,nomvar,titrevar,unitvar) 457 457 458 USE ioipsl, only: histdef459 USE mod_phys_lmdz_para, only: jj_nb460 use phys_output_var_mod, only: type_ecri, zoutm, zdtime_moy, lev_files, &461 nid_files, nhorim, swaero_diag, nfiles458 USE ioipsl, ONLY: histdef 459 USE mod_phys_lmdz_para, ONLY: jj_nb 460 USE phys_output_var_mod, ONLY: type_ecri, zoutm, zdtime_moy, lev_files, & 461 nid_files, nhorim, swaero_diag, dryaod_diag, nfiles 462 462 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 463 USE aero_mod, ONLY : naero_tot, name_aero_tau 464 463 465 IMPLICIT NONE 464 466 … … 466 468 467 469 INTEGER :: iff 470 INTEGER :: naero 468 471 LOGICAL :: lpoint 469 472 INTEGER, DIMENSION(nfiles) :: flag_var 470 CHARACTER(LEN=20) 473 CHARACTER(LEN=20) :: nomvar 471 474 CHARACTER(LEN=*) :: titrevar 472 475 CHARACTER(LEN=*) :: unitvar … … 498 501 499 502 ! Set swaero_diag=true if at least one of the concerned variables are defined 500 IF (nomvar=='topswad' .OR. nomvar=='topswai' .OR. nomvar=='solswad' .OR. nomvar=='solswai' ) THEN 501 IF ( flag_var(iff)<=lev_files(iff) ) THEN 502 swaero_diag=.TRUE. 503 END IF 504 END IF 503 IF (nomvar=='topswad' .OR. nomvar=='topswad0' .OR. nomvar=='solswad' .OR. nomvar=='solswad0' .OR. & 504 nomvar=='toplwad' .OR. nomvar=='toplwad0' .OR. nomvar=='sollwad' .OR. nomvar=='sollwad0' .OR. & 505 nomvar=='topswai' .OR. nomvar=='solswai' ) THEN 506 IF ( flag_var(iff)<=lev_files(iff) ) swaero_diag=.TRUE. 507 ENDIF 508 509 ! Set dryaod_diag=true if at least one of the concerned variables are defined 510 DO naero = 1, naero_tot-1 511 PRINT *,'dryaod_diag 2=', nomvar, flag_var(iff), lev_files(iff) 512 IF (nomvar=='dryod550_'//name_aero_tau(naero)) THEN 513 IF ( flag_var(iff)<=lev_files(iff) ) dryaod_diag=.TRUE. 514 ENDIF 515 ENDDO 516 505 517 END SUBROUTINE histdef2d_old 506 518 507 508 509 519 SUBROUTINE histdef3d_old (iff,lpoint,flag_var,nomvar,titrevar,unitvar) 510 520 511 USE ioipsl, only: histdef512 USE dimphy, only: klev513 USE mod_phys_lmdz_para, only: jj_nb514 use phys_output_var_mod, only: type_ecri, zoutm, lev_files, nid_files, &521 USE ioipsl, ONLY: histdef 522 USE dimphy, ONLY: klev 523 USE mod_phys_lmdz_para, ONLY: jj_nb 524 USE phys_output_var_mod, ONLY: type_ecri, zoutm, lev_files, nid_files, & 515 525 nhorim, zdtime_moy, levmin, levmax, & 516 526 nvertm, nfiles … … 555 565 END SUBROUTINE histdef3d_old 556 566 557 558 559 560 561 562 563 564 567 SUBROUTINE histdef2d (iff,var) 565 568 566 USE ioipsl, only: histdef567 USE mod_phys_lmdz_para, only: jj_nb568 use phys_output_var_mod, only: ctrl_out, type_ecri_files, zoutm, zdtime_moy, &569 USE ioipsl, ONLY: histdef 570 USE mod_phys_lmdz_para, ONLY: jj_nb 571 USE phys_output_var_mod, ONLY: ctrl_out, type_ecri_files, zoutm, zdtime_moy, & 569 572 clef_stations, phys_out_filenames, lev_files, & 570 nid_files, nhorim, swaero_diag 573 nid_files, nhorim, swaero_diag, dryaod_diag 571 574 USE print_control_mod, ONLY: prt_level,lunout 572 575 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 573 #ifdef CPP_XIOS 574 use wxios, only: wxios_add_field_to_file 576 USE aero_mod, ONLY : naero_tot, name_aero_tau 577 #ifdef CPP_XIOS 578 USE wxios, ONLY: wxios_add_field_to_file 575 579 #endif 576 580 IMPLICIT NONE … … 579 583 580 584 INTEGER :: iff 585 INTEGER :: naero 581 586 TYPE(ctrl_out) :: var 582 587 583 588 REAL zstophym 584 589 CHARACTER(LEN=20) :: typeecrit 585 586 590 587 591 ! ug On récupère le type écrit de la structure: … … 638 642 ENDIF 639 643 640 ! Set swaero_diag=true if at least one of the concerned variables are 641 ! defined 644 ! Set swaero_diag=true if at least one of the concerned variables are defined 642 645 !--OB 30/05/2016 use wider set of variables 646 !--OB 14/04/2017 change location of reinitialisation to FALSE 643 647 IF ( var%name=='topswad' .OR. var%name=='topswad0' .OR. var%name=='solswad' .OR. var%name=='solswad0' .OR. & 644 648 var%name=='topswai' .OR. var%name=='solswai' .OR. ( iflag_rrtm==1 .AND. ( & 645 649 var%name=='toplwad' .OR. var%name=='toplwad0' .OR. var%name=='sollwad' .OR. var%name=='sollwad0' .OR. & 646 650 var%name=='toplwai' .OR. var%name=='sollwai' ) ) ) THEN 647 IF ( var%flag(iff)<=lev_files(iff) ) THEN 648 swaero_diag=.TRUE. 649 END IF 650 END IF 651 IF ( var%flag(iff)<=lev_files(iff) ) swaero_diag=.TRUE. 652 ENDIF 653 654 ! set dryaod_dry=true if at least one of the concerned variables are defined 655 IF (var%name=='dryod550aer') THEN 656 IF ( var%flag(iff)<=lev_files(iff) ) dryaod_diag=.TRUE. 657 ENDIF 658 ! 659 DO naero = 1, naero_tot-1 660 IF (var%name=='dryod550_'//name_aero_tau(naero)) THEN 661 IF ( var%flag(iff)<=lev_files(iff) ) dryaod_diag=.TRUE. 662 ENDIF 663 ENDDO 651 664 END SUBROUTINE histdef2d 652 665 653 666 SUBROUTINE histdef3d (iff,var) 654 667 655 USE ioipsl, only: histdef656 USE dimphy, only: klev657 USE mod_phys_lmdz_para, only: jj_nb658 use phys_output_var_mod, only: ctrl_out, type_ecri_files, zoutm, zdtime_moy, &668 USE ioipsl, ONLY: histdef 669 USE dimphy, ONLY: klev 670 USE mod_phys_lmdz_para, ONLY: jj_nb 671 USE phys_output_var_mod, ONLY: ctrl_out, type_ecri_files, zoutm, zdtime_moy, & 659 672 clef_stations, phys_out_filenames, lev_files, & 660 nid_files, nhorim, swaero_diag, levmin, &673 nid_files, nhorim, swaero_diag, dryaod_diag, levmin, & 661 674 levmax, nvertm 662 675 USE print_control_mod, ONLY: prt_level,lunout 663 676 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 664 677 #ifdef CPP_XIOS 665 use wxios, only: wxios_add_field_to_file678 USE wxios, ONLY: wxios_add_field_to_file 666 679 #endif 667 680 IMPLICIT NONE … … 735 748 !!! Lecture des noms et niveau de sortie des variables dans output.def 736 749 ! en utilisant les routines getin de IOIPSL 737 use ioipsl, only: getin738 use phys_output_var_mod, only: nfiles750 USE ioipsl, ONLY: getin 751 USE phys_output_var_mod, ONLY: nfiles 739 752 USE print_control_mod, ONLY: prt_level,lunout 740 753 IMPLICIT NONE … … 750 763 END SUBROUTINE conf_physoutputs 751 764 752 753 765 754 766 SUBROUTINE histwrite2d_phy_old(nid,lpoint,name,itau,field) 755 USE dimphy, only: klon756 USE mod_phys_lmdz_para, only: Gather_omp, grid1Dto2D_mpi, &767 USE dimphy, ONLY: klon 768 USE mod_phys_lmdz_para, ONLY: Gather_omp, grid1Dto2D_mpi, & 757 769 is_sequential, klon_mpi_begin, klon_mpi_end, & 758 770 jj_nb, klon_mpi 759 USE ioipsl, only: histwrite771 USE ioipsl, ONLY: histwrite 760 772 USE print_control_mod, ONLY: prt_level,lunout 761 773 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 762 774 IMPLICIT NONE 763 775 764 integer,INTENT(IN) :: nid765 logical,INTENT(IN) :: lpoint766 character*(*), INTENT(IN) :: name767 integer, INTENT(IN) :: itau776 INTEGER,INTENT(IN) :: nid 777 LOGICAL,INTENT(IN) :: lpoint 778 CHARACTER*(*), INTENT(IN) :: name 779 INTEGER, INTENT(IN) :: itau 768 780 REAL,DIMENSION(:),INTENT(IN) :: field 769 781 REAL,DIMENSION(klon_mpi) :: buffer_omp … … 771 783 REAL :: Field2d(nbp_lon,jj_nb) 772 784 773 integer :: ip 774 REAL,allocatable,DIMENSION(:) :: fieldok 775 785 INTEGER :: ip 786 REAL,ALLOCATABLE,DIMENSION(:) :: fieldok 776 787 777 788 IF (size(field)/=klon) CALL abort_physic('iophy::histwrite2d','Field first DIMENSION not equal to klon',1) … … 786 797 CALL histwrite(nid,name,itau,Field2d,nbp_lon*jj_nb,index2d) 787 798 IF (prt_level >= 10) write(lunout,*)'Finished sending ',name,' to IOIPSL' 788 else799 ELSE 789 800 ALLOCATE(fieldok(npstn)) 790 801 ALLOCATE(index2d(npstn)) 791 802 792 if(is_sequential) then803 IF (is_sequential) THEN 793 804 ! klon_mpi_begin=1 794 805 ! klon_mpi_end=klon … … 796 807 fieldok(ip)=buffer_omp(nptabij(ip)) 797 808 ENDDO 798 else809 ELSE 799 810 DO ip=1, npstn 800 811 ! print*,'histwrite2d is_sequential npstn ip name nptabij',npstn,ip,name,nptabij(ip) … … 804 815 ENDIF 805 816 ENDDO 806 endif817 ENDIF 807 818 IF (prt_level >= 10) write(lunout,*)'Sending ',name,' to IOIPSL' 808 819 CALL histwrite(nid,name,itau,fieldok,npstn,index2d) 809 820 IF (prt_level >= 10) write(lunout,*)'Finished sending ',name,' to IOIPSL' 810 821 ! 811 endif812 deallocate(index2d)813 deallocate(fieldok)822 ENDIF 823 DEALLOCATE(index2d) 824 DEALLOCATE(fieldok) 814 825 !$OMP END MASTER 815 826 816 827 817 endSUBROUTINE histwrite2d_phy_old828 END SUBROUTINE histwrite2d_phy_old 818 829 819 830 SUBROUTINE histwrite3d_phy_old(nid,lpoint,name,itau,field) 820 USE dimphy, only: klon821 USE mod_phys_lmdz_para, only: Gather_omp, grid1Dto2D_mpi, &831 USE dimphy, ONLY: klon 832 USE mod_phys_lmdz_para, ONLY: Gather_omp, grid1Dto2D_mpi, & 822 833 is_sequential, klon_mpi_begin, klon_mpi_end, & 823 834 jj_nb, klon_mpi 824 835 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 825 use ioipsl, only: histwrite836 USE ioipsl, ONLY: histwrite 826 837 USE print_control_mod, ONLY: prt_level,lunout 827 838 IMPLICIT NONE 828 839 829 integer,INTENT(IN) :: nid830 logical,INTENT(IN) :: lpoint831 character*(*), INTENT(IN) :: name832 integer, INTENT(IN) :: itau840 INTEGER,INTENT(IN) :: nid 841 LOGICAL,INTENT(IN) :: lpoint 842 CHARACTER*(*), INTENT(IN) :: name 843 INTEGER, INTENT(IN) :: itau 833 844 REAL,DIMENSION(:,:),INTENT(IN) :: field ! --> field(klon,:) 834 845 REAL,DIMENSION(klon_mpi,size(field,2)) :: buffer_omp … … 845 856 !$OMP MASTER 846 857 CALL grid1Dto2D_mpi(buffer_omp,field3d) 847 if(.NOT.lpoint) THEN858 IF (.NOT.lpoint) THEN 848 859 ALLOCATE(index3d(nbp_lon*jj_nb*nlev)) 849 860 ALLOCATE(fieldok(nbp_lon*jj_nb,nlev)) … … 851 862 CALL histwrite(nid,name,itau,Field3d,nbp_lon*jj_nb*nlev,index3d) 852 863 IF (prt_level >= 10) write(lunout,*)'Finished sending ',name,' to IOIPSL' 853 else864 ELSE 854 865 nlev=size(field,2) 855 866 ALLOCATE(index3d(npstn*nlev)) 856 867 ALLOCATE(fieldok(npstn,nlev)) 857 868 858 if(is_sequential) then869 IF (is_sequential) THEN 859 870 ! klon_mpi_begin=1 860 871 ! klon_mpi_end=klon … … 864 875 ENDDO 865 876 ENDDO 866 else877 ELSE 867 878 DO n=1, nlev 868 879 DO ip=1, npstn … … 873 884 ENDDO 874 885 ENDDO 875 endif886 ENDIF 876 887 IF (prt_level >= 10) write(lunout,*)'Sending ',name,' to IOIPSL' 877 888 CALL histwrite(nid,name,itau,fieldok,npstn*nlev,index3d) 878 889 IF (prt_level >= 10) write(lunout,*)'Finished sending ',name,' to IOIPSL' 879 endif880 deallocate(index3d)881 deallocate(fieldok)890 ENDIF 891 DEALLOCATE(index3d) 892 DEALLOCATE(fieldok) 882 893 !$OMP END MASTER 883 894 884 endSUBROUTINE histwrite3d_phy_old895 END SUBROUTINE histwrite3d_phy_old 885 896 886 897 … … 889 900 ! ug NOUVELLE VERSION DES WRITE AVEC LA BOUCLE DO RENTREE 890 901 SUBROUTINE histwrite2d_phy(var,field, STD_iff) 891 USE dimphy, only: klon892 USE mod_phys_lmdz_para, only: gather_omp, grid1dto2d_mpi, &902 USE dimphy, ONLY: klon 903 USE mod_phys_lmdz_para, ONLY: gather_omp, grid1dto2d_mpi, & 893 904 jj_nb, klon_mpi, klon_mpi_begin, & 894 905 klon_mpi_end, is_sequential 895 USE ioipsl, only: histwrite896 use phys_output_var_mod, only: ctrl_out, clef_files, lev_files, &906 USE ioipsl, ONLY: histwrite 907 USE phys_output_var_mod, ONLY: ctrl_out, clef_files, lev_files, & 897 908 nfiles, vars_defined, clef_stations, & 898 909 nid_files … … 900 911 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 901 912 #ifdef CPP_XIOS 902 USE xios, only: xios_send_field913 USE xios, ONLY: xios_send_field 903 914 #endif 904 915 … … 932 943 iff_beg = 1 933 944 iff_end = nfiles 934 END 945 ENDIF 935 946 936 947 ! On regarde si on est dans la phase de définition ou d'écriture: 937 IF (.NOT.vars_defined) THEN948 IF (.NOT.vars_defined) THEN 938 949 !$OMP MASTER 939 950 !Si phase de définition.... on définit 940 951 IF (.not. ok_all_xml) THEN 941 if (prt_level >= 10) then 942 write(lunout,*)"histwrite2d_phy: .not.vars_defined ; time to define ", & 943 trim(var%name) 944 endif 952 IF (prt_level >= 10) THEN 953 WRITE (lunout,*)"histwrite2d_phy: .not.vars_defined ; time to define ", trim(var%name) 954 ENDIF 945 955 DO iff=iff_beg, iff_end 946 956 IF (clef_files(iff)) THEN … … 955 965 IF (SIZE(field)/=klon) CALL abort_physic('iophy::histwrite2d_phy','Field first DIMENSION not equal to klon',1) 956 966 957 if (prt_level >= 10) then 958 write(lunout,*)"histwrite2d_phy: .not.vars_defined ; time to gather and write ", & 959 trim(var%name) 960 endif 967 IF (prt_level >= 10) THEn 968 WRITE (lunout,*)"histwrite2d_phy: .not.vars_defined ; time to gather and write ", trim(var%name) 969 ENDIF 961 970 962 971 CALL Gather_omp(field,buffer_omp) … … 969 978 IF (ok_all_xml) THEN 970 979 #ifdef CPP_XIOS 971 if (prt_level >= 10) then 972 write(lunout,*)'Dans iophy histwrite2D,var%name ',& 973 trim(var%name) 974 endif 980 IF (prt_level >= 10) THEN 981 write(lunout,*)'Dans iophy histwrite2D,var%name ', trim(var%name) 982 ENDIF 975 983 CALL xios_send_field(var%name, Field2d) 976 if (prt_level >= 10) then 977 write(lunout,*)'Dans iophy histwrite2D,var%name apres xios_send ',& 978 trim(var%name) 979 endif 984 IF (prt_level >= 10) THEN 985 WRITE (lunout,*)'Dans iophy histwrite2D,var%name apres xios_send ', trim(var%name) 986 ENDIF 980 987 #else 981 988 CALL abort_physic ('iophy','cannot have ok_all_xml = .T. without CPP_XIOS defined' ,1) … … 987 994 #ifdef CPP_XIOS 988 995 IF (firstx) THEN 989 if (prt_level >= 10) then 990 write(lunout,*)'Dans iophy histwrite2D,iff,var%name ',& 991 iff,trim(var%name) 992 write(lunout,*)"histwrite2d_phy:.NOT.clef_stations(iff)and iff==iff_beg, call xios_send_field" 993 endif 996 IF (prt_level >= 10) THEN 997 WRITE (lunout,*)'Dans iophy histwrite2D,iff,var%name ', iff,trim(var%name) 998 WRITE (lunout,*)"histwrite2d_phy:.NOT.clef_stations(iff)and iff==iff_beg, call xios_send_field" 999 ENDIF 994 1000 CALL xios_send_field(var%name, Field2d) 995 1001 firstx=.false. … … 997 1003 #endif 998 1004 999 IF (.NOT.clef_stations(iff)) THEN1005 IF (.NOT.clef_stations(iff)) THEN 1000 1006 ALLOCATE(index2d(nbp_lon*jj_nb)) 1001 1007 ALLOCATE(fieldok(nbp_lon*jj_nb)) … … 1029 1035 ENDIF ! of IF (is_sequential) 1030 1036 #ifndef CPP_IOIPSL_NO_OUTPUT 1031 if (prt_level >= 10) then1037 IF (prt_level >= 10) THEn 1032 1038 write(lunout,*)"histwrite2d_phy: clef_stations(iff) and iff==iff_beg, call wxios_write_2D" 1033 endif1039 ENDIF 1034 1040 CALL histwrite(nid_files(iff),var%name,itau_iophy,fieldok,npstn,index2d) 1035 1041 #endif 1036 1042 ENDIF ! of IF(.NOT.clef_stations(iff)) 1037 1043 1038 deallocate(index2d)1039 deallocate(fieldok)1044 DEALLOCATE(index2d) 1045 DEALLOCATE(fieldok) 1040 1046 ENDIF !levfiles 1041 1047 ENDDO ! of DO iff=iff_beg, iff_end … … 1049 1055 ! ug NOUVELLE VERSION DES WRITE AVEC LA BOUCLE DO RENTREE 1050 1056 SUBROUTINE histwrite3d_phy(var, field, STD_iff) 1051 USE dimphy, only: klon, klev1052 USE mod_phys_lmdz_para, only: gather_omp, grid1dto2d_mpi, &1057 USE dimphy, ONLY: klon, klev 1058 USE mod_phys_lmdz_para, ONLY: gather_omp, grid1dto2d_mpi, & 1053 1059 jj_nb, klon_mpi, klon_mpi_begin, & 1054 1060 klon_mpi_end, is_sequential 1055 USE ioipsl, only: histwrite1056 use phys_output_var_mod, only: ctrl_out, clef_files, lev_files, &1061 USE ioipsl, ONLY: histwrite 1062 USE phys_output_var_mod, ONLY: ctrl_out, clef_files, lev_files, & 1057 1063 nfiles, vars_defined, clef_stations, & 1058 1064 nid_files 1059 1065 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 1060 1066 #ifdef CPP_XIOS 1061 USE xios, only: xios_send_field1067 USE xios, ONLY: xios_send_field 1062 1068 #endif 1063 1069 USE print_control_mod, ONLY: prt_level,lunout … … 1088 1094 iff_beg = 1 1089 1095 iff_end = nfiles 1090 END 1096 ENDIF 1091 1097 1092 1098 ! On regarde si on est dans la phase de définition ou d'écriture: … … 1104 1110 IF (SIZE(field,1)/=klon) CALL abort_physic('iophy::histwrite3d','Field first DIMENSION not equal to klon',1) 1105 1111 nlev=SIZE(field,2) 1106 if (nlev.eq.klev+1) then1112 IF (nlev.EQ.klev+1) THEN 1107 1113 nlevx=klev 1108 else1114 ELSE 1109 1115 nlevx=nlev 1110 endif1116 ENDIF 1111 1117 1112 1118 CALL Gather_omp(field,buffer_omp) … … 1120 1126 IF (ok_all_xml) THEN 1121 1127 #ifdef CPP_XIOS 1122 if (prt_level >= 10) then1128 IF (prt_level >= 10) THEN 1123 1129 write(lunout,*)'Dans iophy histwrite3D,var%name ',& 1124 1130 trim(var%name) 1125 endif1131 ENDIF 1126 1132 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1127 1133 #else … … 1135 1141 #ifdef CPP_XIOS 1136 1142 IF (firstx) THEN 1137 if (prt_level >= 10) then1138 write(lunout,*)'Dans iophy, histwrite3D iff nlev klev firstx', &1143 IF (prt_level >= 10) THEn 1144 WRITE (lunout,*)'Dans iophy, histwrite3D iff nlev klev firstx', & 1139 1145 iff,nlev,klev, firstx 1140 write(lunout,*)'histwrite3d_phy: call xios_send_field for ', &1146 WRITE (lunout,*)'histwrite3d_phy: call xios_send_field for ', & 1141 1147 trim(var%name), ' with iim jjm nlevx = ', & 1142 1148 nbp_lon,jj_nb,nlevx 1143 endif1149 ENDIF 1144 1150 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1145 1151 firstx=.false. … … 1185 1191 #endif 1186 1192 ENDIF 1187 deallocate(index3d)1188 deallocate(fieldok)1193 DEALLOCATE(index3d) 1194 DEALLOCATE(fieldok) 1189 1195 ENDIF 1190 1196 ENDDO … … 1199 1205 #ifdef CPP_XIOS 1200 1206 SUBROUTINE histwrite2d_xios(field_name,field) 1201 USE dimphy, only: klon1202 USE mod_phys_lmdz_para, only: gather_omp, grid1Dto2D_mpi, &1207 USE dimphy, ONLY: klon 1208 USE mod_phys_lmdz_para, ONLY: gather_omp, grid1Dto2D_mpi, & 1203 1209 is_sequential, klon_mpi_begin, klon_mpi_end, & 1204 1210 jj_nb, klon_mpi 1205 1211 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 1206 USE xios, only: xios_send_field1212 USE xios, ONLY: xios_send_field 1207 1213 USE print_control_mod, ONLY: prt_level,lunout 1208 1214 … … 1259 1265 ENDIF 1260 1266 1261 deallocate(index2d)1262 deallocate(fieldok)1267 DEALLOCATE(index2d) 1268 DEALLOCATE(fieldok) 1263 1269 !$OMP END MASTER 1264 1270 … … 1269 1275 ! ug NOUVELLE VERSION DES WRITE AVEC LA BOUCLE DO RENTREE 1270 1276 SUBROUTINE histwrite3d_xios(field_name, field) 1271 USE dimphy, only: klon, klev1272 USE mod_phys_lmdz_para, only: gather_omp, grid1Dto2D_mpi, &1277 USE dimphy, ONLY: klon, klev 1278 USE mod_phys_lmdz_para, ONLY: gather_omp, grid1Dto2D_mpi, & 1273 1279 is_sequential, klon_mpi_begin, klon_mpi_end, & 1274 1280 jj_nb, klon_mpi 1275 USE xios, only: xios_send_field1281 USE xios, ONLY: xios_send_field 1276 1282 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 1277 1283 USE print_control_mod, ONLY: prt_level,lunout … … 1330 1336 ENDIF 1331 1337 ENDIF 1332 deallocate(index3d)1333 deallocate(fieldok)1338 DEALLOCATE(index3d) 1339 DEALLOCATE(fieldok) 1334 1340 !$OMP END MASTER 1335 1341 … … 1339 1345 #ifdef CPP_XIOS 1340 1346 SUBROUTINE histwrite0d_xios(field_name, field) 1341 USE xios, only: xios_send_field1347 USE xios, ONLY: xios_send_field 1342 1348 IMPLICIT NONE 1343 1349
Note: See TracChangeset
for help on using the changeset viewer.