Ignore:
Timestamp:
May 20, 2025, 4:24:41 PM (3 weeks ago)
Author:
Laurent Fairhead
Message:

Ajout du modèle thermodynamique de glace de mer interactive améliorant les flux échangés à la surface de la banquise (Doctorat de Nicolas Michalezyk, Contact : Nicolas Michaleyk, Guillaume Gastineau)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmdiso/limit_read_mod.F90

    r5217 r5662  
    2222  REAL, ALLOCATABLE, DIMENSION(:),   SAVE, PRIVATE :: sst
    2323!$OMP THREADPRIVATE(sst)   
     24!GG
     25  REAL, ALLOCATABLE, DIMENSION(:),   SAVE, PRIVATE :: sih
     26!$OMP THREADPRIVATE(sih)
     27!GG
    2428#ifdef ISO
    2529  REAL, ALLOCATABLE, DIMENSION(:),   SAVE, PRIVATE :: tuoce
     
    254258  END SUBROUTINE limit_read_sst
    255259
     260!GG
     261  SUBROUTINE limit_read_hice(knon, knindex, hice_out)
     262!
     263! This subroutine returns the sea surface temperature already read from limit.nc.
     264!
     265    USE dimphy, ONLY : klon
     266
     267    INTEGER, INTENT(IN)                  :: knon     ! nomber of points on compressed grid
     268    INTEGER, DIMENSION(klon), INTENT(IN) :: knindex  ! grid point number for compressed grid
     269    REAL, DIMENSION(klon), INTENT(OUT)   :: hice_out
     270
     271    INTEGER :: i
     272
     273    DO i = 1, knon
     274       hice_out(i) = sih(knindex(i))
     275    END DO
     276
     277  END SUBROUTINE limit_read_hice
     278!GG
    256279!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    257280!!
     
    273296    USE mod_grid_phy_lmdz
    274297    USE mod_phys_lmdz_para
    275     USE surface_data, ONLY : type_ocean, ok_veget
     298    !GG USE surface_data, ONLY : type_ocean, ok_veget
     299    USE surface_data, ONLY : type_ocean, ok_veget, iflag_seaice, amax_n, amax_s
     300    !GG
    276301    USE netcdf
    277302    USE indice_sol_mod
     
    284309    USE phys_cal_mod, ONLY : calend, year_len
    285310    USE print_control_mod, ONLY: lunout, prt_level
    286     USE lmdz_XIOS, ONLY: xios_recv_field
     311    USE lmdz_xios, ONLY: xios_recv_field, using_xios
    287312   
    288313    IMPLICIT NONE
     
    319344    REAL, DIMENSION(klon_mpi)                 :: rug_mpi  ! rugosity at global grid
    320345    REAL, DIMENSION(klon_mpi)                 :: alb_mpi  ! albedo at global grid
     346!GG
     347    REAL, DIMENSION(klon_glo)                 :: sih_glo  ! albedo at global grid
     348    REAL, DIMENSION(klon_mpi)                 :: sih_mpi  ! albedo at global grid
     349!GG
    321350
    322351    CHARACTER(len=20)                         :: modname='limit_read_mod'     
     
    344373       END IF
    345374
     375       !GG
     376       IF (iflag_seaice==1) THEN
     377             ALLOCATE(sih(klon), stat=ierr)
     378             IF (ierr /= 0) CALL abort_physic(modname, 'PB in allocating sih',1)
     379       ENDIF
     380       !GG
     381
    346382       IF ( .NOT. ok_veget ) THEN
    347383          ALLOCATE(rugos(klon), albedo(klon), stat=ierr)
     
    422458         IF ( type_ocean /= 'couple') THEN                   
    423459             IF (is_omp_master) CALL xios_recv_field("sst_limin",sst_mpi)
     460             !GG
     461             IF (is_omp_master) CALL xios_recv_field("sih_limin",sih_mpi)
     462             !GG
    424463         ENDIF
    425464       
     
    431470       IF ( type_ocean /= 'couple') THEN
    432471          CALL Scatter_omp(sst_mpi,sst)
     472          !GG
     473          CALL Scatter_omp(sih_mpi,sih)
     474          !GG
    433475          CALL Scatter_omp(pct_mpi(:,is_oce),pctsrf(:,is_oce))
    434476          CALL Scatter_omp(pct_mpi(:,is_sic),pctsrf(:,is_sic))
     
    481523             IF (ierr /= NF90_NOERR) CALL abort_physic(modname,'Lecture echouee pour <FSIC>' ,1)
    482524
     525! GG
     526! Account for leads
     527             IF (iflag_seaice>0) THEN
     528               DO ii=1,klon_glo/2
     529                 if (pct_glo(ii,is_sic)>amax_n) THEN
     530                    pct_glo(ii,is_oce)=pct_glo(ii,is_oce)+(pct_glo(ii,is_sic)-amax_n)
     531                    pct_glo(ii,is_sic)=amax_n
     532                 end if
     533               ENDDO
     534               DO ii=klon_glo/2,klon_glo
     535               if (pct_glo(ii,is_sic)>amax_s) THEN
     536                    pct_glo(ii,is_oce)=pct_glo(ii,is_oce)+(pct_glo(ii,is_sic)-amax_s)
     537                    pct_glo(ii,is_sic)=amax_s
     538               end if
     539               ENDDO
     540             ENDIF
     541!GG
    483542
    484543! Read land and continentals fraction only if asked for
     
    513572             ierr = NF90_GET_VAR(nid,nvarid,sst_glo,start,epais)
    514573             IF (ierr /= NF90_NOERR) CALL abort_physic(modname,'Lecture echouee pour <SST>',1)
    515          
     574!GG
     575             IF (iflag_seaice == 1) THEN
     576               ierr = NF90_INQ_VARID(nid, 'HICE', nvarid)
     577               IF (ierr /= NF90_NOERR) CALL abort_physic(modname,'Le champ <HICE> est absent',1)
     578
     579               ierr = NF90_GET_VAR(nid,nvarid,sih_glo(:),start,epais)
     580               IF (ierr /= NF90_NOERR) CALL abort_physic(modname,'Lecture echouee pour <HICE>' ,1)
     581             ENDIF
     582            !GG
     583         
    516584#ifdef ISO
    517585             IF ((iso_HTO.gt.0).and.(ok_prod_nucl_tritium)) THEN
     
    572640       IF ( type_ocean /= 'couple') THEN
    573641          CALL Scatter(sst_glo,sst)
     642          !GG
     643          IF (iflag_seaice==1) THEN
     644             CALL Scatter(sih_glo,sih)
     645          END IF
     646          !GG
    574647          CALL Scatter(pct_glo(:,is_oce),pctsrf(:,is_oce))
    575648          CALL Scatter(pct_glo(:,is_sic),pctsrf(:,is_sic))
Note: See TracChangeset for help on using the changeset viewer.