Ignore:
Timestamp:
Jul 28, 2025, 7:23:15 PM (9 days ago)
Author:
aborella
Message:

Merge with trunk r5789

Location:
LMDZ6/branches/contrails
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/contrails

  • LMDZ6/branches/contrails/libf/phylmd/limit_read_mod.f90

    r5549 r5791  
    2121!$OMP THREADPRIVATE(albedo) 
    2222  REAL, ALLOCATABLE, DIMENSION(:),   SAVE, PRIVATE :: sst
    23 !$OMP THREADPRIVATE(sst) 
     23!$OMP THREADPRIVATE(sst)
     24!GG
     25  REAL, ALLOCATABLE, DIMENSION(:),   SAVE, PRIVATE :: sih
     26!$OMP THREADPRIVATE(sih)
     27!GG
    2428  LOGICAL,SAVE :: read_continents=.FALSE.
    2529!$OMP THREADPRIVATE(read_continents)
     
    144148  END SUBROUTINE limit_read_sst
    145149
     150!GG
     151  SUBROUTINE limit_read_hice(knon, knindex, hice_out)
     152!
     153! This subroutine returns the sea surface temperature already read from limit.nc.
     154!
     155    USE dimphy, ONLY : klon
     156
     157    INTEGER, INTENT(IN)                  :: knon     ! nomber of points on compressed grid
     158    INTEGER, DIMENSION(klon), INTENT(IN) :: knindex  ! grid point number for compressed grid
     159    REAL, DIMENSION(klon), INTENT(OUT)   :: hice_out
     160
     161    INTEGER :: i
     162
     163    DO i = 1, knon
     164       hice_out(i) = sih(knindex(i))
     165    END DO
     166
     167  END SUBROUTINE limit_read_hice
     168!GG
    146169!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    147170!!
     
    163186    USE mod_grid_phy_lmdz
    164187    USE mod_phys_lmdz_para
    165     USE surface_data, ONLY : type_ocean, ok_veget
     188    !GG USE surface_data, ONLY : type_ocean, ok_veget
     189    USE surface_data, ONLY : type_ocean, ok_veget, iflag_seaice, amax_n, amax_s
     190    !GG
    166191    USE netcdf
    167192    USE indice_sol_mod
     
    203228    REAL, DIMENSION(klon_mpi)                 :: rug_mpi  ! rugosity at global grid
    204229    REAL, DIMENSION(klon_mpi)                 :: alb_mpi  ! albedo at global grid
     230!GG
     231    REAL, DIMENSION(klon_glo)                 :: sih_glo  ! albedo at global grid
     232    REAL, DIMENSION(klon_mpi)                 :: sih_mpi  ! albedo at global grid
     233!GG
    205234
    206235    CHARACTER(len=20)                         :: modname='limit_read_mod'     
     
    225254       END IF
    226255
     256       !GG
     257       IF (iflag_seaice==1) THEN
     258             ALLOCATE(sih(klon), stat=ierr)
     259             IF (ierr /= 0) CALL abort_physic(modname, 'PB in allocating sih',1)
     260       ENDIF
     261       !GG
     262
    227263       IF ( .NOT. ok_veget ) THEN
    228264          ALLOCATE(rugos(klon), albedo(klon), stat=ierr)
     
    303339         IF ( type_ocean /= 'couple') THEN                   
    304340             IF (is_omp_master) CALL xios_recv_field("sst_limin",sst_mpi)
     341             !GG
     342             IF (iflag_seaice == 1) THEN
     343               IF (is_omp_master) CALL xios_recv_field("sih_limin",sih_mpi)
     344             ENDIF
     345             !GG
    305346         ENDIF
    306347       
     
    312353       IF ( type_ocean /= 'couple') THEN
    313354          CALL Scatter_omp(sst_mpi,sst)
     355          !GG
     356          IF (iflag_seaice==1) THEN
     357            CALL Scatter_omp(sih_mpi,sih)
     358          ENDIF
     359          !GG
    314360          CALL Scatter_omp(pct_mpi(:,is_oce),pctsrf(:,is_oce))
    315361          CALL Scatter_omp(pct_mpi(:,is_sic),pctsrf(:,is_sic))
     
    362408             IF (ierr /= NF90_NOERR) CALL abort_physic(modname,'Lecture echouee pour <FSIC>' ,1)
    363409
     410! GG
     411! Account for leads
     412             IF (iflag_seaice>0) THEN
     413               DO ii=1,klon_glo/2
     414                 if (pct_glo(ii,is_sic)>amax_n) THEN
     415                    pct_glo(ii,is_oce)=pct_glo(ii,is_oce)+(pct_glo(ii,is_sic)-amax_n)
     416                    pct_glo(ii,is_sic)=amax_n
     417                 end if
     418               ENDDO
     419               DO ii=klon_glo/2,klon_glo
     420               if (pct_glo(ii,is_sic)>amax_s) THEN
     421                    pct_glo(ii,is_oce)=pct_glo(ii,is_oce)+(pct_glo(ii,is_sic)-amax_s)
     422                    pct_glo(ii,is_sic)=amax_s
     423               end if
     424               ENDDO
     425             ENDIF
     426!GG
    364427
    365428! Read land and continentals fraction only if asked for
     
    394457             ierr = NF90_GET_VAR(nid,nvarid,sst_glo,start,epais)
    395458             IF (ierr /= NF90_NOERR) CALL abort_physic(modname,'Lecture echouee pour <SST>',1)
    396          
     459           !GG
     460             IF (iflag_seaice == 1) THEN
     461               ierr = NF90_INQ_VARID(nid, 'HICE', nvarid)
     462               IF (ierr /= NF90_NOERR) CALL abort_physic(modname,'Le champ <HICE> est absent',1)
     463
     464               ierr = NF90_GET_VAR(nid,nvarid,sih_glo(:),start,epais)
     465               IF (ierr /= NF90_NOERR) CALL abort_physic(modname,'Lecture echouee pour <HICE>' ,1)
     466             ENDIF
     467            !GG
    397468          END IF
    398469
     
    433504       IF ( type_ocean /= 'couple') THEN
    434505          CALL Scatter(sst_glo,sst)
     506          !GG
     507          IF (iflag_seaice==1) THEN
     508             CALL Scatter(sih_glo,sih)
     509          END IF
     510          !GG
    435511          CALL Scatter(pct_glo(:,is_oce),pctsrf(:,is_oce))
    436512          CALL Scatter(pct_glo(:,is_sic),pctsrf(:,is_sic))
Note: See TracChangeset for help on using the changeset viewer.