source: NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/ICE/icethd_zdf.F90 @ 11317

Last change on this file since 11317 was 11317, checked in by smasson, 15 months ago

dev_r10984_HPC-13 : improve error handling, see #2307 and #2285

  • Property svn:keywords set to Id
File size: 6.6 KB
Line 
1MODULE icethd_zdf
2   !!======================================================================
3   !!                       ***  MODULE icethd_zdf ***
4   !!   sea-ice: master routine for vertical heat diffusion in sea ice
5   !!======================================================================
6   !! History :  4.0  !  2018     (C. Rousset)      Original code SI3
7   !!----------------------------------------------------------------------
8#if defined key_si3
9   !!----------------------------------------------------------------------
10   !!   'key_si3'                                       SI3 sea-ice model
11   !!----------------------------------------------------------------------
12   !!  ice_thd_zdf      : select the appropriate routine for vertical heat diffusion calculation
13   !!  ice_thd_zdf_BL99 : heat diffusion from Bitz and Lipscomb 1999
14   !!  ice_thd_zdf_init : initialization
15   !!----------------------------------------------------------------------
16   USE dom_oce         ! ocean space and time domain
17   USE phycst          ! physical constants (ocean directory)
18   USE ice             ! sea-ice: variables
19   USE icethd_zdf_BL99 ! sea-ice: vertical diffusion (Bitz and Lipscomb, 1999)
20   !
21   USE in_out_manager  ! I/O manager
22   USE lib_mpp         ! MPP library
23   USE lib_fortran     ! fortran utilities (glob_sum + no signed zero)
24
25   IMPLICIT NONE
26   PRIVATE
27
28   PUBLIC   ice_thd_zdf        ! called by icethd
29   PUBLIC   ice_thd_zdf_init   ! called by icestp
30
31   INTEGER ::   nice_zdf       ! Choice of the type of vertical heat diffusion formulation
32   !                                 ! associated indices:
33   INTEGER, PARAMETER ::   np_BL99 = 1   ! Bitz and Lipscomb (1999)
34!! INTEGER, PARAMETER ::   np_XXXX = 2
35
36   !!** namelist (namthd_zdf) **
37   LOGICAL ::   ln_zdf_BL99    ! Heat diffusion follows Bitz and Lipscomb (1999)
38
39   !!----------------------------------------------------------------------
40   !! NEMO/ICE 4.0 , NEMO Consortium (2018)
41   !! $Id$
42   !! Software governed by the CeCILL license (see ./LICENSE)
43   !!----------------------------------------------------------------------
44CONTAINS
45
46   SUBROUTINE ice_thd_zdf
47      !!-------------------------------------------------------------------
48      !!                ***  ROUTINE ice_thd_zdf  ***
49      !!
50      !! ** Purpose :   select the appropriate routine for the computation
51      !!              of vertical diffusion
52      !!-------------------------------------------------------------------
53      !
54      SELECT CASE ( nice_zdf )      ! Choose the vertical heat diffusion solver
55      !
56      !                             !-------------!     
57      CASE( np_BL99 )               ! BL99 solver !
58         !                          !-------------!
59         IF( .NOT.ln_cndflx ) THEN                           ! No conduction flux ==> default option
60            CALL ice_thd_zdf_BL99( np_cnd_OFF )
61         ELSEIF( ln_cndflx .AND. .NOT.ln_cndemulate ) THEN   ! Conduction flux as surface boundary condition ==> Met Office default option
62            CALL ice_thd_zdf_BL99( np_cnd_ON  )
63         ELSEIF( ln_cndflx .AND.      ln_cndemulate ) THEN   ! Conduction flux is emulated
64            CALL ice_thd_zdf_BL99( np_cnd_EMU )
65            CALL ice_thd_zdf_BL99( np_cnd_ON  )
66         ENDIF
67         !
68      END SELECT
69      !
70   END SUBROUTINE ice_thd_zdf
71   
72   
73   SUBROUTINE ice_thd_zdf_init
74      !!-----------------------------------------------------------------------
75      !!                   ***  ROUTINE ice_thd_zdf_init ***
76      !!                 
77      !! ** Purpose :   Physical constants and parameters associated with
78      !!                ice thermodynamics
79      !!
80      !! ** Method  :   Read the namthd_zdf namelist and check the parameters
81      !!                called at the first timestep (nit000)
82      !!
83      !! ** input   :   Namelist namthd_zdf
84      !!-------------------------------------------------------------------
85      INTEGER  ::   ios, ioptio   ! Local integer
86      !!
87      NAMELIST/namthd_zdf/ ln_zdf_BL99, ln_cndi_U64, ln_cndi_P07, rn_cnd_s, rn_kappa_i
88      !!-------------------------------------------------------------------
89      !
90      REWIND( numnam_ice_ref )              ! Namelist namthd_zdf in reference namelist : Ice thermodynamics
91      READ  ( numnam_ice_ref, namthd_zdf, IOSTAT = ios, ERR = 901)
92901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namthd_zdf in reference namelist' )
93      REWIND( numnam_ice_cfg )              ! Namelist namthd_zdf in configuration namelist : Ice thermodynamics
94      READ  ( numnam_ice_cfg, namthd_zdf, IOSTAT = ios, ERR = 902 )
95902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namthd_zdf in configuration namelist' )
96      IF(lwm) WRITE( numoni, namthd_zdf )
97      !
98      IF(lwp) THEN                          ! control print
99         WRITE(numout,*)
100         WRITE(numout,*) 'ice_thd_zdf_init: Ice vertical heat diffusion'
101         WRITE(numout,*) '~~~~~~~~~~~~~~~~'
102         WRITE(numout,*) '   Namelist namthd_zdf:'
103         WRITE(numout,*) '      Bitz and Lipscomb (1999) formulation                    ln_zdf_BL99  = ', ln_zdf_BL99
104         WRITE(numout,*) '      thermal conductivity in the ice (Untersteiner 1964)     ln_cndi_U64  = ', ln_cndi_U64
105         WRITE(numout,*) '      thermal conductivity in the ice (Pringle et al 2007)    ln_cndi_P07  = ', ln_cndi_P07
106         WRITE(numout,*) '      thermal conductivity in the snow                        rn_cnd_s     = ', rn_cnd_s
107         WRITE(numout,*) '      extinction radiation parameter in sea ice               rn_kappa_i   = ', rn_kappa_i
108      ENDIF
109      !
110      IF ( ( ln_cndi_U64 .AND. ln_cndi_P07 ) .OR. ( .NOT. ln_cndi_U64 .AND. .NOT. ln_cndi_P07 ) ) THEN
111         CALL ctl_stop( 'ice_thd_zdf_init: choose 1 and only 1 formulation for thermal conduction (ln_cndi_U64 or ln_cndi_P07)' )
112      ENDIF
113      !                             !== set the choice of ice vertical thermodynamic formulation ==!
114      ioptio = 0 
115      IF( ln_zdf_BL99 ) THEN   ;   ioptio = ioptio + 1   ;   nice_zdf = np_BL99   ;   ENDIF   ! BL99 thermodynamics (linear liquidus + constant thermal properties)
116!!    IF( ln_zdf_XXXX ) THEN   ;   ioptio = ioptio + 1   ;   nice_zdf = np_XXXX   ;   ENDIF
117      IF( ioptio /= 1 )   CALL ctl_stop( 'ice_thd_init: one and only one ice thermo option has to be defined ' )
118      !
119   END SUBROUTINE ice_thd_zdf_init
120
121#else
122   !!----------------------------------------------------------------------
123   !!   Default option       Dummy Module             No SI3 sea-ice model
124   !!----------------------------------------------------------------------
125#endif
126
127   !!======================================================================
128END MODULE icethd_zdf
Note: See TracBrowser for help on using the repository browser.