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.
icedyn_rhg.F90 in NEMO/branches/2020/dev_r12512_HPC-04_mcastril_Mixed_Precision_implementation/src/ICE – NEMO

source: NEMO/branches/2020/dev_r12512_HPC-04_mcastril_Mixed_Precision_implementation/src/ICE/icedyn_rhg.F90 @ 12749

Last change on this file since 12749 was 12377, checked in by acc, 4 years ago

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge --ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The --ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

  • Property svn:keywords set to Id
File size: 7.4 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 icectl         ! sea-ice: control prints
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   USE timing         ! Timing
25
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   ice_dyn_rhg        ! called by icestp.F90
30   PUBLIC   ice_dyn_rhg_init   ! called by icestp.F90
31
32   INTEGER ::              nice_rhg   ! choice of the type of rheology
33   !                                        ! associated indices:
34   INTEGER, PARAMETER ::   np_rhgEVP = 1   ! EVP rheology
35!! INTEGER, PARAMETER ::   np_rhgEAP = 2   ! EAP rheology
36
37   ! ** namelist (namrhg) **
38   LOGICAL ::   ln_rhg_EVP       ! EVP rheology
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      END SELECT
81      !
82      IF( lrst_ice ) THEN                       !* write EVP fields in the restart file
83         IF( ln_rhg_EVP )   CALL rhg_evp_rst( 'WRITE', kt )
84      ENDIF
85      !
86      ! controls
87      IF( sn_cfctl%l_prtctl ) &
88         &                 CALL ice_prt3D   ('icedyn_rhg')                                                             ! prints
89      IF( ln_icediachk )   CALL ice_cons_hsm(1, 'icedyn_rhg', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation
90      IF( ln_icediachk )   CALL ice_cons2D  (1, 'icedyn_rhg',  diag_v,  diag_s,  diag_t,  diag_fv,  diag_fs,  diag_ft) ! conservation
91      IF( ln_timing    )   CALL timing_stop ('icedyn_rhg')                                                             ! timing
92      !
93   END SUBROUTINE ice_dyn_rhg
94
95
96   SUBROUTINE ice_dyn_rhg_init
97      !!-------------------------------------------------------------------
98      !!                  ***  ROUTINE ice_dyn_rhg_init  ***
99      !!
100      !! ** Purpose : Physical constants and parameters linked to the ice
101      !!      dynamics
102      !!
103      !! ** Method  :  Read the namdyn_rhg namelist and check the ice-dynamic
104      !!       parameter values called at the first timestep (nit000)
105      !!
106      !! ** input   :   Namelist namdyn_rhg
107      !!-------------------------------------------------------------------
108      INTEGER ::   ios, ioptio   ! Local integer output status for namelist read
109      !!
110      NAMELIST/namdyn_rhg/  ln_rhg_EVP, ln_aEVP, rn_creepl, rn_ecc , nn_nevp, rn_relast
111      !!-------------------------------------------------------------------
112      !
113      READ  ( numnam_ice_ref, namdyn_rhg, IOSTAT = ios, ERR = 901)
114901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namdyn_rhg in reference namelist' )
115      READ  ( numnam_ice_cfg, namdyn_rhg, IOSTAT = ios, ERR = 902 )
116902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namdyn_rhg in configuration namelist' )
117      IF(lwm) WRITE ( numoni, namdyn_rhg )
118      !
119      IF(lwp) THEN                     ! control print
120         WRITE(numout,*)
121         WRITE(numout,*) 'ice_dyn_rhg_init: ice parameters for ice dynamics '
122         WRITE(numout,*) '~~~~~~~~~~~~~~~'
123         WRITE(numout,*) '   Namelist : namdyn_rhg:'
124         WRITE(numout,*) '      rheology EVP (icedyn_rhg_evp)                        ln_rhg_EVP = ', ln_rhg_EVP
125         WRITE(numout,*) '         use adaptive EVP (aEVP)                           ln_aEVP    = ', ln_aEVP
126         WRITE(numout,*) '         creep limit                                       rn_creepl  = ', rn_creepl
127         WRITE(numout,*) '         eccentricity of the elliptical yield curve        rn_ecc     = ', rn_ecc
128         WRITE(numout,*) '         number of iterations for subcycling               nn_nevp    = ', nn_nevp
129         WRITE(numout,*) '         ratio of elastic timescale over ice time step     rn_relast  = ', rn_relast
130      ENDIF
131      !
132      !                             !== set the choice of ice advection ==!
133      ioptio = 0 
134      IF( ln_rhg_EVP ) THEN   ;   ioptio = ioptio + 1   ;   nice_rhg = np_rhgEVP    ;   ENDIF
135!!    IF( ln_rhg_EAP ) THEN   ;   ioptio = ioptio + 1   ;   nice_rhg = np_rhgEAP    ;   ENDIF
136      IF( ioptio /= 1 )   CALL ctl_stop( 'ice_dyn_rhg_init: choose one and only one ice rheology' )
137      !
138      IF( ln_rhg_EVP  )   CALL rhg_evp_rst( 'READ' )  !* read or initialize all required files
139      !
140   END SUBROUTINE ice_dyn_rhg_init
141
142#else
143   !!----------------------------------------------------------------------
144   !!   Default option         Empty module           NO SI3 sea-ice model
145   !!----------------------------------------------------------------------
146#endif 
147
148   !!======================================================================
149END MODULE icedyn_rhg
Note: See TracBrowser for help on using the repository browser.