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

Last change on this file since 11987 was 11987, checked in by mathiot, 11 months ago

ENHANCE-02_ISF_nemo: changes needed after Dave's review

File size: 3.9 KB
RevLine 
[11931]1MODULE isfdynnxt
[11403]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   !!-------------------------------------------------------------------------
[11852]10   !!   isfnxt       : aplly correction needed for the ice shelf to ensure conservation
[11403]11   !!-------------------------------------------------------------------------
[11395]12
[11987]13   USE isf_oce
[11852]14
15   USE phycst , ONLY: r1_rau0                ! physical constant
16   USE dom_oce, ONLY: e3t_b, e3t_n, r1_e1e2t ! time and space domain
17
[11403]18   USE in_out_manager
[11395]19
[11403]20   IMPLICIT NONE
[11395]21
[11403]22   PRIVATE
[11395]23
[11852]24   PUBLIC isf_dynnxt
[11395]25
26CONTAINS
27
[11541]28   SUBROUTINE isf_dynnxt ( kt, pcoef )
[11403]29      !!--------------------------------------------------------------------
30      !!                  ***  ROUTINE isf_dynnxt  ***
31      !!
32      !! ** Purpose : compute the ice shelf volume filter correction for cavity, param, ice sheet coupling case
33      !!
34      !!-------------------------- OUT -------------------------------------
[11541]35      INTEGER ,                     INTENT(in   ) :: kt
36      !
[11852]37      REAL(wp),                     INTENT(in   ) :: pcoef           ! atfp * rdt * r1_rau0
[11403]38      !!--------------------------------------------------------------------
[11541]39      INTEGER :: jk  ! loop index
[11403]40      !!--------------------------------------------------------------------
[11395]41      !
42      ! ice shelf cavity
43      IF ( ln_isfcav_mlt ) CALL isf_dynnxt_mlt(misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav, fwfisf_cav, fwfisf_cav_b, pcoef)
44      !
45      ! ice shelf parametrised
46      IF ( ln_isfpar_mlt ) CALL isf_dynnxt_mlt(misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, fwfisf_par, fwfisf_par_b, pcoef)
47      !
[11541]48      IF ( ln_isfcpl .AND. ln_rstart .AND. kt == nit000+1 ) THEN
49         DO jk = 1, jpkm1
50            e3t_b(:,:,jk) =   e3t_b(:,:,jk) - pcoef * risfcpl_vol(:,:,jk) * r1_e1e2t(:,:)
51         END DO
52      END IF
53      !
[11395]54   END SUBROUTINE isf_dynnxt
55
56   SUBROUTINE isf_dynnxt_mlt ( ktop, kbot, phtbl, pfrac, pfwf, pfwf_b, pcoef )
[11403]57      !!--------------------------------------------------------------------
58      !!                  ***  ROUTINE isf_dynnxt_mlt  ***
59      !!
60      !! ** Purpose : compute the ice shelf volume filter correction for cavity or param
61      !!
62      !!-------------------------- IN  -------------------------------------
[11395]63      INTEGER , DIMENSION(jpi,jpj), INTENT(in   ) :: ktop , kbot     ! top and bottom level of tbl
64      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pfrac, phtbl    ! fraction of bottom cell included in tbl, tbl thickness
65      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pfwf , pfwf_b   ! now/before fwf
66      REAL(wp),                     INTENT(in   ) :: pcoef           ! atfp * rdt * r1_rau0
67      !!----------------------------------------------------------------------
68      INTEGER :: ji,jj,jk
69      REAL(wp), DIMENSION(jpi,jpj) :: zfwfinc
70      !!----------------------------------------------------------------------
71      !
72      ! compute fwf conservation correction
[11541]73      zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / phtbl(:,:) * r1_rau0
[11395]74      !
[11403]75      ! add the increment in the tbl
[11395]76      DO jk = 1, jpkm1
77         DO jj = 1, jpj
78            DO ji = 1, jpi
79               IF( ktop(ji,jj) <= jk .AND. jk < kbot(ji,jj)  ) THEN
80                  e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zfwfinc(ji,jj) * e3t_n(ji,jj,jk)
81               ELSEIF ( jk == kbot(ji,jj) ) THEN
82                  e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zfwfinc(ji,jj) * e3t_n(ji,jj,jk) * pfrac(ji,jj)
83               ENDIF
84            END DO
85         END DO
86      END DO
87      !
88   END SUBROUTINE isf_dynnxt_mlt
89
[11931]90END MODULE isfdynnxt
Note: See TracBrowser for help on using the repository browser.