Ignore:
Timestamp:
Apr 11, 2018, 10:27:28 AM (6 years ago)
Author:
Laurent Fairhead
Message:

Continuing phasing of DYNAMICO and LMDZ physics

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/DYNAMICO-conv/libf/phylmd/limit_read_mod.F90

    r2788 r3312  
    11!
    2 ! $Header$
     2! $Id$
    33!
    44MODULE limit_read_mod
     
    3131!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    3232
     33
     34  SUBROUTINE init_limit_read(first_day)
     35  USE mod_grid_phy_lmdz
     36  USE surface_data
     37  USE mod_phys_lmdz_para
     38#ifdef CPP_XIOS
     39  USE XIOS
     40#endif
     41  IMPLICIT NONE
     42    INTEGER, INTENT(IN) :: first_day
     43   
     44   
     45    IF ( type_ocean /= 'couple') THEN
     46      IF (grid_type==unstructured) THEN
     47#ifdef CPP_XIOS
     48        IF (is_omp_master) CALL xios_set_file_attr("limit_read",enabled=.TRUE.,record_offset=first_day)
     49#endif
     50      ENDIF 
     51    ENDIF
     52
     53  END SUBROUTINE init_limit_read
     54 
    3355  SUBROUTINE limit_read_frac(itime, dtime, jour, pctsrf_new, is_modified)
    3456!
     
    150172    USE phys_cal_mod, ONLY : calend, year_len
    151173    USE print_control_mod, ONLY: lunout, prt_level
    152 
     174#ifdef CPP_XIOS
     175    USE XIOS, ONLY: xios_recv_field
     176#endif
     177   
    153178    IMPLICIT NONE
    154179   
     
    179204    REAL, DIMENSION(klon_glo)                 :: rug_glo  ! rugosity at global grid
    180205    REAL, DIMENSION(klon_glo)                 :: alb_glo  ! albedo at global grid
     206
     207    REAL, DIMENSION(klon_mpi,nbsrf)           :: pct_mpi  ! fraction at global grid
     208    REAL, DIMENSION(klon_mpi)                 :: sst_mpi  ! sea-surface temperature at global grid
     209    REAL, DIMENSION(klon_mpi)                 :: rug_mpi  ! rugosity at global grid
     210    REAL, DIMENSION(klon_mpi)                 :: alb_mpi  ! albedo at global grid
     211
    181212    CHARACTER(len=20)                         :: modname='limit_read_mod'     
    182213    CHARACTER(LEN=99)                         :: abort_message, calendar, str
     
    220251          END IF
    221252
    222           !--- ERROR IF FILE RECORDS NUMBER IS NOT EQUAL TO EXPECTED NUMBER OF DAYS
    223           ierr=NF90_INQUIRE(nid, UnlimitedDimID=ndimid)
     253          !--- ERROR IF FILE RECORDS NUMBER IS NOT EQUAL TO EXPECTED NUMBER OF DAYS         
     254          IF (grid_type==unstructured) THEN
     255            ierr=NF90_INQ_DIMID(nid,"time_year",ndimid)
     256          ELSE
     257            ierr=NF90_INQUIRE(nid, UnlimitedDimID=ndimid)
     258          ENDIF
    224259          ierr=NF90_INQUIRE_DIMENSION(nid, ndimid, len=nn)
    225260          WRITE(abort_message,'(a,2(i3,a))')'limit.nc records number (',nn,') does no'//&
     
    228263
    229264          !--- ERROR IF FILES AND LMDZ HORIZONTAL RESOLUTIONS DO NOT MATCH
    230           ierr=NF90_INQ_DIMID(nid, 'points_physiques', ndimid)
     265          IF (grid_type==unstructured) THEN
     266            ierr=NF90_INQ_DIMID(nid, 'cell', ndimid)
     267          ELSE
     268            ierr=NF90_INQ_DIMID(nid, 'points_physiques', ndimid)
     269          ENDIF
    231270          ierr=NF90_INQUIRE_DIMENSION(nid, ndimid, len=nn)
    232271          WRITE(abort_message,'(a,2(i0,a))')'limit.nc horizontal number of cells (',nn, &
     
    252291       jour_lu = jour
    253292       is_modified = .TRUE.
     293
     294      IF (grid_type==unstructured) THEN
     295
     296#ifdef CPP_XIOS
     297        IF ( type_ocean /= 'couple') THEN
     298
     299           IF (is_omp_master) CALL xios_recv_field("foce_limin",pct_mpi(:,is_oce))
     300           IF (is_omp_master) CALL xios_recv_field("fsic_limin",pct_mpi(:,is_sic))
     301  !         IF (read_continents .OR. itime == 1) THEN
     302           IF (is_omp_master) CALL xios_recv_field("fter_limin",pct_mpi(:,is_ter))
     303           IF (is_omp_master) CALL xios_recv_field("flic_limin",pct_mpi(:,is_lic))
     304  !         ENDIF
     305         ENDIF! type_ocean /= couple
     306         
     307         IF ( type_ocean /= 'couple') THEN                   
     308             IF (is_omp_master) CALL xios_recv_field("sst_limin",sst_mpi)
     309         ENDIF
     310       
     311         IF (.NOT. ok_veget) THEN
     312           IF (is_omp_master) CALL xios_recv_field("alb_limin",alb_mpi)
     313           IF (is_omp_master) CALL xios_recv_field("rug_limin",rug_mpi)
     314         ENDIF
     315
     316       IF ( type_ocean /= 'couple') THEN
     317          CALL Scatter_omp(sst_mpi,sst)
     318          CALL Scatter_omp(pct_mpi(:,is_oce),pctsrf(:,is_oce))
     319          CALL Scatter_omp(pct_mpi(:,is_sic),pctsrf(:,is_sic))
     320!          IF (read_continents .OR. itime == 1) THEN
     321             CALL Scatter_omp(pct_mpi(:,is_ter),pctsrf(:,is_ter))
     322             CALL Scatter_omp(pct_mpi(:,is_lic),pctsrf(:,is_lic))
     323!          END IF
     324       END IF
     325
     326       IF (.NOT. ok_veget) THEN
     327          CALL Scatter_omp(alb_mpi, albedo)
     328          CALL Scatter_omp(rug_mpi, rugos)
     329       END IF
     330#endif
     331
     332 
     333     ELSE      ! grid_type==regular
     334
    254335!$OMP MASTER  ! Only master thread
    255336       IF (is_mpi_root) THEN ! Only master processus
     
    371452       END IF
    372453
     454      ENDIF ! Grid type
     455
    373456    ENDIF ! time to read
    374457
Note: See TracChangeset for help on using the changeset viewer.