Changeset 2135 for branches/devmercator2010_1/NEMO/LIM_SRC_3
- Timestamp:
- 2010-09-29T19:31:33+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/devmercator2010_1/NEMO/LIM_SRC_3/limrhg.F90
r1469 r2135 4 4 !! Ice rheology : sea ice rheology 5 5 !!====================================================================== 6 !! History : -! 2007-03 (M.A. Morales Maqueda, S. Bouillon) Original code7 !! 3.0 ! 2008-03 (M. Vancoppenolle) LIM 36 !! History : LIM ! 2007-03 (M.A. Morales Maqueda, S. Bouillon) Original code 7 !! 3.0 ! 2008-03 (M. Vancoppenolle) LIM 3 8 8 !! - ! 2008-11 (M. Vancoppenolle, S. Bouillon, Y. Aksenov) add surface tilt in ice rheolohy 9 !! 3.3 ! 2009-05 (G.Garric) addition of the lim2_evp cas 9 10 !!---------------------------------------------------------------------- 10 #if defined key_lim3 11 #if defined key_lim3 || ( defined key_lim2 && ! defined key_lim2_vp ) 11 12 !!---------------------------------------------------------------------- 12 13 !! 'key_lim3' LIM3 sea-ice model … … 14 15 !! lim_rhg : computes ice velocities 15 16 !!---------------------------------------------------------------------- 16 !! * Modules used 17 USE phycst 18 USE par_oce 19 USE dom_oce 20 USE dom_ice 21 USE sbc_oce ! Surface boundary condition: ocean fields 22 USE sbc_ice ! Surface boundary condition: ice fields 23 USE ice 24 USE iceini 25 USE lbclnk 26 USE lib_mpp 27 USE in_out_manager ! I/O manager 28 USE limitd_me 29 USE prtctl ! Print control 30 17 USE phycst ! physical constants 18 USE par_oce ! ocean parameters 19 USE dom_oce ! ocean domain 20 USE sbc_oce ! Surface boundary condition: ocean fields 21 USE sbc_ice ! Surface boundary condition: ice fields 22 USE lbclnk ! lateral boundary condition - MPP exchanges 23 USE lib_mpp ! MPP library 24 USE in_out_manager ! I/O manager 25 USE limitd_me ! LIM3: 26 USE prtctl ! control print 27 #if defined key_lim3 28 USE ice ! LIM3: ice variables 29 USE dom_ice ! LIM3: ice domain 30 USE iceini ! LIM3: ice initialisation 31 #endif 32 #if defined key_lim2 && ! defined key_lim2_vp 33 USE ice_2 ! LIM2: ice variables 34 USE dom_ice_2 ! LIM2: ice domain 35 USE iceini_2 ! LIM2: ice initialisation 36 #endif 31 37 32 38 IMPLICIT NONE 33 39 PRIVATE 34 40 35 !! * Routine accessibility 36 PUBLIC lim_rhg ! routine called by lim_dyn 37 38 !! * Substitutions 39 # include "vectopt_loop_substitute.h90" 41 PUBLIC lim_rhg ! routine called by lim_dyn module 40 42 41 43 !! * Module variables … … 43 45 rzero = 0.e0 , & 44 46 rone = 1.e0 47 48 !! * Substitutions 49 # include "vectopt_loop_substitute.h90" 45 50 !!---------------------------------------------------------------------- 46 !! LIM 3.0, UCL-LOCEAN-IPSL (2008)51 !! NEMO/LIM-3 3.3, UCL-LOCEAN-IPSL (2010) 47 52 !! $Id$ 48 53 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 49 54 !!---------------------------------------------------------------------- 50 51 55 CONTAINS 52 56 53 57 SUBROUTINE lim_rhg( k_j1, k_jpj ) 54 55 58 !!------------------------------------------------------------------- 56 59 !! *** SUBROUTINE lim_rhg *** … … 100 103 !! 101 104 !! ** References : Hunke and Dukowicz, JPO97 102 !! Bouillon et al., 08, in prep (update this when 103 !! published) 104 !! Vancoppenolle et al., OM08 105 !! Bouillon et al., 2009, Ocean. Modelling, 27, 174-184. 106 !! Vancoppenolle et al. 2009, Ocean Modelling, 27, 33-53. 107 !!------------------------------------------------------------------- 108 INTEGER, INTENT(in) :: k_j1 ! southern j-index for ice computation 109 INTEGER, INTENT(in) :: k_jpj ! northern j-index for ice computation 105 110 !! 106 !!------------------------------------------------------------------- 107 ! * Arguments 108 ! 109 INTEGER, INTENT(in) :: & 110 k_j1 , & !: southern j-index for ice computation 111 k_jpj !: northern j-index for ice computation 112 113 ! * Local variables 114 INTEGER :: ji, jj !: dummy loop indices 115 116 INTEGER :: & 117 jter !: temporary integers 118 119 CHARACTER (len=50) :: charout 120 121 REAL(wp) :: & 122 zt11, zt12, zt21, zt22, & !: temporary scalars 123 ztagnx, ztagny, & !: wind stress on U/V points 124 delta ! 125 126 REAL(wp) :: & 127 za, & !: 128 zstms, & !: temporary scalar for ice strength 129 zsang, & !: temporary scalar for coriolis term 130 zmask !: mask for the computation of ice mass 131 132 REAL(wp),DIMENSION(jpi,jpj) :: & 133 zpresh , & !: temporary array for ice strength 134 zpreshc , & !: Ice strength on grid cell corners (zpreshc) 135 zfrld1, zfrld2, & !: lead fraction on U/V points 136 zmass1, zmass2, & !: ice/snow mass on U/V points 137 zcorl1, zcorl2, & !: coriolis parameter on U/V points 138 za1ct, za2ct , & !: temporary arrays 139 zc1 , & !: ice mass 140 zusw , & !: temporary weight for the computation 141 !: of ice strength 142 u_oce1, v_oce1, & !: ocean u/v component on U points 143 u_oce2, v_oce2, & !: ocean u/v component on V points 144 u_ice2, & !: ice u component on V point 145 v_ice1 !: ice v component on U point 111 INTEGER :: ji, jj ! dummy loop indices 112 INTEGER :: jter ! local integers 113 CHARACTER (len=50) :: charout ! local character 114 REAL(wp) :: zt11, zt12, zt21, zt22 ! local scalars 115 REAL(wp) :: ztagnx, ztagny, delta ! - - 116 REAL(wp) :: za, zstms, zsang, zmask ! - - 117 REAL(wp) :: zresm, zindb, zdummy ! - - 118 119 REAL(wp),DIMENSION(jpi,jpj) :: zpresh , zfrld1, zmass1, zcorl1, za1ct ! 2D workspace 120 REAL(wp),DIMENSION(jpi,jpj) :: zpreshc, zfrld2, zmass2, zcorl2, za2ct ! - - 121 REAL(wp),DIMENSION(jpi,jpj) :: u_oce1, v_oce1, u_ice2, zc1 ! - - 122 REAL(wp),DIMENSION(jpi,jpj) :: u_oce2, v_oce2, v_ice1, zusw ! - - 123 REAL(wp),DIMENSION(jpi,jpj) :: zf1, zf2 ! - - 146 124 147 125 REAL(wp) :: & … … 159 137 sigma1, sigma2 !: internal ice stress 160 138 161 REAL(wp),DIMENSION(jpi,jpj) :: &162 zf1, zf2 !: arrays for internal stresses163 139 164 140 REAL(wp),DIMENSION(jpi,jpj) :: & … … 170 146 zs12 !: Non-diagonal stress tensor component zs12 171 147 172 REAL(wp) :: & 173 zresm , & !: Maximal error on ice velocity 174 zindb , & !: ice (1) or not (0) 175 zdummy !: dummy argument 176 177 REAL(wp),DIMENSION(jpi,jpj) :: & 178 zu_ice , & !: Ice velocity on previous time step 179 zv_ice , & 180 zresr !: Local error on velocity 181 148 149 REAL(wp),DIMENSION(jpi,jpj) :: zu_ice, zv_ice, zresr ! 150 !!------------------------------------------------------------------- 151 152 #if defined key_lim2 && ! defined key_lim2_vp 153 vt_s => hsnm 154 vt_i => hicm 155 at_i(:,:) = 1. - frld(:,:) 156 #endif 182 157 ! 183 158 !------------------------------------------------------------------------------! … … 190 165 u_ice2(:,:) = 0.0 ; v_ice1(:,:) = 0.0 191 166 zdd(:,:) = 0.0 ; zdt(:,:) = 0.0 ; zds(:,:) = 0.0 192 167 #if defined key_lim3 193 168 ! Ice strength on T-points 194 169 CALL lim_itd_me_icestrength(ridge_scheme_swi) 170 #endif 195 171 196 172 ! Ice mass and temp variables … … 200 176 DO ji = 1 , jpi 201 177 zc1(ji,jj) = tms(ji,jj) * ( rhosn * vt_s(ji,jj) + rhoic * vt_i(ji,jj) ) 178 #if defined key_lim3 202 179 zpresh(ji,jj) = tms(ji,jj) * strength(ji,jj) / 2. 180 #else 181 zpresh(ji,jj) = tms(ji,jj) * 2. * pstar * hicm(ji,jj) * EXP( -c_rhg * frld(ji,jj) ) 182 #endif 203 183 ! tmi = 1 where there is ice or on land 204 184 tmi(ji,jj) = 1.0 - ( 1.0 - MAX( 0.0 , SIGN ( 1.0 , vt_i(ji,jj) - & … … 269 249 / ( e2t(ji,jj+1) + e2t(ji,jj) + epsd ) 270 250 ! 251 ! Mass, coriolis coeff. and currents 271 252 u_oce1(ji,jj) = u_oce(ji,jj) 272 253 v_oce2(ji,jj) = v_oce(ji,jj)
Note: See TracChangeset
for help on using the changeset viewer.