New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14995 for NEMO/trunk/src – NEMO

Changeset 14995 for NEMO/trunk/src


Ignore:
Timestamp:
2021-06-15T19:15:26+02:00 (3 years ago)
Author:
mathiot
Message:

ticket #2669 : merge ticket2669_isf_fluxes into trunk

Location:
NEMO/trunk/src/OCE
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/ISF/isf_oce.F90

    r14064 r14995  
    4747   ! 
    4848   ! 0.3 -------- ice shelf cavity parametrised namelist parameter ------------- 
    49    LOGICAL           , PUBLIC :: ln_isfpar_mlt   !: logical for the computation of melt inside the cavity 
    50    CHARACTER(LEN=256), PUBLIC :: cn_isfpar_mlt   !: melt formulation (cavity/param) 
    51    TYPE(FLD_N)       , PUBLIC :: sn_isfpar_fwf   !: information about the isf melting file to be read 
    52    TYPE(FLD_N)       , PUBLIC :: sn_isfpar_zmax  !: information about the grounding line depth file to be read 
    53    TYPE(FLD_N)       , PUBLIC :: sn_isfpar_zmin  !: information about the calving   line depth file to be read 
    54    TYPE(FLD_N)       , PUBLIC :: sn_isfpar_Leff  !: information about the effective length     file to be read 
     49   LOGICAL           , PUBLIC :: ln_isfpar_mlt      !: logical for the computation of melt inside the cavity 
     50   REAL(wp)          , PUBLIC :: rn_isfpar_bg03_gt0 !: temperature exchange coeficient [m/s] 
     51   CHARACTER(LEN=256), PUBLIC :: cn_isfpar_mlt      !: melt formulation (cavity/param) 
     52   TYPE(FLD_N)       , PUBLIC :: sn_isfpar_fwf      !: information about the isf melting file to be read 
     53   TYPE(FLD_N)       , PUBLIC :: sn_isfpar_zmax     !: information about the grounding line depth file to be read 
     54   TYPE(FLD_N)       , PUBLIC :: sn_isfpar_zmin     !: information about the calving   line depth file to be read 
     55   TYPE(FLD_N)       , PUBLIC :: sn_isfpar_Leff     !: information about the effective length     file to be read 
    5556   ! 
    5657   ! 0.4 -------- coupling namelist parameter ------------- 
  • NEMO/trunk/src/OCE/ISF/isfcav.F90

    r14433 r14995  
    5959      !!                   - compute heat and fwf fluxes 
    6060      !!                   - output 
     61      !!  
     62      !! ** Convention : all fluxes are from oce to isf ( > 0 out of the ocean ) 
     63      !! 
    6164      !!--------------------------------------------------------------------- 
    6265      !!-------------------------- OUT -------------------------------------- 
     
    132135      zqlat(:,:) = - pqfwf(:,:) * rLfusisf    ! 2d latent heat flux (W/m2) 
    133136      ! 
    134       ! total heat flux ( >0 out ) 
     137      ! total heat flux ( > 0 out ) 
    135138      zqh(:,:) = ( zqhc (:,:) + zqoce(:,:) ) 
    136139      ! 
     
    148151      ! 
    149152      IF ( ln_isfdebug ) THEN 
     153         IF(lwp) WRITE(numout,*) '' 
    150154         CALL debug('isf_cav: ptsc T',ptsc(:,:,1)) 
    151155         CALL debug('isf_cav: ptsc S',ptsc(:,:,2)) 
    152156         CALL debug('isf_cav: pqfwf fwf',pqfwf(:,:)) 
     157         IF(lwp) WRITE(numout,*) '' 
    153158      END IF 
    154159      ! 
  • NEMO/trunk/src/OCE/ISF/isfcavmlt.F90

    r13472 r14995  
    7979      ! 
    8080      IF (ln_isfdebug) THEN 
     81         IF(lwp) WRITE(numout,*) '' 
    8182         CALL debug( 'isfcav_mlt qhc  :', pqhc (:,:) ) 
    8283         CALL debug( 'isfcav_mlt qoce :', pqoce(:,:) ) 
    8384         CALL debug( 'isfcav_mlt qfwf :', pqfwf(:,:) ) 
     85         IF(lwp) WRITE(numout,*) '' 
    8486      END IF 
    8587      ! 
     
    122124      ! 
    123125      ! output freezing point at the interface 
    124       CALL iom_put('isftfrz_cav', ztfrz ) 
     126      CALL iom_put('isftfrz_cav', ztfrz(:,:) * mskisf_cav(:,:) ) 
    125127      ! 
    126128   END SUBROUTINE isfcav_mlt_spe 
     
    167169      ! output thermal driving and freezinpoint at the ice shelf interface 
    168170      CALL iom_put('isfthermald_cav', zthd ) 
    169       CALL iom_put('isftfrz_cav'    , ztfrz ) 
     171      CALL iom_put('isftfrz_cav'    , ztfrz(:,:) * mskisf_cav(:,:) ) 
    170172      ! 
    171173   END SUBROUTINE isfcav_mlt_2eq 
  • NEMO/trunk/src/OCE/ISF/isfpar.F90

    r14433 r14995  
    99   !!            3.4  !  2013-03  (P. Mathiot) Merging + parametrization 
    1010   !!            4.1  !  2019-09  (P. Mathiot) Restructuration 
     11   !!            4.2  !  2021-05  (C. Ethe   ) Test and fix oasis case 
    1112   !!---------------------------------------------------------------------- 
    1213 
     
    5657      !!              the name tbl was kept. 
    5758      !! 
     59      !! ** Convention : all fluxes are from oce to isf ( > 0 out of the ocean ) 
     60      !! 
    5861      !!--------------------------------------------------------------------- 
    5962      !!-------------------------- OUT -------------------------------------- 
     
    7578      zqhc (:,:) = zqhc(:,:)  * mskisf_par(:,:) 
    7679      ! 
    77       ! compute heat content flux ( > 0 out ) 
    78       zqlat(:,:) = pqfwf(:,:) * rLfusisf    ! 2d latent heat flux (W/m2) 
     80      ! compute latent heat flux ( > 0 out ) 
     81      zqlat(:,:) = - pqfwf(:,:) * rLfusisf    ! 2d latent heat flux (W/m2) 
    7982      ! 
    8083      ! total heat flux ( > 0 out ) 
     
    8891      ! 
    8992      ! set temperature content 
    90       ptsc(:,:,jp_tem) = zqh(:,:) * r1_rho0_rcp 
     93      ptsc(:,:,jp_tem) = - zqh(:,:) * r1_rho0_rcp 
    9194      ! 
    9295      ! write restart variables (qoceisf, qhcisf, fwfisf for now and before) 
     
    9497      ! 
    9598      IF ( ln_isfdebug ) THEN 
     99         IF(lwp) WRITE(numout,*) 
    96100         CALL debug('isf_par: ptsc T',ptsc(:,:,1)) 
    97101         CALL debug('isf_par: ptsc S',ptsc(:,:,2)) 
    98102         CALL debug('isf_par: pqfwf fwf',pqfwf(:,:)) 
     103         IF(lwp) WRITE(numout,*) 
    99104      END IF 
    100105      ! 
     
    175180      CASE ( 'oasis' ) 
    176181         ! 
     182         ALLOCATE( sf_isfpar_fwf(1), STAT=ierr ) 
     183         ALLOCATE( sf_isfpar_fwf(1)%fnow(jpi,jpj,1), sf_isfpar_fwf(1)%fdta(jpi,jpj,1,2) ) 
     184         CALL fld_fill( sf_isfpar_fwf, (/ sn_isfpar_fwf /), cn_isfdir, 'isf_par_init', 'read fresh water flux isf data', 'namisf' ) 
     185         ! 
    177186         IF(lwp) WRITE(numout,*) 
    178187         IF(lwp) WRITE(numout,*) '      ==>>>    isf melt provided by OASIS (cn_isfmlt_par = oasis)' 
  • NEMO/trunk/src/OCE/ISF/isfparmlt.F90

    r12489 r14995  
    1010   USE isf_oce                  ! ice shelf 
    1111   USE isftbl , ONLY: isf_tbl   ! ice shelf depth average 
     12   USE isfutils,ONLY: debug     ! debug subroutine 
    1213 
    1314   USE dom_oce                  ! ocean space and time domain 
     
    3940! ------------------------------------------------------------------------------------------------------- 
    4041 
    41   SUBROUTINE isfpar_mlt( kt, Kmm, pqhc, pqoce, pqfwf ) 
     42   SUBROUTINE isfpar_mlt( kt, Kmm, pqhc, pqoce, pqfwf ) 
    4243      !!--------------------------------------------------------------------- 
    4344      !!                  ***  ROUTINE isfpar_mlt  *** 
     
    6970      END SELECT 
    7071      ! 
     72      IF (ln_isfdebug) THEN 
     73         IF(lwp) WRITE(numout,*) '' 
     74         CALL debug( 'isfpar_mlt qhc  :', pqhc (:,:) ) 
     75         CALL debug( 'isfpar_mlt qoce :', pqoce(:,:) ) 
     76         CALL debug( 'isfpar_mlt qfwf :', pqfwf(:,:) ) 
     77         IF(lwp) WRITE(numout,*) '' 
     78      END IF 
     79      ! 
    7180   END SUBROUTINE isfpar_mlt 
    7281 
     
    103112      CALL isf_tbl(Kmm, ztfrz3d, ztfrz, 'T', misfkt_par, rhisf_tbl_par, misfkb_par, rfrac_tbl_par ) 
    104113      ! 
    105       pqfwf(:,:) = - sf_isfpar_fwf(1)%fnow(:,:,1)      ! fresh water flux from the isf (fwfisf <0 mean melting)  
    106       pqoce(:,:) =   pqfwf(:,:) * rLfusisf             ! ocean/ice shelf flux assume to be equal to latent heat flux 
    107       pqhc (:,:) =   pqfwf(:,:) * ztfrz(:,:) * rcp     ! heat content flux  
    108       ! 
    109       CALL iom_put('isftfrz_par', ztfrz ) 
     114      pqfwf(:,:) = - sf_isfpar_fwf(1)%fnow(:,:,1)      ! fresh water flux from the isf (fwfisf <0 mean melting)       ( > 0 out ) 
     115      pqoce(:,:) = - pqfwf(:,:) * rLfusisf             ! ocean/ice shelf flux assume to be equal to latent heat flux  ( > 0 out ) 
     116      pqhc (:,:) =   pqfwf(:,:) * ztfrz(:,:) * rcp     ! heat content flux                                            ( > 0 out ) 
     117      ! 
     118      CALL iom_put('isftfrz_par', ztfrz(:,:) * mskisf_par(:,:) ) 
    110119      ! 
    111120   END SUBROUTINE isfpar_mlt_spe 
     
    145154      ! 
    146155      ! 1. ------------Mean temperature 
    147       CALL isf_tbl(Kmm, ts(:,:,jk,jp_tem,Kmm), ztavg, 'T', misfkt_par, rhisf_tbl_par, misfkb_par, rfrac_tbl_par ) 
     156      CALL isf_tbl(Kmm, ts(:,:,:,jp_tem,Kmm), ztavg, 'T', misfkt_par, rhisf_tbl_par, misfkb_par, rfrac_tbl_par ) 
    148157      ! 
    149158      ! 2. ------------Net heat flux and fresh water flux due to the ice shelf 
    150       pqoce(:,:) =   rho0 * rcp * rn_gammat0 * risfLeff(:,:) * e1t(:,:) * ( ztavg(:,:) - ztfrz(:,:) ) * r1_e1e2t(:,:) 
    151       pqfwf(:,:) = - pqoce(:,:) / rLfusisf             ! derived from the latent heat flux 
    152       pqhc (:,:) =   pqfwf(:,:) * ztfrz(:,:) * rcp     ! heat content flux  
     159      pqfwf(:,:) = - rho0 * rcp * rn_isfpar_bg03_gt0 * risfLeff(:,:) * e1t(:,:) * (ztavg(:,:) - ztfrz(:,:) ) * r1_e1e2t(:,:) / rLfusisf  ! ( > 0 out ) 
     160      pqoce(:,:) = - pqfwf(:,:) * rLfusisf             ! ocean/ice shelf flux assume to be equal to latent heat flux  ( > 0 out ) 
     161      pqhc (:,:) =   pqfwf(:,:) * ztfrz(:,:) * rcp     ! heat content flux                                            ( > 0 out ) 
    153162      ! 
    154163      ! 3. ------------BG03 output 
     
    157166      ! 
    158167      ! output thermal driving 
    159       CALL iom_put('isfthermald_par',( ztfrz(:,:) - ztavg(:,:) ) * mskisf_par(:,:)) 
     168      CALL iom_put('isfthermald_par',( ztavg(:,:) - ztfrz(:,:) ) * mskisf_par(:,:)) 
    160169      ! 
    161170      ! output freezing point used to define the thermal driving and heat content fluxes 
    162       CALL iom_put('isftfrz_par', ztfrz ) 
     171      CALL iom_put('isftfrz_par', ztfrz(:,:) * mskisf_par(:,:) ) 
    163172      ! 
    164173   END SUBROUTINE isfpar_mlt_bg03 
  • NEMO/trunk/src/OCE/ISF/isfstp.F90

    r14143 r14995  
    262262      IF ( l_isfoasis .AND. ln_isf ) THEN 
    263263         ! 
    264          CALL ctl_stop( 'namelist combination ln_cpl and ln_isf not tested' ) 
    265          ! 
    266264         ! NEMO coupled to ATMO model with isf cavity need oasis method for melt computation  
    267265         IF ( ln_isfcav_mlt .AND. TRIM(cn_isfcav_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfcav_mlt = oasis is the only option availble if fwf send by oasis' ) 
    268266         IF ( ln_isfpar_mlt .AND. TRIM(cn_isfpar_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfpar_mlt = oasis is the only option availble if fwf send by oasis' ) 
    269          ! 
    270          ! oasis melt computation not tested (coded but not tested) 
    271          IF ( ln_isfcav_mlt .OR. ln_isfpar_mlt ) THEN 
    272             IF ( TRIM(cn_isfcav_mlt) == 'oasis' ) CALL ctl_stop( 'cn_isfcav_mlt = oasis not tested' ) 
    273             IF ( TRIM(cn_isfpar_mlt) == 'oasis' ) CALL ctl_stop( 'cn_isfpar_mlt = oasis not tested' ) 
    274          END IF 
    275267         ! 
    276268         ! oasis melt computation with cavity open and cavity parametrised (not coded) 
     
    301293         &             sn_isfpar_zmin, sn_isfpar_zmax, sn_isfpar_Leff,                           & 
    302294         &             ln_isfcpl     , nn_drown      , ln_isfcpl_cons, ln_isfdebug,              & 
    303          &             cn_isfload    , rn_isfload_T  , rn_isfload_S  , cn_isfdir 
     295         &             cn_isfload    , rn_isfload_T  , rn_isfload_S  , cn_isfdir  ,              & 
     296         &             rn_isfpar_bg03_gt0 
    304297      !!---------------------------------------------------------------------- 
    305298      ! 
  • NEMO/trunk/src/OCE/SBC/sbccpl.F90

    r14834 r14995  
    285285         &                  sn_rcv_charn , sn_rcv_taw   , sn_rcv_bhd  , sn_rcv_tusd  , sn_rcv_tvsd,    & 
    286286         &                  sn_rcv_wdrag , sn_rcv_qns   , sn_rcv_emp  , sn_rcv_rnf   , sn_rcv_cal  ,   & 
    287          &                  sn_rcv_iceflx, sn_rcv_co2   , sn_rcv_icb  , sn_rcv_isf   , sn_rcv_ts_ice !!, sn_rcv_qtrice 
     287         &                  sn_rcv_iceflx, sn_rcv_co2   , sn_rcv_icb  , sn_rcv_isf   , sn_rcv_ts_ice,  & !!, sn_rcv_qtrice 
     288         &                  sn_rcv_mslp 
    288289 
    289290      !!--------------------------------------------------------------------- 
     
    528529         IF(lwp) WRITE(numout,*) 
    529530         IF(lwp) WRITE(numout,*) '   iceshelf received from oasis ' 
    530          CALL ctl_stop('STOP','not coded') 
    531       ENDIF 
     531      ENDIF 
     532      ! 
    532533      ! 
    533534      !                                                      ! ------------------------- ! 
Note: See TracChangeset for help on using the changeset viewer.