source: NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/icedyn_rhg.F90 @ 14017

Last change on this file since 14017 was 14017, checked in by laurent, 5 months ago

Keep up with trunk revision 13999

  • Property svn:keywords set to Id
File size: 8.5 KB
Line 
1MODULE icedyn_rhg
2   !!======================================================================
3   !!                     ***  MODULE  icedyn_rhg  ***
4   !!   Sea-Ice dynamics : master routine for rheology
5   !!======================================================================
6   !! history :  4.0  !  2018     (C. Rousset)      Original code
7   !!----------------------------------------------------------------------
8#if defined key_si3
9   !!----------------------------------------------------------------------
10   !!   'key_si3'                                       SI3 sea-ice model
11   !!----------------------------------------------------------------------
12   !!    ice_dyn_rhg      : computes ice velocities
13   !!    ice_dyn_rhg_init : initialization and namelist read
14   !!----------------------------------------------------------------------
15   USE phycst         ! physical constants
16   USE dom_oce        ! ocean space and time domain
17   USE ice            ! sea-ice: variables
18   USE icedyn_rhg_evp ! sea-ice: EVP rheology
19   USE icedyn_rhg_eap ! sea-ice: EAP rheology
20   USE icectl         ! sea-ice: control prints
21   !
22   USE in_out_manager ! I/O manager
23   USE lib_mpp        ! MPP library
24   USE lib_fortran    ! fortran utilities (glob_sum + no signed zero)
25   USE timing         ! Timing
26
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC   ice_dyn_rhg        ! called by icestp.F90
31   PUBLIC   ice_dyn_rhg_init   ! called by icestp.F90
32
33   INTEGER ::              nice_rhg   ! choice of the type of rheology
34   !                                        ! associated indices:
35   INTEGER, PARAMETER ::   np_rhgEVP = 1   ! EVP rheology
36   INTEGER, PARAMETER ::   np_rhgEAP = 2   ! EAP rheology
37
38   ! ** namelist (namrhg) **
39   !
40   !!----------------------------------------------------------------------
41   !! NEMO/ICE 4.0 , NEMO Consortium (2018)
42   !! $Id$
43   !! Software governed by the CeCILL licence     (./LICENSE)
44   !!----------------------------------------------------------------------
45CONTAINS
46
47   SUBROUTINE ice_dyn_rhg( kt, Kmm )
48      !!-------------------------------------------------------------------
49      !!               ***  ROUTINE ice_dyn_rhg  ***
50      !!
51      !! ** Purpose :   compute ice velocity
52      !!
53      !! ** Action  : comupte - ice velocity (u_ice, v_ice)
54      !!                      - 3 components of the stress tensor (stress1_i, stress2_i, stress12_i)
55      !!                      - shear, divergence and delta (shear_i, divu_i, delta_i)
56      !!--------------------------------------------------------------------
57      INTEGER, INTENT(in) ::   kt     ! ice time step
58      INTEGER, INTENT(in) ::   Kmm    ! ocean time level index
59      !!--------------------------------------------------------------------
60      ! controls
61      IF( ln_timing    )   CALL timing_start('icedyn_rhg')                                                             ! timing
62      IF( ln_icediachk )   CALL ice_cons_hsm(0, 'icedyn_rhg', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation
63      IF( ln_icediachk )   CALL ice_cons2D  (0, 'icedyn_rhg',  diag_v,  diag_s,  diag_t,  diag_fv,  diag_fs,  diag_ft) ! conservation
64      !
65      IF( kt == nit000 .AND. lwp ) THEN
66         WRITE(numout,*)
67         WRITE(numout,*)'ice_dyn_rhg: sea-ice rheology'
68         WRITE(numout,*)'~~~~~~~~~~~'
69      ENDIF
70      !
71      !--------------!
72      !== Rheology ==!
73      !--------------!
74      SELECT CASE( nice_rhg )
75      !                                !------------------------!
76      CASE( np_rhgEVP )                ! Elasto-Viscous-Plastic !
77         !                             !------------------------!
78         CALL ice_dyn_rhg_evp( kt, Kmm, stress1_i, stress2_i, stress12_i, shear_i, divu_i, delta_i )
79         !
80         !                             !----------------------------!
81      CASE( np_rhgEAP )                ! Elasto-Anisotropic-Plastic !
82         !                             !----------------------------!
83         CALL ice_dyn_rhg_eap( kt, Kmm, stress1_i, stress2_i, stress12_i, shear_i, divu_i, delta_i, aniso_11, aniso_12, rdg_conv )
84      END SELECT
85      !
86      IF( lrst_ice ) THEN                       !* write EVP fields in the restart file
87         IF( ln_rhg_EVP )   CALL rhg_evp_rst( 'WRITE', kt )
88         IF( ln_rhg_EAP )   CALL rhg_eap_rst( 'WRITE', kt ) !* write EAP fields in the restart file
89      ENDIF
90      !
91      ! controls
92      IF( sn_cfctl%l_prtctl ) &
93         &                 CALL ice_prt3D   ('icedyn_rhg')                                                             ! prints
94      IF( ln_icediachk )   CALL ice_cons_hsm(1, 'icedyn_rhg', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation
95      IF( ln_icediachk )   CALL ice_cons2D  (1, 'icedyn_rhg',  diag_v,  diag_s,  diag_t,  diag_fv,  diag_fs,  diag_ft) ! conservation
96      IF( ln_timing    )   CALL timing_stop ('icedyn_rhg')                                                             ! timing
97      !
98   END SUBROUTINE ice_dyn_rhg
99
100
101   SUBROUTINE ice_dyn_rhg_init
102      !!-------------------------------------------------------------------
103      !!                  ***  ROUTINE ice_dyn_rhg_init  ***
104      !!
105      !! ** Purpose : Physical constants and parameters linked to the ice
106      !!      dynamics
107      !!
108      !! ** Method  :  Read the namdyn_rhg namelist and check the ice-dynamic
109      !!       parameter values called at the first timestep (nit000)
110      !!
111      !! ** input   :   Namelist namdyn_rhg
112      !!-------------------------------------------------------------------
113      INTEGER ::   ios, ioptio   ! Local integer output status for namelist read
114      !!
115      NAMELIST/namdyn_rhg/  ln_rhg_EVP, ln_aEVP, ln_rhg_EAP, rn_creepl, rn_ecc , nn_nevp, rn_relast, nn_rhg_chkcvg
116      !!-------------------------------------------------------------------
117      !
118      READ  ( numnam_ice_ref, namdyn_rhg, IOSTAT = ios, ERR = 901)
119901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namdyn_rhg in reference namelist' )
120      READ  ( numnam_ice_cfg, namdyn_rhg, IOSTAT = ios, ERR = 902 )
121902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namdyn_rhg in configuration namelist' )
122      IF(lwm) WRITE ( numoni, namdyn_rhg )
123      !
124      IF(lwp) THEN                     ! control print
125         WRITE(numout,*)
126         WRITE(numout,*) 'ice_dyn_rhg_init: ice parameters for ice dynamics '
127         WRITE(numout,*) '~~~~~~~~~~~~~~~'
128         WRITE(numout,*) '   Namelist : namdyn_rhg:'
129         WRITE(numout,*) '      rheology EVP (icedyn_rhg_evp)                        ln_rhg_EVP    = ', ln_rhg_EVP
130         WRITE(numout,*) '         use adaptive EVP (aEVP)                           ln_aEVP       = ', ln_aEVP
131         WRITE(numout,*) '         creep limit                                       rn_creepl     = ', rn_creepl
132         WRITE(numout,*) '         eccentricity of the elliptical yield curve        rn_ecc        = ', rn_ecc
133         WRITE(numout,*) '         number of iterations for subcycling               nn_nevp       = ', nn_nevp
134         WRITE(numout,*) '         ratio of elastic timescale over ice time step     rn_relast     = ', rn_relast
135         WRITE(numout,*) '      check convergence of rheology                        nn_rhg_chkcvg = ', nn_rhg_chkcvg
136         IF    ( nn_rhg_chkcvg == 0 ) THEN   ;   WRITE(numout,*) '         no check'
137         ELSEIF( nn_rhg_chkcvg == 1 ) THEN   ;   WRITE(numout,*) '         check cvg at the main time step'
138         ELSEIF( nn_rhg_chkcvg == 2 ) THEN   ;   WRITE(numout,*) '         check cvg at both main and rheology time steps'
139         ENDIF
140         WRITE(numout,*) '      rheology EAP (icedyn_rhg_eap)                        ln_rhg_EAP = ', ln_rhg_EAP
141      ENDIF
142      !
143      !                             !== set the choice of ice advection ==!
144      ioptio = 0
145      IF( ln_rhg_EVP ) THEN   ;   ioptio = ioptio + 1   ;   nice_rhg = np_rhgEVP    ;   ENDIF
146      IF( ln_rhg_EAP ) THEN   ;   ioptio = ioptio + 1   ;   nice_rhg = np_rhgEAP    ;   ENDIF
147      IF( ioptio /= 1 )   CALL ctl_stop( 'ice_dyn_rhg_init: choose one and only one ice rheology' )
148      !
149      IF( ln_rhg_EVP  )   CALL rhg_evp_rst( 'READ' )  !* read or initialize all required files
150      IF( ln_rhg_EAP  )   CALL rhg_eap_rst( 'READ' )  !* read or initialize all required files
151      !
152   END SUBROUTINE ice_dyn_rhg_init
153
154#else
155   !!----------------------------------------------------------------------
156   !!   Default option         Empty module           NO SI3 sea-ice model
157   !!----------------------------------------------------------------------
158#endif
159
160   !!======================================================================
161END MODULE icedyn_rhg
Note: See TracBrowser for help on using the repository browser.