Changeset 6403 for trunk/NEMOGCM
- Timestamp:
- 2016-03-25T17:24:35+01:00 (8 years ago)
- Location:
- trunk/NEMOGCM
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref
r5429 r6403 21 21 cn_icerst_outdir = "." ! directory in which to write output ice restarts 22 22 ln_limdyn = .true. ! ice dynamics (T) or thermodynamics only (F) 23 rn_amax = 0.999 ! maximum tolerated ice concentration 23 rn_amax_n = 0.999 ! maximum tolerated ice concentration (NH) 24 rn_amax_s = 0.999 ! maximum tolerated ice concentration (SH) 24 25 ln_limdiahsb = .false. ! check the heat and salt budgets (T) or not (F) 25 26 ln_limdiaout = .true. ! output the heat and salt budgets (T) or not (F) -
trunk/NEMOGCM/CONFIG/SHARED/namelist_top_ref
r6140 r6403 68 68 rn_ahtrc_0 = 2000. ! lateral eddy diffusivity (lap. operator) [m2/s] 69 69 rn_bhtrc_0 = 1.e+12 ! lateral eddy diffusivity (bilap. operator) [m4/s] 70 ! 71 rn_fact_lap = 1. ! enhanced zonal eddy diffusivity 70 72 / 71 73 !----------------------------------------------------------------------- -
trunk/NEMOGCM/CONFIG/cfg.txt
r6140 r6403 6 6 GYRE_BFM OPA_SRC TOP_SRC 7 7 AMM12 OPA_SRC 8 ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC9 8 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC 10 9 ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 11 10 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 12 11 GYRE OPA_SRC 12 ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC -
trunk/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r5341 r6403 301 301 302 302 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ftr_ice !: transmitted solar radiation under ice 303 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rn_amax_2d !: maximum ice concentration 2d array 303 304 304 305 !!-------------------------------------------------------------------------- … … 378 379 LOGICAL , PUBLIC :: ln_limdyn !: flag for ice dynamics (T) or not (F) 379 380 LOGICAL , PUBLIC :: ln_icectl !: flag for sea-ice points output (T) or not (F) 380 REAL(wp) , PUBLIC :: rn_amax !: maximum ice concentration 381 REAL(wp) , PUBLIC :: rn_amax_n !: maximum ice concentration Northern hemisphere 382 REAL(wp) , PUBLIC :: rn_amax_s !: maximum ice concentration Southern hemisphere 381 383 INTEGER , PUBLIC :: iiceprt !: debug i-point 382 384 INTEGER , PUBLIC :: jiceprt !: debug j-point … … 438 440 & afx_tot(jpi,jpj) , afx_thd(jpi,jpj), afx_dyn(jpi,jpj) , & 439 441 & fhtur (jpi,jpj) , ftr_ice(jpi,jpj,jpl), qlead (jpi,jpj) , & 442 & rn_amax_2d(jpi,jpj), & 440 443 & sfx_res(jpi,jpj) , sfx_bri(jpi,jpj) , sfx_dyn(jpi,jpj) , & 441 444 & sfx_bog(jpi,jpj) , sfx_bom(jpi,jpj) , sfx_sum(jpi,jpj) , sfx_sni(jpi,jpj) , sfx_opw(jpi,jpj) , & -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limcons.F90
r5836 r6403 256 256 ENDIF 257 257 IF ( zvmin < -epsi10 ) WRITE(numout,*) 'violation v_i<0 [m] (',cd_routine,') = ',zvmin 258 IF ( zamax > rn_amax+epsi10 .AND. cd_routine /= 'limtrp' .AND. cd_routine /= 'limitd_me' ) THEN 258 IF ( zamax > MAX( rn_amax_n, rn_amax_s ) + epsi10 .AND. & 259 & cd_routine /= 'limtrp' .AND. cd_routine /= 'limitd_me' ) THEN 259 260 WRITE(numout,*) 'violation a_i>amax (',cd_routine,') = ',zamax 260 261 ENDIF -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r5202 r6403 297 297 END DO 298 298 299 CALL tab_2d_1d( nbpac, qlead_1d (1:nbpac) , qlead , jpi, jpj, npac(1:nbpac) ) 300 CALL tab_2d_1d( nbpac, t_bo_1d (1:nbpac) , t_bo , jpi, jpj, npac(1:nbpac) ) 301 CALL tab_2d_1d( nbpac, sfx_opw_1d(1:nbpac) , sfx_opw, jpi, jpj, npac(1:nbpac) ) 302 CALL tab_2d_1d( nbpac, wfx_opw_1d(1:nbpac) , wfx_opw, jpi, jpj, npac(1:nbpac) ) 303 CALL tab_2d_1d( nbpac, hicol_1d (1:nbpac) , hicol , jpi, jpj, npac(1:nbpac) ) 304 CALL tab_2d_1d( nbpac, zvrel_1d (1:nbpac) , zvrel , jpi, jpj, npac(1:nbpac) ) 305 306 CALL tab_2d_1d( nbpac, hfx_thd_1d(1:nbpac) , hfx_thd, jpi, jpj, npac(1:nbpac) ) 307 CALL tab_2d_1d( nbpac, hfx_opw_1d(1:nbpac) , hfx_opw, jpi, jpj, npac(1:nbpac) ) 299 CALL tab_2d_1d( nbpac, qlead_1d (1:nbpac) , qlead , jpi, jpj, npac(1:nbpac) ) 300 CALL tab_2d_1d( nbpac, t_bo_1d (1:nbpac) , t_bo , jpi, jpj, npac(1:nbpac) ) 301 CALL tab_2d_1d( nbpac, sfx_opw_1d(1:nbpac) , sfx_opw , jpi, jpj, npac(1:nbpac) ) 302 CALL tab_2d_1d( nbpac, wfx_opw_1d(1:nbpac) , wfx_opw , jpi, jpj, npac(1:nbpac) ) 303 CALL tab_2d_1d( nbpac, hicol_1d (1:nbpac) , hicol , jpi, jpj, npac(1:nbpac) ) 304 CALL tab_2d_1d( nbpac, zvrel_1d (1:nbpac) , zvrel , jpi, jpj, npac(1:nbpac) ) 305 306 CALL tab_2d_1d( nbpac, hfx_thd_1d(1:nbpac) , hfx_thd , jpi, jpj, npac(1:nbpac) ) 307 CALL tab_2d_1d( nbpac, hfx_opw_1d(1:nbpac) , hfx_opw , jpi, jpj, npac(1:nbpac) ) 308 CALL tab_2d_1d( nbpac, rn_amax_1d(1:nbpac) , rn_amax_2d, jpi, jpj, npac(1:nbpac) ) 308 309 309 310 !------------------------------------------------------------------------------! … … 409 410 ! we keep the excessive volume in memory and attribute it later to bottom accretion 410 411 DO ji = 1, nbpac 411 IF ( za_newice(ji) > ( rn_amax - zat_i_1d(ji) ) ) THEN412 zda_res(ji) = za_newice(ji) - ( rn_amax - zat_i_1d(ji) )412 IF ( za_newice(ji) > ( rn_amax_1d(ji) - zat_i_1d(ji) ) ) THEN 413 zda_res(ji) = za_newice(ji) - ( rn_amax_1d(ji) - zat_i_1d(ji) ) 413 414 zdv_res(ji) = zda_res (ji) * zh_newice(ji) 414 415 za_newice(ji) = za_newice(ji) - zda_res (ji) -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r5836 r6403 422 422 DO jj = 1, jpj 423 423 DO ji = 1, jpi 424 a_i(ji,jj,1) = MIN( a_i(ji,jj,1), rn_amax )424 a_i(ji,jj,1) = MIN( a_i(ji,jj,1), rn_amax_2d(ji,jj) ) 425 425 END DO 426 426 END DO -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90
r5836 r6403 80 80 DO jj = 1, jpj 81 81 DO ji = 1, jpi 82 IF( at_i(ji,jj) > rn_amax .AND. a_i(ji,jj,jl) > 0._wp ) THEN83 a_i (ji,jj,jl) = a_i (ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax / at_i(ji,jj) ) )84 oa_i(ji,jj,jl) = oa_i(ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax / at_i(ji,jj) ) )82 IF( at_i(ji,jj) > rn_amax_2d(ji,jj) .AND. a_i(ji,jj,jl) > 0._wp ) THEN 83 a_i (ji,jj,jl) = a_i (ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax_2d(ji,jj) / at_i(ji,jj) ) ) 84 oa_i(ji,jj,jl) = oa_i(ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax_2d(ji,jj) / at_i(ji,jj) ) ) 85 85 ENDIF 86 86 END DO -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90
r5836 r6403 94 94 DO jj = 1, jpj 95 95 DO ji = 1, jpi 96 IF( at_i(ji,jj) > rn_amax .AND. a_i(ji,jj,jl) > 0._wp ) THEN97 a_i (ji,jj,jl) = a_i (ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax / at_i(ji,jj) ) )98 oa_i(ji,jj,jl) = oa_i(ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax / at_i(ji,jj) ) )96 IF( at_i(ji,jj) > rn_amax_2d(ji,jj) .AND. a_i(ji,jj,jl) > 0._wp ) THEN 97 a_i (ji,jj,jl) = a_i (ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax_2d(ji,jj) / at_i(ji,jj) ) ) 98 oa_i(ji,jj,jl) = oa_i(ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax_2d(ji,jj) / at_i(ji,jj) ) ) 99 99 ENDIF 100 100 END DO -
trunk/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r5407 r6403 51 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hfx_dif_1d 52 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hfx_opw_1d 53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: rn_amax_1d 53 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hfx_snw_1d 54 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hfx_err_1d … … 144 145 & hfx_sum_1d(jpij) , hfx_bom_1d(jpij) ,hfx_bog_1d(jpij) , & 145 146 & hfx_dif_1d(jpij) , hfx_opw_1d(jpij) , & 147 & rn_amax_1d(jpij) , & 146 148 & hfx_thd_1d(jpij) , hfx_spr_1d(jpij) , & 147 149 & hfx_snw_1d(jpij) , hfx_sub_1d(jpij) , hfx_err_1d(jpij) , & -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r6140 r6403 104 104 INTEGER, INTENT(in) :: kblk ! type of bulk (=3 CLIO, =4 CORE, =5 COUPLED) 105 105 !! 106 INTEGER :: jl ! dummy loop index106 INTEGER :: jl ! dummy loop index 107 107 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_os, zalb_cs ! ice albedo under overcast/clear sky 108 108 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_ice ! mean ice albedo (for coupled) … … 260 260 !! ** purpose : Allocate all the dynamic arrays of the LIM-3 modules 261 261 !!---------------------------------------------------------------------- 262 INTEGER :: ierr262 INTEGER :: ji, jj, ierr 263 263 !!---------------------------------------------------------------------- 264 264 IF(lwp) WRITE(numout,*) … … 317 317 tn_ice(:,:,:) = t_su(:,:,:) ! initialisation of surface temp for coupled simu 318 318 ! 319 DO jj = 1, jpj 320 DO ji = 1, jpi 321 IF( gphit(ji,jj) > 0._wp ) THEN ; rn_amax_2d(ji,jj) = rn_amax_n ! NH 322 ELSE ; rn_amax_2d(ji,jj) = rn_amax_s ! SH 323 ENDIF 324 ENDDO 325 ENDDO 326 ! 319 327 nstart = numit + nn_fsbc 320 328 nitrun = nitend - nit000 + 1 … … 339 347 INTEGER :: ios ! Local integer output status for namelist read 340 348 NAMELIST/namicerun/ jpl, nlay_i, nlay_s, cn_icerst_in, cn_icerst_indir, cn_icerst_out, cn_icerst_outdir, & 341 & ln_limdyn, rn_amax , ln_limdiahsb, ln_limdiaout, ln_icectl, iiceprt, jiceprt349 & ln_limdyn, rn_amax_n, rn_amax_s, ln_limdiahsb, ln_limdiaout, ln_icectl, iiceprt, jiceprt 342 350 !!------------------------------------------------------------------- 343 351 ! … … 359 367 WRITE(numout,*) ' number of snow layers = ', nlay_s 360 368 WRITE(numout,*) ' switch for ice dynamics (1) or not (0) ln_limdyn = ', ln_limdyn 361 WRITE(numout,*) ' maximum ice concentration = ', rn_amax 369 WRITE(numout,*) ' maximum ice concentration for NH = ', rn_amax_n 370 WRITE(numout,*) ' maximum ice concentration for SH = ', rn_amax_s 362 371 WRITE(numout,*) ' Diagnose heat/salt budget or not ln_limdiahsb = ', ln_limdiahsb 363 372 WRITE(numout,*) ' Output heat/salt budget or not ln_limdiaout = ', ln_limdiaout -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r6140 r6403 11 11 !! 3.2 ! 2009-04 (G. Madec & NEMO team) 12 12 !! 3.6 ! 2012-05 (C. Rousset) store attenuation coef for use in ice model 13 !! 3.6 ! 2015-12 (O. Aumont, J. Jouanno, C. Ethe) use vertical profile of chlorophyll 13 14 !! 3.7 ! 2015-11 (G. Madec, A. Coward) remove optimisation for fix volume 14 15 !!---------------------------------------------------------------------- … … 100 101 !! Reference : Jerlov, N. G., 1968 Optical Oceanography, Elsevier, 194pp. 101 102 !! Lengaigne et al. 2007, Clim. Dyn., V28, 5, 503-516. 103 !! Morel, A. et Berthon, JF, 1989, Limnol Oceanogr 34(8), 1545-1562 102 104 !!---------------------------------------------------------------------- 103 105 INTEGER, INTENT(in) :: kt ! ocean time-step … … 109 111 REAL(wp) :: zzc0, zzc1, zzc2, zzc3 ! - - 110 112 REAL(wp) :: zz0 , zz1 ! - - 113 REAL(wp) :: zCb, zCmax, zze, zpsi, zpsimax, zdelpsi, zCtot, zCze 114 REAL(wp) :: zlogc, zlogc2, zlogc3 111 115 REAL(wp), POINTER, DIMENSION(:,:) :: zekb, zekg, zekr 112 116 REAL(wp), POINTER, DIMENSION(:,:,:) :: ze0, ze1, ze2, ze3, zea, ztrdt 113 REAL(wp), POINTER, DIMENSION(:,:,:) :: zetot 117 REAL(wp), POINTER, DIMENSION(:,:,:) :: zetot, zchl3d 114 118 !!---------------------------------------------------------------------- 115 119 ! … … 158 162 ! 159 163 CALL wrk_alloc( jpi,jpj, zekb, zekg, zekr ) 160 CALL wrk_alloc( jpi,jpj,jpk, ze0, ze1, ze2, ze3, zea )164 CALL wrk_alloc( jpi,jpj,jpk, ze0, ze1, ze2, ze3, zea, zchl3d ) 161 165 ! 162 166 IF( nqsr == np_RGBc ) THEN !* Variable Chlorophyll 163 167 CALL fld_read( kt, 1, sf_chl ) ! Read Chl data and provides it at the current time step 164 DO jj = 2, jpjm1 ! Separation in R-G-B depending of the surface Chl 165 DO ji = fs_2, fs_jpim1 166 zchl = MIN( 10. , MAX( 0.03, sf_chl(1)%fnow(ji,jj,1) ) ) 167 irgb = NINT( 41 + 20.*LOG10(zchl) + 1.e-15 ) 168 zekb(ji,jj) = rkrgb(1,irgb) 169 zekg(ji,jj) = rkrgb(2,irgb) 170 zekr(ji,jj) = rkrgb(3,irgb) 168 DO jk = 1, nksr + 1 169 DO jj = 2, jpjm1 ! Separation in R-G-B depending of the surface Chl 170 DO ji = fs_2, fs_jpim1 171 zchl = sf_chl(1)%fnow(ji,jj,1) 172 zCtot = 40.6 * zchl**0.459 173 zze = 568.2 * zCtot**(-0.746) 174 IF( zze > 102. ) zze = 200.0 * zCtot**(-0.293) 175 zpsi = gdepw_n(ji,jj,jk) / zze 176 ! 177 zlogc = LOG( zchl ) 178 zlogc2 = zlogc * zlogc 179 zlogc3 = zlogc * zlogc * zlogc 180 zCb = 0.768 + 0.087 * zlogc - 0.179 * zlogc2 - 0.025 * zlogc3 181 zCmax = 0.299 - 0.289 * zlogc + 0.579 * zlogc2 182 zpsimax = 0.6 - 0.640 * zlogc + 0.021 * zlogc2 + 0.115 * zlogc3 183 zdelpsi = 0.710 + 0.159 * zlogc + 0.021 * zlogc2 184 zCze = 1.12 * (zchl)**0.803 185 ! 186 zchl3d(ji,jj,jk) = zCze * ( zCb + zCmax * EXP( -( (zpsi - zpsimax) / zdelpsi )**2 ) ) 187 END DO 188 ! 171 189 END DO 172 190 END DO 173 191 ELSE !* constant chrlorophyll 174 zchl = 0.05 ! constant chlorophyll 175 ! ! Separation in R-G-B depending of the chlorophyll 176 irgb = NINT( 41 + 20.*LOG10( zchl ) + 1.e-15 ) 177 DO jj = 2, jpjm1 178 DO ji = fs_2, fs_jpim1 179 zekb(ji,jj) = rkrgb(1,irgb) 180 zekg(ji,jj) = rkrgb(2,irgb) 181 zekr(ji,jj) = rkrgb(3,irgb) 182 END DO 183 END DO 192 DO jk = 1, nksr + 1 193 zchl3d(:,:,jk) = 0.05 194 ENDDO 184 195 ENDIF 185 196 ! … … 195 206 END DO 196 207 ! 197 DO jk = 2, nksr+1 !* interior equi-partition in R-G-B 208 DO jk = 2, nksr+1 !* interior equi-partition in R-G-B depending of vertical profile of Chl 209 DO jj = 2, jpjm1 210 DO ji = fs_2, fs_jpim1 211 zchl = MIN( 10. , MAX( 0.03, zchl3d(ji,jj,jk) ) ) 212 irgb = NINT( 41 + 20.*LOG10(zchl) + 1.e-15 ) 213 zekb(ji,jj) = rkrgb(1,irgb) 214 zekg(ji,jj) = rkrgb(2,irgb) 215 zekr(ji,jj) = rkrgb(3,irgb) 216 END DO 217 END DO 218 198 219 DO jj = 2, jpjm1 199 220 DO ji = fs_2, fs_jpim1 … … 220 241 ! 221 242 CALL wrk_dealloc( jpi,jpj, zekb, zekg, zekr ) 222 CALL wrk_dealloc( jpi,jpj,jpk, ze0, ze1, ze2, ze3, zea )243 CALL wrk_dealloc( jpi,jpj,jpk, ze0, ze1, ze2, ze3, zea, zchl3d ) 223 244 ! 224 245 CASE( np_2BD ) !== 2-bands fluxes ==! -
trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcldf.F90
r6140 r6403 40 40 REAL(wp), PUBLIC :: rn_ahtrc_0 !: laplacian diffusivity coefficient for passive tracer [m2/s] 41 41 REAL(wp), PUBLIC :: rn_bhtrc_0 !: bilaplacian - -- - - [m4/s] 42 REAL(wp), PUBLIC :: rn_fact_lap !: Enhanced zonal diffusivity coefficent in the equatorial domain 42 43 ! 43 44 ! !!: ** lateral mixing namelist (nam_trcldf) ** … … 64 65 INTEGER, INTENT( in ) :: kt ! ocean time-step index 65 66 ! 66 INTEGER :: jn 67 INTEGER :: ji, jj, jk, jn 68 REAL(wp) :: zdep 67 69 CHARACTER (len=22) :: charout 68 70 REAL(wp), POINTER, DIMENSION(:,:,:) :: zahu, zahv … … 76 78 ztrtrd(:,:,:,:) = tra(:,:,:,:) 77 79 ENDIF 78 ! 79 ! !* set the lateral diffusivity coef. for passive tracer 80 ! !* set the lateral diffusivity coef. for passive tracer 80 81 CALL wrk_alloc( jpi,jpj,jpk, zahu, zahv ) 81 zahu(:,:,:) = rldf * ahtu(:,:,:) 82 zahu(:,:,:) = rldf * ahtu(:,:,:) 82 83 zahv(:,:,:) = rldf * ahtv(:,:,:) 83 84 ! !* Enhanced zonal diffusivity coefficent in the equatorial domain 85 DO jk= 1, jpk 86 DO jj = 1, jpj 87 DO ji = 1, jpi 88 IF( gdept_n(ji,jj,jk) > 200. .AND. gphit(ji,jj) < 5. .AND. gphit(ji,jj) > -5. ) THEN 89 zdep = MAX( gdept_n(ji,jj,jk) - 1000., 0. ) / 1000. 90 zahu(ji,jj,jk) = zahu(ji,jj,jk) * MAX( 1., rn_fact_lap * EXP( -zdep ) ) 91 ENDIF 92 END DO 93 END DO 94 END DO 95 ! 84 96 SELECT CASE ( nldf ) !* compute lateral mixing trend and add it to the general trend 85 97 ! … … 136 148 NAMELIST/namtrc_ldf/ ln_trcldf_lap, ln_trcldf_blp, & 137 149 & ln_trcldf_lev, ln_trcldf_hor, ln_trcldf_iso, ln_trcldf_triad, & 138 & rn_ahtrc_0 , rn_bhtrc_0 150 & rn_ahtrc_0 , rn_bhtrc_0, rn_fact_lap 139 151 !!---------------------------------------------------------------------- 140 152 ! … … 164 176 WRITE(numout,*) ' laplacian rn_ahtrc_0 = ', rn_ahtrc_0 165 177 WRITE(numout,*) ' bilaplacian rn_bhtrc_0 = ', rn_bhtrc_0 178 WRITE(numout,*) ' enhanced zonal diffusivity rn_fact_lap = ', rn_fact_lap 179 166 180 ENDIF 167 181 !
Note: See TracChangeset
for help on using the changeset viewer.