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

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

ENHANCE-02_ISF_nemo: fix WED025 restartability, finish removing useless USE, remove useless lbc_lnk

File size: 5.2 KB
Line 
1MODULE isfload
2   !!======================================================================
3   !!                       ***  MODULE  isfload  ***
4   !! isfload module :  compute ice shelf load (needed for the hpg)
5   !!======================================================================
6   !! History :  4.1  !  2019-09  (P. Mathiot) original code
7   !!----------------------------------------------------------------------
8
9   !!----------------------------------------------------------------------
10   !!   isfload      : compute ice shelf load
11   !!----------------------------------------------------------------------
12
13   USE isf, ONLY: cn_isfload   ! ice shelf variables
14
15   USE dom_oce, ONLY: e3w_n, gdept_n, risfdep, mikt ! vertical scale factor
16   USE eosbn2 , ONLY: eos                           ! eos routine
17
18   USE lib_mpp, ONLY: ctl_stop ! ctl_stop routine
19   USE in_out_manager  !
20
21   IMPLICIT NONE
22
23   PRIVATE
24
25   PUBLIC isf_load
26
27CONTAINS
28
29   SUBROUTINE isf_load ( pisfload )
30      !!--------------------------------------------------------------------
31      !!                  ***  SUBROUTINE isf_load  ***
32      !!
33      !! ** Purpose : compute the ice shelf load
34      !!
35      !!--------------------------------------------------------------------
36      !!-------------------------- OUT -------------------------------------
37      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: pisfload
38      !!-------------------------- IN  -------------------------------------
39      !!----------------------------------------------------------------------
40      !
41      ! quality test: ice shelf in a stratify/uniform ocean should not drive any flow.
42      !               the smaller the residual flow is, the better it is.
43      !
44      ! ice shelf cavity
45      SELECT CASE ( cn_isfload )
46      CASE ( 'isomip' )
47         CALL isf_load_isomip ( pisfload )
48      CASE DEFAULT
49         CALL ctl_stop('STOP','method cn_isfload to compute ice shelf load does not exist (isomip), check your namelist')
50      END SELECT
51      !
52   END SUBROUTINE isf_load
53
54   SUBROUTINE isf_load_isomip( pisfload )
55      !!--------------------------------------------------------------------
56      !!                  ***  SUBROUTINE isf_load  ***
57      !!
58      !! ** Purpose : compute the ice shelf load
59      !!
60      !! ** Method  : The ice shelf is assumed to be in hydro static equilibrium
61      !!              in water at -1.9 C and 34.4 PSU. Weight of the ice shelf is
62      !!              integrated from top to bottom.
63      !!
64      !!--------------------------------------------------------------------
65      !!-------------------------- OUT -------------------------------------
66      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: pisfload
67      !!-------------------------- IN  -------------------------------------
68      !!--------------------------------------------------------------------
69      INTEGER  :: ji, jj, jk
70      INTEGER  :: ikt
71      REAL(wp)                          :: znad        !
72      REAL(wp), DIMENSION(jpi,jpj)      :: zrhdtop_isf ! water density    displaced by the ice shelf (at the interface)
73      REAL(wp), DIMENSION(jpi,jpj,jpts) :: zts_top     ! water properties displaced by the ice shelf   
74      REAL(wp), DIMENSION(jpi,jpj,jpk)  :: zrhd        ! water density    displaced by the ice shelf
75      !!----------------------------------------------------------------------
76      !
77      znad = 1._wp                     !- To use density and not density anomaly
78      !
79      !                                !- assume water displaced by the ice shelf is at T=-1.9 and S=34.4 (rude)
80      zts_top(:,:,jp_tem) = -1.9_wp   ;   zts_top(:,:,jp_sal) = 34.4_wp
81      !
82      DO jk = 1, jpk                   !- compute density of the water displaced by the ice shelf
83         CALL eos( zts_top(:,:,:), gdept_n(:,:,jk), zrhd(:,:,jk) )
84      END DO
85      !
86      !                                !- compute rhd at the ice/oce interface (ice shelf side)
87      CALL eos( zts_top , risfdep, zrhdtop_isf )
88      !
89      !                                !- Surface value + ice shelf gradient
90      pisfload(:,:) = 0._wp                       ! compute pressure due to ice shelf load
91      DO jj = 1, jpj                         ! (used to compute hpgi/j for all the level from 1 to miku/v)
92         DO ji = 1, jpi                      ! divided by 2 later
93            ikt = mikt(ji,jj)
94            !
95            IF ( ikt > 1 ) THEN
96               !
97               ! top layer of the ice shelf
98               pisfload(ji,jj) = pisfload(ji,jj) + (znad + zrhd(ji,jj,1) ) * e3w_n(ji,jj,1)
99               !
100               ! core layers of the ice shelf
101               DO jk = 2, ikt-1
102                  pisfload(ji,jj) = pisfload(ji,jj) + (2._wp * znad + zrhd(ji,jj,jk-1) + zrhd(ji,jj,jk)) * e3w_n(ji,jj,jk)
103               END DO
104               !
105               ! deepest part of the ice shelf (between deepest T point and ice/ocean interface
106               pisfload(ji,jj) = pisfload(ji,jj) + (2._wp * znad + zrhdtop_isf(ji,jj) + zrhd(ji,jj,ikt-1)) &
107                  &                                              * ( risfdep(ji,jj) - gdept_n(ji,jj,ikt-1) )
108               !
109            END IF
110         END DO
111      END DO
112      !
113   END SUBROUTINE isf_load_isomip
114
115END MODULE isfload
Note: See TracBrowser for help on using the repository browser.