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.
isfnxt.F90 in NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF – NEMO

source: NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfnxt.F90 @ 11423

Last change on this file since 11423 was 11403, checked in by mathiot, 5 years ago

ENHANCE-02_ISF_nemo : add comments, renaming file (AGRIF), add isfload module (ticket #2142)

File size: 3.8 KB
Line 
1MODULE isfnxt
2   !!=========================================================================
3   !!                       ***  MODULE  isfnxt  ***
4   !! Ice shelf update: compute the dynnxt ice shelf contribution
5   !!=========================================================================
6   !! History :  OPA  !  2019-09  (P. Mathiot)  Original code
7   !!-------------------------------------------------------------------------
8 
9   !!-------------------------------------------------------------------------
10   !!   dyn_nxt       : obtain the next (after) horizontal velocity
11   !!-------------------------------------------------------------------------
12
13   USE isf
14   USE dom_oce
15   USE in_out_manager
16
17   IMPLICIT NONE
18
19   PRIVATE
20
21   PUBLIC isf_dynnxt ! isf_tranxt
22
23CONTAINS
24
25   SUBROUTINE isf_dynnxt ( pcoef )
26      !!--------------------------------------------------------------------
27      !!                  ***  ROUTINE isf_dynnxt  ***
28      !!
29      !! ** Purpose : compute the ice shelf volume filter correction for cavity, param, ice sheet coupling case
30      !!
31      !!--------------------------------------------------------------------
32      !!-------------------------- OUT -------------------------------------
33      REAL(wp),                     INTENT(in   ) :: pcoef           ! atfp * rdt * r1_rau0
34      !!-------------------------- IN  -------------------------------------
35      !!--------------------------------------------------------------------
36      !!--------------------------------------------------------------------
37      !
38      ! ice shelf cavity
39      IF ( ln_isfcav_mlt ) CALL isf_dynnxt_mlt(misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav, fwfisf_cav, fwfisf_cav_b, pcoef)
40      !
41      ! ice shelf parametrised
42      IF ( ln_isfpar_mlt ) CALL isf_dynnxt_mlt(misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, fwfisf_par, fwfisf_par_b, pcoef)
43      !
44      ! ice sheet coupling
45      !IF ( ln_iscpl_hsb  ) CALL isf_dynnxt_cpl(...zcoef)
46      !
47   END SUBROUTINE isf_dynnxt
48
49   SUBROUTINE isf_dynnxt_mlt ( ktop, kbot, phtbl, pfrac, pfwf, pfwf_b, pcoef )
50      !!--------------------------------------------------------------------
51      !!                  ***  ROUTINE isf_dynnxt_mlt  ***
52      !!
53      !! ** Purpose : compute the ice shelf volume filter correction for cavity or param
54      !!
55      !!--------------------------------------------------------------------
56      !!-------------------------- OUT -------------------------------------
57      !!-------------------------- IN  -------------------------------------
58      INTEGER , DIMENSION(jpi,jpj), INTENT(in   ) :: ktop , kbot     ! top and bottom level of tbl
59      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pfrac, phtbl    ! fraction of bottom cell included in tbl, tbl thickness
60      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pfwf , pfwf_b   ! now/before fwf
61      REAL(wp),                     INTENT(in   ) :: pcoef           ! atfp * rdt * r1_rau0
62      !!----------------------------------------------------------------------
63      INTEGER :: ji,jj,jk
64      REAL(wp), DIMENSION(jpi,jpj) :: zfwfinc
65      !!----------------------------------------------------------------------
66      !
67      ! compute fwf conservation correction
68      zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / phtbl(:,:)
69      !
70      ! add the increment in the tbl
71      DO jk = 1, jpkm1
72         DO jj = 1, jpj
73            DO ji = 1, jpi
74               IF( ktop(ji,jj) <= jk .AND. jk < kbot(ji,jj)  ) THEN
75                  e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zfwfinc(ji,jj) * e3t_n(ji,jj,jk)
76               ELSEIF ( jk == kbot(ji,jj) ) THEN
77                  e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zfwfinc(ji,jj) * e3t_n(ji,jj,jk) * pfrac(ji,jj)
78               ENDIF
79            END DO
80         END DO
81      END DO
82      !
83   END SUBROUTINE isf_dynnxt_mlt
84
85END MODULE isfnxt
Note: See TracBrowser for help on using the repository browser.