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/branches/2019/UKMO_MERGE_2019/src/OCE/ISF – NEMO

source: NEMO/branches/2019/UKMO_MERGE_2019/src/OCE/ISF/isfdynatf.F90 @ 14296

Last change on this file since 14296 was 12077, checked in by mathiot, 5 years ago

include ENHANCE-02_ISF_nemo in UKMO merge branch

File size: 4.4 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
[12068]15   USE phycst , ONLY: r1_rau0         ! physical constant
16   USE dom_oce, ONLY: e3t, r1_e1e2t   ! time and space domain
[11852]17
[11403]18   USE in_out_manager
[11395]19
[11403]20   IMPLICIT NONE
[11395]21
[11403]22   PRIVATE
[11395]23
[12068]24   PUBLIC isf_dynatf
[11395]25
26CONTAINS
27
[12068]28   SUBROUTINE isf_dynatf ( kt, Kmm, pe3t_f, pcoef )
[11403]29      !!--------------------------------------------------------------------
[12068]30      !!                  ***  ROUTINE isf_dynatf  ***
[11403]31      !!
32      !! ** Purpose : compute the ice shelf volume filter correction for cavity, param, ice sheet coupling case
33      !!
34      !!-------------------------- OUT -------------------------------------
[12068]35      INTEGER                         , INTENT(in   ) :: kt       ! ocean time step
36      INTEGER                         , INTENT(in   ) :: Kmm      ! ocean time level index
37      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f   ! time filtered scale factor to be corrected
[11541]38      !
[12068]39      REAL(wp)                        , INTENT(in   ) :: pcoef    ! atfp * rdt * r1_rau0
[11403]40      !!--------------------------------------------------------------------
[11541]41      INTEGER :: jk  ! loop index
[11403]42      !!--------------------------------------------------------------------
[11395]43      !
44      ! ice shelf cavity
[12068]45      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]46      !
47      ! ice shelf parametrised
[12068]48      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]49      !
[11541]50      IF ( ln_isfcpl .AND. ln_rstart .AND. kt == nit000+1 ) THEN
51         DO jk = 1, jpkm1
[12068]52            pe3t_f(:,:,jk) =   pe3t_f(:,:,jk) - pcoef * risfcpl_vol(:,:,jk) * r1_e1e2t(:,:)
[11541]53         END DO
54      END IF
55      !
[12068]56   END SUBROUTINE isf_dynatf
[11395]57
[12068]58   SUBROUTINE isf_dynatf_mlt ( Kmm, pe3t_f, ktop, kbot, phtbl, pfrac, pfwf, pfwf_b, pcoef )
[11403]59      !!--------------------------------------------------------------------
[12068]60      !!                  ***  ROUTINE isf_dynatf_mlt  ***
[11403]61      !!
62      !! ** Purpose : compute the ice shelf volume filter correction for cavity or param
63      !!
64      !!-------------------------- IN  -------------------------------------
[12068]65      INTEGER                         , INTENT(in   ) :: Kmm             ! ocean time level index
66      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f          ! time-filtered scale factor to be corrected
67      INTEGER , DIMENSION(jpi,jpj)    , INTENT(in   ) :: ktop , kbot     ! top and bottom level of tbl
68      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   ) :: pfrac, phtbl    ! fraction of bottom cell included in tbl, tbl thickness
69      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   ) :: pfwf , pfwf_b   ! now/before fwf
70      REAL(wp),                         INTENT(in   ) :: pcoef           ! atfp * rdt * r1_rau0
[11395]71      !!----------------------------------------------------------------------
72      INTEGER :: ji,jj,jk
73      REAL(wp), DIMENSION(jpi,jpj) :: zfwfinc
74      !!----------------------------------------------------------------------
75      !
76      ! compute fwf conservation correction
[11541]77      zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / phtbl(:,:) * r1_rau0
[11395]78      !
[11403]79      ! add the increment in the tbl
[11395]80      DO jk = 1, jpkm1
81         DO jj = 1, jpj
82            DO ji = 1, jpi
83               IF( ktop(ji,jj) <= jk .AND. jk < kbot(ji,jj)  ) THEN
[12068]84                  pe3t_f(ji,jj,jk) = pe3t_f(ji,jj,jk) - zfwfinc(ji,jj) * e3t(ji,jj,jk,Kmm)
[11395]85               ELSEIF ( jk == kbot(ji,jj) ) THEN
[12068]86                  pe3t_f(ji,jj,jk) = pe3t_f(ji,jj,jk) - zfwfinc(ji,jj) * e3t(ji,jj,jk,Kmm) * pfrac(ji,jj)
[11395]87               ENDIF
88            END DO
89         END DO
90      END DO
91      !
[12068]92   END SUBROUTINE isf_dynatf_mlt
[11395]93
[12068]94END MODULE isfdynatf
Note: See TracBrowser for help on using the repository browser.