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.
isfdynatf.F90 in NEMO/trunk/src/OCE/ISF – NEMO

source: NEMO/trunk/src/OCE/ISF/isfdynatf.F90 @ 15004

Last change on this file since 15004 was 15004, checked in by mathiot, 3 years ago

ticket #2960: commit fix to the trunk (WARNING: output convention of isf fluxes changed from oce->isf to isf->oce), no impact on the input file needed for some options

File size: 4.3 KB
RevLine 
[12068]1MODULE isfdynatf
[11403]2   !!=========================================================================
3   !!                       ***  MODULE  isfnxt  ***
[12068]4   !! Ice shelf update: compute the dynatf ice shelf contribution
[11403]5   !!=========================================================================
6   !! History :  OPA  !  2019-09  (P. Mathiot)  Original code
7   !!-------------------------------------------------------------------------
8 
9   !!-------------------------------------------------------------------------
[12068]10   !!   isfnxt       : apply correction needed for the ice shelf to ensure conservation
[11403]11   !!-------------------------------------------------------------------------
[11395]12
[12077]13   USE isf_oce
[11852]14
[12489]15   USE phycst , ONLY: r1_rho0         ! physical constant
[13237]16   USE dom_oce                        ! time and space domain
[14053]17   USE oce, ONLY : ssh                ! sea-surface height for qco substitution
[11852]18
[11403]19   USE in_out_manager
[11395]20
[11403]21   IMPLICIT NONE
[11395]22
[11403]23   PRIVATE
[11395]24
[12068]25   PUBLIC isf_dynatf
[12340]26   !! * Substitutions
27#  include "do_loop_substitute.h90"
[13237]28#  include "domzgr_substitute.h90"
[11395]29
30CONTAINS
31
[12068]32   SUBROUTINE isf_dynatf ( kt, Kmm, pe3t_f, pcoef )
[11403]33      !!--------------------------------------------------------------------
[12068]34      !!                  ***  ROUTINE isf_dynatf  ***
[11403]35      !!
36      !! ** Purpose : compute the ice shelf volume filter correction for cavity, param, ice sheet coupling case
37      !!
38      !!-------------------------- OUT -------------------------------------
[12068]39      INTEGER                         , INTENT(in   ) :: kt       ! ocean time step
40      INTEGER                         , INTENT(in   ) :: Kmm      ! ocean time level index
41      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f   ! time filtered scale factor to be corrected
[11541]42      !
[12489]43      REAL(wp)                        , INTENT(in   ) :: pcoef    ! rn_atfp * rn_Dt * r1_rho0
[11403]44      !!--------------------------------------------------------------------
[11541]45      INTEGER :: jk  ! loop index
[11403]46      !!--------------------------------------------------------------------
[11395]47      !
48      ! ice shelf cavity
[12068]49      IF ( ln_isfcav_mlt ) CALL isf_dynatf_mlt(Kmm, pe3t_f, misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav, fwfisf_cav, fwfisf_cav_b, pcoef)
[11395]50      !
51      ! ice shelf parametrised
[12068]52      IF ( ln_isfpar_mlt ) CALL isf_dynatf_mlt(Kmm, pe3t_f, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, fwfisf_par, fwfisf_par_b, pcoef)
[11395]53      !
[11541]54      IF ( ln_isfcpl .AND. ln_rstart .AND. kt == nit000+1 ) THEN
55         DO jk = 1, jpkm1
[12068]56            pe3t_f(:,:,jk) =   pe3t_f(:,:,jk) - pcoef * risfcpl_vol(:,:,jk) * r1_e1e2t(:,:)
[11541]57         END DO
58      END IF
59      !
[12068]60   END SUBROUTINE isf_dynatf
[11395]61
[12068]62   SUBROUTINE isf_dynatf_mlt ( Kmm, pe3t_f, ktop, kbot, phtbl, pfrac, pfwf, pfwf_b, pcoef )
[11403]63      !!--------------------------------------------------------------------
[12068]64      !!                  ***  ROUTINE isf_dynatf_mlt  ***
[11403]65      !!
66      !! ** Purpose : compute the ice shelf volume filter correction for cavity or param
67      !!
68      !!-------------------------- IN  -------------------------------------
[12068]69      INTEGER                         , INTENT(in   ) :: Kmm             ! ocean time level index
70      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f          ! time-filtered scale factor to be corrected
71      INTEGER , DIMENSION(jpi,jpj)    , INTENT(in   ) :: ktop , kbot     ! top and bottom level of tbl
72      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   ) :: pfrac, phtbl    ! fraction of bottom cell included in tbl, tbl thickness
73      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   ) :: pfwf , pfwf_b   ! now/before fwf
[12489]74      REAL(wp),                         INTENT(in   ) :: pcoef           ! rn_atfp * rn_Dt * r1_rho0
[11395]75      !!----------------------------------------------------------------------
76      INTEGER :: ji,jj,jk
77      REAL(wp), DIMENSION(jpi,jpj) :: zfwfinc
78      !!----------------------------------------------------------------------
79      !
80      ! compute fwf conservation correction
[12489]81      zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / ( ht(:,:) + 1._wp - ssmask(:,:) ) * r1_rho0
[11395]82      !
[12372]83      ! add the increment
84      DO jk = 1, jpkm1
[15004]85         pe3t_f(:,:,jk) = pe3t_f(:,:,jk) + tmask(:,:,jk) * zfwfinc(:,:)   &
[13237]86            &                              * e3t(:,:,jk,Kmm)
[12372]87      END DO
[11395]88      !
[12068]89   END SUBROUTINE isf_dynatf_mlt
[11395]90
[12068]91END MODULE isfdynatf
Note: See TracBrowser for help on using the repository browser.