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

source: NEMO/branches/2019/UKMO_MERGE_2019/src/OCE/ISF/isfdiags.F90 @ 12068

Last change on this file since 12068 was 12068, checked in by davestorkey, 4 years ago

2019/UKMO_MERGE_2019 : Merging in changes from ENHANCE-02_ISF_nemo.

File size: 5.8 KB
Line 
1MODULE isfdiags
2   !!======================================================================
3   !!                       ***  MODULE  sbcisf  ***
4   !! Surface module :  update surface ocean boundary condition under ice
5   !!                   shelf
6   !!======================================================================
7   !! History :  3.2  !  2011-02  (C.Harris  ) Original code isf cav
8   !!            X.X  !  2006-02  (C. Wang   ) Original code bg03
9   !!            3.4  !  2013-03  (P. Mathiot) Merging + parametrization
10   !!----------------------------------------------------------------------
11
12   !!----------------------------------------------------------------------
13   !!   sbc_isf       : update sbc under ice shelf
14   !!----------------------------------------------------------------------
15
16   USE in_out_manager ! I/O manager
17   USE dom_oce
18   USE isf            ! ice shelf variable
19   USE isfutils
20   USE iom            !
21
22   IMPLICIT NONE
23
24   PRIVATE
25
26   PUBLIC   isf_diags_flx
27
28   !!----------------------------------------------------------------------
29   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
30   !! $Id: sbcisf.F90 10536 2019-01-16 19:21:09Z mathiot $
31   !! Software governed by the CeCILL license (see ./LICENSE)
32   !!----------------------------------------------------------------------
33
34CONTAINS
35
36   SUBROUTINE isf_diags_flx(Kmm, ktop, kbot, phtbl, pfrac, cdisf, pqfwf, pqoce, pqlat, pqhc)
37      !!---------------------------------------------------------------------
38      !!                  ***  ROUTINE isf_diags_flx ***
39      !!
40      !! ** Purpose :
41      !!
42      !!----------------------------------------------------------------------
43      !!-------------------------- OUT -------------------------------------
44      !!-------------------------- IN  -------------------------------------
45      INTEGER,                      INTENT(in) :: Kmm                       ! ocean time level index
46      INTEGER , DIMENSION(jpi,jpj), INTENT(in) :: ktop , kbot               ! top and bottom level of the tbl
47      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: phtbl, pfrac              ! thickness of the tbl and fraction of last cell affected by the tbl
48      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pqfwf, pqoce, pqlat, pqhc ! 2d var to map in 3d
49      CHARACTER(LEN=3), INTENT(in) :: cdisf                                 ! parametrisation or interactive melt
50      !!---------------------------------------------------------------------
51      CHARACTER(LEN=256) :: cvarqfwf  , cvarqoce  , cvarqlat  , cvarqhc
52      CHARACTER(LEN=256) :: cvarqfwf3d, cvarqoce3d, cvarqlat3d, cvarqhc3d
53      !!---------------------------------------------------------------------
54      !
55      ! output melt
56      cvarqfwf = 'fwfisf_'//cdisf  ; cvarqfwf3d = 'fwfisf3d_'//cdisf
57      cvarqoce = 'qoceisf_'//cdisf ; cvarqoce3d = 'qoceisf3d_'//cdisf
58      cvarqlat = 'qlatisf_'//cdisf ; cvarqlat3d = 'qlatisf3d_'//cdisf 
59      cvarqhc  = 'qhcisf_'//cdisf  ; cvarqhc3d  = 'qhcisf3d_'//cdisf
60      !
61      ! output 2d melt rate, latent heat and heat content flux
62      CALL iom_put( TRIM(cvarqfwf), pqfwf(:,:) )   ! isf mass flux (opposite sign)
63      CALL iom_put( TRIM(cvarqoce), pqoce(:,:) )   ! isf oce to ice   flux  (cpo*gt*dt)
64      CALL iom_put( TRIM(cvarqlat), pqlat(:,:) )   ! isf oce to ice   flux  (cpo*gt*dt)
65      CALL iom_put( TRIM(cvarqhc) , pqhc (:,:) )   ! isf heat content flux  (cpo*fwf*Tfrz)
66      !
67      ! output 3d Diagnostics
68      IF ( iom_use( TRIM(cvarqfwf3d) ) ) CALL isf_diags_2dto3d( Kmm, ktop, kbot, phtbl, pfrac, TRIM(cvarqfwf3d) , pqfwf(:,:))
69      IF ( iom_use( TRIM(cvarqoce3d) ) ) CALL isf_diags_2dto3d( Kmm, ktop, kbot, phtbl, pfrac, TRIM(cvarqoce3d) , pqoce(:,:))
70      IF ( iom_use( TRIM(cvarqlat3d) ) ) CALL isf_diags_2dto3d( Kmm, ktop, kbot, phtbl, pfrac, TRIM(cvarqlat3d) , pqoce(:,:))
71      IF ( iom_use( TRIM(cvarqhc3d)  ) ) CALL isf_diags_2dto3d( Kmm, ktop, kbot, phtbl, pfrac, TRIM(cvarqhc3d)  , pqhc (:,:))
72      !
73   END SUBROUTINE
74
75   SUBROUTINE isf_diags_2dto3d(Kmm, ktop, kbot, phtbl, pfrac, cdvar, pvar2d)
76      !!---------------------------------------------------------------------
77      !!                  ***  ROUTINE isf_diags_2dto3d ***
78      !!
79      !! ** Purpose :
80      !!
81      !!----------------------------------------------------------------------
82      !!-------------------------- OUT -------------------------------------
83      !!-------------------------- IN  -------------------------------------
84      INTEGER,                      INTENT(in) :: Kmm           ! ocean time level index
85      INTEGER , DIMENSION(jpi,jpj), INTENT(in) :: ktop , kbot   ! top and bottom level of the tbl
86      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: phtbl, pfrac  ! thickness of the tbl and fraction of last cell affected by the tbl
87      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pvar2d        ! 2d var to map in 3d
88      CHARACTER(LEN=256), INTENT(in) :: cdvar
89      !!---------------------------------------------------------------------
90      INTEGER  :: ji, jj, jk                       ! loop indices
91      INTEGER  :: ikt, ikb                         ! top and bottom level of the tbl
92      REAL(wp), DIMENSION(jpi,jpj)     :: zvar2d   !
93      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvar3d   ! 3d var to output
94      !!---------------------------------------------------------------------
95      !
96      ! compute 3d output
97      zvar2d(:,:) = pvar2d(:,:) / phtbl(:,:)
98      zvar3d(:,:,:) = 0._wp
99      !
100      DO jj = 1,jpj
101         DO ji = 1,jpi
102            ikt = ktop(ji,jj)
103            ikb = kbot(ji,jj)
104            DO jk = ikt, ikb - 1
105               zvar3d(ji,jj,jk) = zvar2d(ji,jj) * e3t(ji,jj,jk,Kmm)
106            END DO
107            zvar3d(ji,jj,ikb) = zvar2d(ji,jj) * e3t(ji,jj,ikb,Kmm) * pfrac(ji,jj)
108         END DO
109      END DO
110      !
111      CALL iom_put( TRIM(cdvar) , zvar3d(:,:,:))
112      !
113   END SUBROUTINE isf_diags_2dto3d
114
115END MODULE isfdiags
Note: See TracBrowser for help on using the repository browser.