source: NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/ISF/isfdynatf.F90 @ 12372

Last change on this file since 12372 was 12372, checked in by acc, 13 months ago

Branch 2019/dev_r11943_MERGE_2019. A few changes to align the option 1 branch with the trunk@12371. These include a fix for #2317 (changes for LFRA freshwater correction) which was done at changeset 12279 on the trunk. These affect dynatf.F90, traatf.F90 and isfdynatf.F90 and pass SETTE but change results in all tests that use freshwater input (expected). All other changes on the trunk are present (where applicable) up to and including changeset 12367 (Solve #2380)

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