Changeset 7280 for branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3
- Timestamp:
- 2016-11-21T11:40:00+01:00 (8 years ago)
- Location:
- branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r7278 r7280 5 5 !!====================================================================== 6 6 !! History : 2.0 ! 2004-01 (C. Ethe, G. Madec) Original code 7 !! 4.0 ! 2011-02 (G. Madec) dynamical allocation7 !! 3.0 ! 2011-02 (G. Madec) dynamical allocation 8 8 !! - ! 2014 (C. Rousset) add N/S initializations 9 9 !!---------------------------------------------------------------------- … … 25 25 USE dom_ice ! sea-ice domain 26 26 USE limvar ! lim_var_salprof 27 ! 27 28 USE in_out_manager ! I/O manager 28 29 USE lib_mpp ! MPP library … … 37 38 PUBLIC lim_istate ! routine called by lim_init.F90 38 39 39 ! !!** init namelist (namiceini) **40 ! !!** init namelist (namiceini) ** 40 41 REAL(wp) :: rn_thres_sst ! threshold water temperature for initial sea ice 41 42 REAL(wp) :: rn_hts_ini_n ! initial snow thickness in the north … … 57 58 INTEGER , PARAMETER :: jp_tmi = 5 ! index of ice temp at T-point 58 59 INTEGER , PARAMETER :: jp_smi = 6 ! index of ice sali at T-point 59 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: si 60 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: si ! structure of input fields (file informations, fields read) 60 61 61 62 LOGICAL :: ln_iceini ! initialization or not … … 74 75 !! ** Purpose : defined the sea-ice initial state 75 76 !! 76 !! ** Method : 77 !! This routine will put some ice where ocean 77 !! ** Method : This routine will put some ice where ocean 78 78 !! is at the freezing point, then fill in ice 79 79 !! state variables using prescribed initial 80 80 !! values in the namelist 81 81 !! 82 !! ** Steps : 83 !! 1) Read namelist 82 !! ** Steps : 1) Read namelist 84 83 !! 2) Basal temperature; ice and hemisphere masks 85 84 !! 3) Fill in the ice thickness distribution using gaussian … … 96 95 !! 4.0 ! 09-11 (M. Vancoppenolle) Enhanced version for ice cats 97 96 !!-------------------------------------------------------------------- 98 99 !! * Local variables 100 INTEGER :: ji, jj, jk, jl ! dummy loop indices 101 REAL(wp) :: ztmelts, zdh 102 INTEGER :: i_hemis, i_fill, jl0 97 INTEGER :: ji, jj, jk, jl ! dummy loop indices 98 REAL(wp) :: ztmelts, zdh 99 INTEGER :: i_hemis, i_fill, jl0 103 100 REAL(wp) :: ztest_1, ztest_2, ztest_3, ztest_4, ztests, zsigma, zarg, zA, zV, zA_cons, zV_cons, zconv 104 101 REAL(wp), POINTER, DIMENSION(:,:) :: zswitch ! ice indicator … … 108 105 !-------------------------------------------------------------------- 109 106 110 CALL wrk_alloc( jpi, jpj, jpl,zh_i_ini, za_i_ini, zv_i_ini )111 CALL wrk_alloc( jpi, jpj,zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini )112 CALL wrk_alloc( jpi, jpj,zswitch )107 CALL wrk_alloc( jpi,jpj,jpl, zh_i_ini, za_i_ini, zv_i_ini ) 108 CALL wrk_alloc( jpi,jpj, zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 109 CALL wrk_alloc( jpi,jpj, zswitch ) 113 110 114 111 IF(lwp) WRITE(numout,*) 115 IF(lwp) WRITE(numout,*) 'lim_istate : Ice initialization '116 IF(lwp) WRITE(numout,*) '~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~'112 IF(lwp) WRITE(numout,*) 'lim_istate : sea-ice initialization ' 113 IF(lwp) WRITE(numout,*) '~~~~~~~~~~ ' 117 114 118 115 !-------------------------------------------------------------------- 119 116 ! 1) Read namelist 120 117 !-------------------------------------------------------------------- 121 118 ! 122 119 CALL lim_istate_init ! reading the initials parameters of the ice 123 120 … … 134 131 135 132 IF( ln_iceini ) THEN 136 133 ! 137 134 !-------------------------------------------------------------------- 138 135 ! 2) Basal temperature, ice mask and hemispheric index 139 136 !-------------------------------------------------------------------- 140 137 ! 141 138 DO jj = 1, jpj ! ice if sst <= t-freez + ttest 142 139 DO ji = 1, jpi … … 153 150 !-------------------------------------------------------------------- 154 151 IF( ln_iceini_file )THEN 155 152 ! 156 153 zht_i_ini(:,:) = si(jp_hti)%fnow(:,:,1) 157 154 zht_s_ini(:,:) = si(jp_hts)%fnow(:,:,1) … … 160 157 ztm_i_ini(:,:) = si(jp_tmi)%fnow(:,:,1) 161 158 zsm_i_ini(:,:) = si(jp_smi)%fnow(:,:,1) 162 159 ! 163 160 ELSE ! ln_iceini_file = F 164 161 ! 165 162 !----------------------------- 166 163 ! 3.1) Hemisphere-dependent arrays … … 186 183 END DO 187 184 END DO 188 185 ! 189 186 ENDIF ! ln_iceini_file 190 187 … … 200 197 za_i_ini(:,:,:) = 0._wp 201 198 zv_i_ini(:,:,:) = 0._wp 202 199 ! 203 200 DO jj = 1, jpj 204 201 DO ji = 1, jpi 205 202 ! 206 203 IF( zat_i_ini(ji,jj) > 0._wp .AND. zht_i_ini(ji,jj) > 0._wp )THEN 207 208 ztest_1 = 0 ; ztest_2 = 0 ; ztest_3 = 0 ;ztest_4 = 0204 ! 205 ztest_1 = 0 ; ztest_2 = 0 ; ztest_3 = 0 ; ztest_4 = 0 209 206 ! ztests = 0 210 207 ! 211 208 DO i_fill = jpl, 1, -1 212 213 ! IF( ztests .NE.4 ) THEN214 IF ( ( ztest_1 + ztest_2 + ztest_3 + ztest_4 ) .NE.4 ) THEN209 ! 210 ! IF( ztests /= 4 ) THEN 211 IF ( ( ztest_1 + ztest_2 + ztest_3 + ztest_4 ) /= 4 ) THEN 215 212 !---------------------------- 216 213 ! fill the i_fill categories … … 223 220 za_i_ini(ji,jj,2:jpl) = 0._wp 224 221 ELSE 225 222 ! 226 223 ! *** >1 categores to fill 227 224 !--- Ice thicknesses in the i_fill - 1 first categories … … 229 226 zh_i_ini(ji,jj,jl) = hi_mean(jl) 230 227 END DO 231 228 ! 232 229 !--- jl0: most likely index where cc will be maximum 233 230 DO jl = 1, jpl … … 238 235 END DO 239 236 jl0 = MIN(jl0, i_fill) 240 237 ! 241 238 !--- Concentrations 242 239 za_i_ini(ji,jj,jl0) = zat_i_ini(ji,jj) / SQRT(REAL(jpl)) 243 240 DO jl = 1, i_fill - 1 244 IF( jl .NE.jl0 )THEN241 IF( jl /= jl0 )THEN 245 242 zsigma = 0.5 * zht_i_ini(ji,jj) 246 243 zarg = ( zh_i_ini(ji,jj,jl) - zht_i_ini(ji,jj) ) / zsigma … … 248 245 ENDIF 249 246 END DO 250 247 ! 251 248 zA = 0. ! sum of the areas in the jpl categories 252 249 DO jl = 1, i_fill - 1 … … 254 251 END DO 255 252 za_i_ini(ji,jj,i_fill) = zat_i_ini(ji,jj) - zA ! ice conc in the last category 256 IF ( i_fill .LT.jpl ) za_i_ini(ji,jj,i_fill+1:jpl) = 0._wp257 253 IF ( i_fill < jpl ) za_i_ini(ji,jj,i_fill+1:jpl) = 0._wp 254 ! 258 255 !--- Ice thickness in the last category 259 256 zV = 0. ! sum of the volumes of the N-1 categories … … 262 259 END DO 263 260 zh_i_ini(ji,jj,i_fill) = ( zvt_i_ini(ji,jj) - zV ) / za_i_ini(ji,jj,i_fill) 264 IF ( i_fill .LT.jpl ) zh_i_ini(ji,jj,i_fill+1:jpl) = 0._wp265 261 IF ( i_fill < jpl ) zh_i_ini(ji,jj,i_fill+1:jpl) = 0._wp 262 ! 266 263 !--- volumes 267 264 zv_i_ini(ji,jj,:) = za_i_ini(ji,jj,:) * zh_i_ini(ji,jj,:) 268 IF ( i_fill .LT.jpl ) zv_i_ini(ji,jj,i_fill+1:jpl) = 0._wp269 265 IF ( i_fill < jpl ) zv_i_ini(ji,jj,i_fill+1:jpl) = 0._wp 266 ! 270 267 ENDIF ! i_fill 271 268 ! 272 269 !--------------------- 273 270 ! Compatibility tests … … 275 272 ! Test 1: area conservation 276 273 zA_cons = SUM(za_i_ini(ji,jj,:)) ; zconv = ABS(zat_i_ini(ji,jj) - zA_cons ) 277 IF ( zconv .LT. 1.0e-6 ) THEN 278 ztest_1 = 1 279 ELSE 280 ztest_1 = 0 274 IF( zconv < 1.0e-6 ) THEN ; ztest_1 = 1. 275 ELSE ; ztest_1 = 0. 281 276 ENDIF 282 277 ! 283 278 ! Test 2: volume conservation 284 279 zV_cons = SUM(zv_i_ini(ji,jj,:)) 285 zconv = ABS(zvt_i_ini(ji,jj) - zV_cons) 286 287 IF( zconv .LT. 1.0e-6 ) THEN 288 ztest_2 = 1 289 ELSE 290 ztest_2 = 0 280 zconv = ABS(zvt_i_ini(ji,jj) - zV_cons) 281 IF( zconv < 1.0e-6 ) THEN ; ztest_2 = 1. 282 ELSE ; ztest_2 = 0. 291 283 ENDIF 292 284 ! 293 285 ! Test 3: thickness of the last category is in-bounds ? 294 IF ( zh_i_ini(ji,jj,i_fill) > hi_max(i_fill-1) ) THEN 295 ztest_3 = 1 296 ELSE 297 ztest_3 = 0 286 IF( zh_i_ini(ji,jj,i_fill) > hi_max(i_fill-1) ) THEN ; ztest_3 = 1. 287 ELSE ; ztest_3 = 0. 298 288 ENDIF 299 289 ! 300 290 ! Test 4: positivity of ice concentrations 301 291 ztest_4 = 1 302 292 DO jl = 1, jpl 303 IF ( za_i_ini(ji,jj,jl) .LT. 0._wp ) THEN 304 ztest_4 = 0 305 ENDIF 293 IF( za_i_ini(ji,jj,jl) < 0._wp ) ztest_4 = 0 306 294 END DO 307 295 ! 308 296 ENDIF ! ztest_1 + ztest_2 + ztest_3 + ztest_4 309 297 ! 310 298 ztests = ztest_1 + ztest_2 + ztest_3 + ztest_4 311 299 ! 312 300 END DO ! i_fill 313 301 ! 314 302 IF(lwp) THEN 315 WRITE(numout,*) ' ztests : ', ztests 316 IF( ztests .NE. 4 )THEN 303 IF( ztests /= 4 ) THEN 317 304 WRITE(numout,*) 318 305 WRITE(numout,*) ' !!!! ALERT !!! ' 319 306 WRITE(numout,*) ' !!!! Something is wrong in the LIM3 initialization procedure ' 320 307 WRITE(numout,*) 321 WRITE(numout,*) ' *** ztests is not equal to 4 '308 WRITE(numout,*) ' *** ztests is not equal to 4 : ztests : ', ztests 322 309 WRITE(numout,*) ' *** ztest_i (i=1,4) = ', ztest_1, ztest_2, ztest_3, ztest_4 323 310 WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(ji,jj) 324 311 WRITE(numout,*) ' zht_i_ini : ', zht_i_ini(ji,jj) 325 ENDIF ! ztests .NE.4312 ENDIF ! ztests /= 4 326 313 ENDIF 327 314 ! 328 315 ENDIF ! zat_i_ini(ji,jj) > 0._wp .AND. zhm_i_ini(ji,jj) > 0._wp 329 330 END DO331 END DO316 ! 317 END DO 318 END DO 332 319 333 320 !--------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r7278 r7280 969 969 IF (lwp) THEN ! control print 970 970 WRITE(numout,*) 971 WRITE(numout,*)' lim_itd_me_init : ice parameters for mechanical ice redistribution ' 972 WRITE(numout,*)' ~~~~~~~~~~~~~~~' 973 WRITE(numout,*)' Fraction of shear energy contributing to ridging rn_cs = ', rn_cs 974 WRITE(numout,*)' Fraction of snow volume conserved during ridging rn_fsnowrdg = ', rn_fsnowrdg 975 WRITE(numout,*)' Fraction of snow volume conserved during ridging rn_fsnowrft = ', rn_fsnowrft 976 WRITE(numout,*)' Fraction of total ice coverage contributing to ridging rn_gstar = ', rn_gstar 977 WRITE(numout,*)' Equivalent to G* for an exponential part function rn_astar = ', rn_astar 978 WRITE(numout,*)' Quantity playing a role in max ridged ice thickness rn_hstar = ', rn_hstar 979 WRITE(numout,*)' Rafting of ice sheets or not ln_rafting = ', ln_rafting 980 WRITE(numout,*)' Parmeter thickness (threshold between ridge-raft) rn_hraft = ', rn_hraft 981 WRITE(numout,*)' Rafting hyperbolic tangent coefficient rn_craft = ', rn_craft 982 WRITE(numout,*)' Initial porosity of ridges rn_por_rdg = ', rn_por_rdg 983 WRITE(numout,*)' Switch for part. function (0) linear (1) exponential nn_partfun = ', nn_partfun 971 WRITE(numout,*) ' lim_itd_me_init : ice parameters for mechanical ice redistribution ' 972 WRITE(numout,*) ' ~~~~~~~~~~~~~~~' 973 WRITE(numout,*) ' Namelist namiceitdme :' 974 WRITE(numout,*) ' Fraction of shear energy contributing to ridging rn_cs = ', rn_cs 975 WRITE(numout,*) ' Fraction of snow volume conserved during ridging rn_fsnowrdg = ', rn_fsnowrdg 976 WRITE(numout,*) ' Fraction of snow volume conserved during ridging rn_fsnowrft = ', rn_fsnowrft 977 WRITE(numout,*) ' Fraction of total ice coverage contributing to ridging rn_gstar = ', rn_gstar 978 WRITE(numout,*) ' Equivalent to G* for an exponential part function rn_astar = ', rn_astar 979 WRITE(numout,*) ' Quantity playing a role in max ridged ice thickness rn_hstar = ', rn_hstar 980 WRITE(numout,*) ' Rafting of ice sheets or not ln_rafting = ', ln_rafting 981 WRITE(numout,*) ' Parmeter thickness (threshold between ridge-raft) rn_hraft = ', rn_hraft 982 WRITE(numout,*) ' Rafting hyperbolic tangent coefficient rn_craft = ', rn_craft 983 WRITE(numout,*) ' Initial porosity of ridges rn_por_rdg = ', rn_por_rdg 984 WRITE(numout,*) ' Switch for part. function (0) linear (1) exponential nn_partfun = ', nn_partfun 984 985 ENDIF 985 986 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r7278 r7280 621 621 IF(lwp) THEN 622 622 WRITE(numout,*) 623 WRITE(numout,*) 'lim_thd : Ice Thermodynamics'624 WRITE(numout,*) '~~~~~~~ '623 WRITE(numout,*) 'lim_thd_init : Ice Thermodynamics initialization' 624 WRITE(numout,*) '~~~~~~~~~~~~' 625 625 ENDIF 626 626 ! … … 634 634 IF(lwm) WRITE ( numoni, namicethd ) 635 635 ! 636 IF ( ( jpl > 1 ) .AND. ( nn_monocat == 1 ) ) THEN637 nn_monocat = 0638 IF(lwp) WRITE(numout, *) ' nn_monocat must be 0 in multi-category case '639 ENDIF640 641 !642 636 IF(lwp) THEN ! control print 643 WRITE(numout,*)644 637 WRITE(numout,*)' Namelist of ice parameters for ice thermodynamic computation ' 645 638 WRITE(numout,*)' ice thick. for lateral accretion rn_hnewice = ', rn_hnewice … … 659 652 WRITE(numout,*)' iterate the surface non-solar flux (T) or not (F) ln_it_qnsice = ', ln_it_qnsice 660 653 ENDIF 654 IF( jpl > 1 .AND. nn_monocat == 1 ) THEN 655 nn_monocat = 0 656 IF(lwp) WRITE(numout,*) 657 IF(lwp) WRITE(numout,*) ' nn_monocat forced to 0 as jpl>1, i.e. multi-category case is chosen' 658 ENDIF 661 659 ! 662 660 END SUBROUTINE lim_thd_init -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90
r7278 r7280 144 144 WRITE(numout,*) 'lim_thd_sal_init : Ice parameters for salinity ' 145 145 WRITE(numout,*) '~~~~~~~~~~~~~~~~' 146 WRITE(numout,*) ' switch for salinity nn_icesal = ', nn_icesal 147 WRITE(numout,*) ' bulk salinity value if nn_icesal = 1 = ', rn_icesal 148 WRITE(numout,*) ' restoring salinity for GD = ', rn_sal_gd 149 WRITE(numout,*) ' restoring time for GD = ', rn_time_gd 150 WRITE(numout,*) ' restoring salinity for flushing = ', rn_sal_fl 151 WRITE(numout,*) ' restoring time for flushing = ', rn_time_fl 152 WRITE(numout,*) ' Maximum tolerated ice salinity = ', rn_simax 153 WRITE(numout,*) ' Minimum tolerated ice salinity = ', rn_simin 146 WRITE(numout,*) ' Namelist namicesal :' 147 WRITE(numout,*) ' switch for salinity nn_icesal = ', nn_icesal 148 WRITE(numout,*) ' bulk salinity value if nn_icesal = 1 = ', rn_icesal 149 WRITE(numout,*) ' restoring salinity for GD = ', rn_sal_gd 150 WRITE(numout,*) ' restoring time for GD = ', rn_time_gd 151 WRITE(numout,*) ' restoring salinity for flushing = ', rn_sal_fl 152 WRITE(numout,*) ' restoring time for flushing = ', rn_time_fl 153 WRITE(numout,*) ' Maximum tolerated ice salinity = ', rn_simax 154 WRITE(numout,*) ' Minimum tolerated ice salinity = ', rn_simin 154 155 ENDIF 155 156 !
Note: See TracChangeset
for help on using the changeset viewer.