Changeset 4205
- Timestamp:
- 2013-11-14T18:02:06+01:00 (10 years ago)
- Location:
- branches/2013/dev_LOCEAN_2013/NEMOGCM
- Files:
-
- 1 deleted
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_LOCEAN_2013/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref
r4161 r4205 49 49 cw = 5.0e-03 ! drag coefficient for oceanic stress 50 50 angvg = 0.0 ! turning angle for oceanic stress 51 pstar = 4.0e+04 ! 1st bulk-rheology parameter51 pstar = 2.0e+04 ! 1st bulk-rheology parameter 52 52 c_rhg = 20.0 ! 2nd bulk-rhelogy parameter 53 53 etamn = 0.0e+07 ! minimun value for viscosity … … 58 58 telast =9600.0 ! timescale for elastic waves, SB, 720.0 59 59 alphaevp = 1.0 ! coefficient for the solution of internal ice stresses 60 hminrhg = 0.0 5 ! ice thickness (m) below which ice velocity equal ocean velocity60 hminrhg = 0.001 ! ice volume (a*h in m) below which ice velocity equal ocean velocity 61 61 / 62 62 !----------------------------------------------------------------------- -
branches/2013/dev_LOCEAN_2013/NEMOGCM/CONFIG/SHARED/namelist_ref
r4161 r4205 212 212 ! =1 use observed ice-cover , 213 213 ! =2 ice-model used ("key_lim3" or "key_lim2) 214 nn_ice_embd = 0! =0 levitating ice (no mass exchange, concentration/dilution effect)214 nn_ice_embd = 1 ! =0 levitating ice (no mass exchange, concentration/dilution effect) 215 215 ! =1 levitating ice with mass and salt exchange but no presure effect 216 216 ! =2 embedded sea-ice (full salt and mass exchanges and pressure) … … 225 225 ln_cdgw = .false. ! Neutral drag coefficient read from wave model (T => fill namsbc_wave) 226 226 ln_sdw = .false. ! Computation of 3D stokes drift (T => fill namsbc_wave) 227 cn_iceflx = 'linear' ! redistribution of solar input into ice categories during coupling ice/atm. 227 228 / 228 229 !----------------------------------------------------------------------- … … 283 284 ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data 284 285 rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) 285 rn_vfac = 0. ! multiplicative factor for ocean/ice velocity286 286 rn_efac = 1. ! multiplicative factor for evaporation (0. or 1.) 287 rn_vfac = 0. ! multiplicative factor for ocean/ice velocity 287 288 ! in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) 288 289 / … … 532 533 ! = 2, use tidal harmonic forcing data from files 533 534 ! = 3, use external data AND tidal harmonic forcing 534 nn_dyn3d = 0 ! boundary conditions for baroclinic velocities535 nn_dyn3d_dta = 0! = 0, bdy data are equal to the initial state536 ! = 1, bdy data are read in 'bdydata .nc' files537 nn_tra = 1 ! boundary conditions for T and S 535 nn_dyn3d = 1 ! boundary conditions for baroclinic velocities.....0=None/1=FRS 536 nn_dyn3d_dta = 1 ! = 0, bdy data are equal to the initial state 537 ! = 1, bdy data are read in 'bdydata .nc' files 538 nn_tra = 1 ! boundary conditions for T and S...................0=None/1=FRS 538 539 nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state 539 ! = 1, bdy data are read in 'bdydata .nc' files 540 ! = 1, bdy data are read in 'bdydata .nc' files 541 ! nn_ice_lim = 1 ! boundary conditions for ice.......................0=None/1=FRS 542 ! nn_ice_lim_dta = 1 ! = 0, bdy data are equal to the initial state 543 ! ! = 1, bdy data are read in 'bdydata .nc' files 544 540 545 nn_rimwidth = 10 ! width of the relaxation zone 541 546 ln_vol = .false. ! total volume correction (see nn_volctl parameter) … … 554 559 bn_tem = 'amm12_bdyT_tra' , 24 , 'votemper' , .true. , .false. , 'daily' , '' , '' 555 560 bn_sal = 'amm12_bdyT_tra' , 24 , 'vosaline' , .true. , .false. , 'daily' , '' , '' 561 ! bn_a_i = 'amm12_bdyT_ice' , 24 , 'ileadfra' , .true. , .false. , 'daily' , '' , '' 562 ! bn_ht_i = 'amm12_bdyT_ice' , 24 , 'iicethic' , .true. , .false. , 'daily' , '' , '' 563 ! bn_ht_s = 'amm12_bdyT_ice' , 24 , 'isnowthi' , .true. , .false. , 'daily' , '' , '' 556 564 cn_dir = 'bdydta/' 557 565 ln_full_vel = .false. -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r4161 r4205 396 396 LOGICAL , PUBLIC :: ln_limdyn !: flag for ice dynamics (T) or not (F) 397 397 LOGICAL , PUBLIC :: ln_nicep !: flag for sea-ice points output (T) or not (F) 398 REAL(wp) , PUBLIC :: hsndif !: computation of temp. in snow (0) or not (9999)399 REAL(wp) , PUBLIC :: hicdif !: computation of temp. in ice (0) or not (9999)400 398 REAL(wp) , PUBLIC :: cai !: atmospheric drag over sea ice 401 399 REAL(wp) , PUBLIC :: cao !: atmospheric drag over ocean 402 REAL(wp) , DIMENSION(2), PUBLIC :: acrit !: minimum fraction for leads in north and south hemisphere400 REAL(wp) , PUBLIC :: amax !: maximum ice concentration 403 401 ! 404 402 !!-------------------------------------------------------------------------- -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/iceini.F90
r4161 r4205 89 89 CALL lim_itd_ini ! ice thickness distribution initialization 90 90 ! 91 CALL lim_sbc_init ! ice surface boundary condition92 93 94 91 ! ! Initial sea-ice state 95 92 IF( .NOT.ln_rstart ) THEN ! start from rest … … 106 103 ENDIF 107 104 ! 105 CALL lim_sbc_init ! ice surface boundary condition 106 ! 108 107 fr_i(:,:) = at_i(:,:) ! initialisation of sea-ice fraction 108 tn_ice(:,:,:) = t_su(:,:,:) 109 109 ! 110 110 nstart = numit + nn_fsbc … … 248 248 END DO 249 249 ! 250 tn_ice(:,:,:) = t_su(:,:,:)251 250 ! 252 251 END SUBROUTINE lim_itd_ini -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r4166 r4205 35 35 36 36 PUBLIC lim_istate ! routine called by lim_init.F90 37 38 37 39 38 !! * Module variables -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r4161 r4205 123 123 124 124 REAL(wp) :: dtevp ! time step for subcycling 125 REAL(wp) :: dtotel, ecc2 125 REAL(wp) :: dtotel, ecc2, ecci ! square of yield ellipse eccenticity 126 126 REAL(wp) :: z0, zr, zcca, zccb ! temporary scalars 127 127 REAL(wp) :: zu_ice2, zv_ice1 ! … … 199 199 zc1(ji,jj) = tms(ji,jj) * ( rhosn * vt_s(ji,jj) + rhoic * vt_i(ji,jj) ) 200 200 #if defined key_lim3 201 zpresh(ji,jj) = tms(ji,jj) * strength(ji,jj) * 0.5_wp201 zpresh(ji,jj) = tms(ji,jj) * strength(ji,jj) 202 202 #endif 203 203 #if defined key_lim2 … … 325 325 !-ecc2: square of yield ellipse eccenticrity (reminder: must become a namelist parameter) 326 326 ecc2 = ecc * ecc 327 ecci = 1. / ecc2 327 328 328 329 !-Initialise stress tensor … … 425 426 !-Calculate stress tensor components zs1 and zs2 426 427 !-at centre of grid cells (see section 3.5 of CICE user's guide). 427 zs1(ji,jj) = ( zs1(ji,jj) & 428 & - dtotel*( ( 1.0 - alphaevp) * zs1(ji,jj) + & 429 & ( delta / deltat(ji,jj) - zdd(ji,jj) / deltat(ji,jj) ) & 430 * zpresh(ji,jj) ) ) & 431 & / ( 1.0 + alphaevp * dtotel ) 432 433 zs2(ji,jj) = ( zs2(ji,jj) & 434 & - dtotel*((1.0-alphaevp)*ecc2*zs2(ji,jj) - & 435 zdt(ji,jj)/deltat(ji,jj)*zpresh(ji,jj)) ) & 436 & / ( 1.0 + alphaevp*ecc2*dtotel ) 428 zs1(ji,jj) = ( zs1(ji,jj) - dtotel*( ( 1._wp - alphaevp) * zs1(ji,jj) + & 429 & ( delta / deltat(ji,jj) - zdd(ji,jj) / deltat(ji,jj) ) * zpresh(ji,jj) ) ) & 430 & / ( 1._wp + alphaevp * dtotel ) 431 432 zs2(ji,jj) = ( zs2(ji,jj) - dtotel * ( ( 1._wp - alphaevp ) * ecc2 * zs2(ji,jj) - & 433 zdt(ji,jj) / deltat(ji,jj) * zpresh(ji,jj) ) ) & 434 & / ( 1._wp + alphaevp * ecc2 * dtotel ) 435 436 ! new formulation from S. Bouillon to help stabilizing the code (no need of alphaevp) 437 !zs1(ji,jj) = ( zs1(ji,jj) + dtotel * ( ( zdd(ji,jj) / deltat(ji,jj) - delta / deltat(ji,jj) ) & 438 ! & * zpresh(ji,jj) ) ) / ( 1._wp + dtotel ) 439 !zs2(ji,jj) = ( zs2(ji,jj) + dtotel * ( ecci * zdt(ji,jj) / deltat(ji,jj) * zpresh(ji,jj) ) ) & 440 ! & / ( 1._wp + dtotel ) 437 441 438 442 END DO … … 468 472 469 473 !-Calculate stress tensor component zs12 at corners (see section 3.5 of CICE user's guide). 470 zs12(ji,jj) = ( zs12(ji,jj) & 471 & - dtotel*( (1.0-alphaevp)*ecc2*zs12(ji,jj) - zds(ji,jj) / & 472 & ( 2.0*deltac(ji,jj) ) * zpreshc(ji,jj))) & 473 & / ( 1.0 + alphaevp*ecc2*dtotel ) 474 zs12(ji,jj) = ( zs12(ji,jj) - dtotel * ( (1.0-alphaevp) * ecc2 * zs12(ji,jj) - zds(ji,jj) / & 475 & ( 2._wp * deltac(ji,jj) ) * zpreshc(ji,jj) ) ) & 476 & / ( 1._wp + alphaevp * ecc2 * dtotel ) 477 478 ! new formulation from S. Bouillon to help stabilizing the code (no need of alphaevp) 479 !zs12(ji,jj) = ( zs12(ji,jj) + dtotel * & 480 ! & ( ecci * zds(ji,jj) / ( 2._wp * deltac(ji,jj) ) * zpreshc(ji,jj) ) ) & 481 ! & / ( 1.0 + dtotel ) 474 482 475 483 END DO ! ji -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/limrst.F90
r4161 r4205 17 17 !!---------------------------------------------------------------------- 18 18 USE ice ! sea-ice variables 19 USE oce , ONLY : snwice_mass, snwice_mass_b 19 20 USE par_ice ! sea-ice parameters 20 21 USE dom_oce ! ocean domain … … 159 160 END DO 160 161 161 CALL iom_rstput( iter, nitrst, numriw, 'u_ice' , u_ice )162 CALL iom_rstput( iter, nitrst, numriw, 'v_ice' , v_ice )163 CALL iom_rstput( iter, nitrst, numriw, 'fsbbq' , fsbbq )164 CALL iom_rstput( iter, nitrst, numriw, ' iatte' , iatte ) ! clem modif165 CALL iom_rstput( iter, nitrst, numriw, ' oatte' , oatte ) ! clem modif166 CALL iom_rstput( iter, nitrst, numriw, 'stress1 _i' , stress1_i)167 CALL iom_rstput( iter, nitrst, numriw, 's tress2_i' , stress2_i )168 CALL iom_rstput( iter, nitrst, numriw, 's tress12_i', stress12_i )162 CALL iom_rstput( iter, nitrst, numriw, 'u_ice' , u_ice ) 163 CALL iom_rstput( iter, nitrst, numriw, 'v_ice' , v_ice ) 164 CALL iom_rstput( iter, nitrst, numriw, 'fsbbq' , fsbbq ) 165 CALL iom_rstput( iter, nitrst, numriw, 'stress1_i' , stress1_i ) 166 CALL iom_rstput( iter, nitrst, numriw, 'stress2_i' , stress2_i ) 167 CALL iom_rstput( iter, nitrst, numriw, 'stress12_i' , stress12_i ) 168 CALL iom_rstput( iter, nitrst, numriw, 'snwice_mass' , snwice_mass ) !clem modif 169 CALL iom_rstput( iter, nitrst, numriw, 'snwice_mass_b', snwice_mass_b ) !clem modif 169 170 170 171 DO jl = 1, jpl … … 371 372 CALL iom_get( numrir, jpdom_autoglo, znam , z2d ) 372 373 t_su(:,:,jl) = z2d(:,:) 373 tn_ice (:,:,:) = t_su (:,:,:) 374 END DO 375 376 DO jl = 1, jpl 377 CALL lbc_lnk( smv_i(:,:,jl) , 'T' , 1. ) 378 CALL lbc_lnk( v_i (:,:,jl) , 'T' , 1. ) 379 CALL lbc_lnk( a_i (:,:,jl) , 'T' , 1. ) 380 END DO 381 382 ! we first with bulk ice salinity 383 DO jl = 1, jpl 384 DO jj = 1, jpj 385 DO ji = 1, jpi 386 zindb = MAX( 0.0 , SIGN( 1.0 , v_i(ji,jj,jl) - 1.0e-4 ) ) 387 sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX(v_i(ji,jj,jl),1.0e-6) * zindb 388 ht_i(ji,jj,jl) = v_i(ji,jj,jl) / MAX(a_i(ji,jj,jl),1.0e-6) * zindb 389 END DO 390 END DO 391 END DO 392 393 DO jk = 1, nlay_i 394 s_i(:,:,jk,:) = sm_i(:,:,:) 395 END DO 396 397 IF( num_sal == 2 ) THEN ! Salinity profile 398 DO jl = 1, jpl 399 DO jk = 1, nlay_i 400 DO jj = 1, jpj 401 DO ji = 1, jpi 402 zs_inf = sm_i(ji,jj,jl) 403 z_slope_s = 2._wp * sm_i(ji,jj,jl) / MAX( 0.01_wp , ht_i(ji,jj,jl) ) 404 !- slope of the salinity profile 405 zs_zero(jk) = z_slope_s * ( REAL(jk,wp) - 0.5_wp ) * ht_i(ji,jj,jl) / REAL(nlay_i,wp) 406 zsmax = 4.5_wp 407 zsmin = 3.5_wp 408 IF( sm_i(ji,jj,jl) < zsmin ) THEN 409 zalpha = 1._wp 410 ELSEIF( sm_i(ji,jj,jl) < zsmax ) THEN 411 zalpha = sm_i(ji,jj,jl) / ( zsmin - zsmax ) + zsmax / ( zsmax - zsmin ) 412 ELSE 413 zalpha = 0._wp 414 ENDIF 415 s_i(ji,jj,jk,jl) = zalpha * zs_zero(jk) + ( 1._wp - zalpha ) * zs_inf 416 END DO 417 END DO 418 END DO 419 END DO 420 ENDIF 374 END DO 421 375 422 376 DO jl = 1, jpl … … 440 394 CALL iom_get( numrir, jpdom_autoglo, 'v_ice' , v_ice ) 441 395 CALL iom_get( numrir, jpdom_autoglo, 'fsbbq' , fsbbq ) 442 CALL iom_get( numrir, jpdom_autoglo, 'iatte' , iatte ) ! clem modif443 CALL iom_get( numrir, jpdom_autoglo, 'oatte' , oatte ) ! clem modif444 396 CALL iom_get( numrir, jpdom_autoglo, 'stress1_i' , stress1_i ) 445 397 CALL iom_get( numrir, jpdom_autoglo, 'stress2_i' , stress2_i ) 446 398 CALL iom_get( numrir, jpdom_autoglo, 'stress12_i', stress12_i ) 399 CALL iom_get( numrir, jpdom_autoglo, 'snwice_mass' , snwice_mass ) !clem modif 400 CALL iom_get( numrir, jpdom_autoglo, 'snwice_mass_b', snwice_mass_b ) !clem modif 447 401 448 402 DO jl = 1, jpl … … 568 522 END DO 569 523 ! 570 ! clem CALL iom_close( numrir )524 !CALL iom_close( numrir ) !clem: closed in sbcice_lim.F90 571 525 ! 572 526 CALL wrk_dealloc( nlay_i, zs_zero ) -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r4161 r4205 38 38 USE cpl_oasis3, ONLY : lk_cpl 39 39 USE traqsr ! clem: add penetration of solar flux into the calculation of heat budget 40 USE oce, ONLY : sshn, sshb, snwice_mass, snwice_mass_b, snwice_fmass, sshu_b, sshv_b, sshu_n, sshv_n, sshf_n40 USE oce, ONLY : iatte, oatte, sshn, sshb, snwice_mass, snwice_mass_b, snwice_fmass, sshu_b, sshv_b, sshu_n, sshv_n, sshf_n 41 41 USE dom_ice, ONLY : tms 42 42 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) … … 249 249 ! mass flux at the ocean/ice interface (sea ice fraction) 250 250 zemp_snw = rdm_snw(ji,jj) * r1_rdtice ! snow melting = pure water that enters the ocean 251 zfmm = rdm_ice(ji,jj) * r1_rdtice ! Freezing minus me sting251 zfmm = rdm_ice(ji,jj) * r1_rdtice ! Freezing minus melting 252 252 253 253 fmmflx(ji,jj) = zfmm ! F/M mass flux save at least for biogeochemical model … … 416 416 ENDIF 417 417 ! clem modif 418 iatte(:,:) = 1._wp 419 oatte(:,:) = 1._wp 420 ! 421 ! ! embedded sea ice 422 IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 423 snwice_mass (:,:) = tms(:,:) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) ) 424 snwice_mass_b(:,:) = snwice_mass(:,:) 425 ELSE 426 snwice_mass (:,:) = 0.0_wp ! no mass exchanges 427 snwice_mass_b(:,:) = 0.0_wp ! no mass exchanges 428 ENDIF 429 IF( nn_ice_embd == 2 .AND. & ! full embedment (case 2) & no restart 430 & .NOT. ln_rstart ) THEN ! deplete the initial ssh below sea-ice area 431 sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 432 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 433 ! 434 ! Note: Changed the initial values of sshb and sshn=> need to recompute ssh[u,v,f]_[b,n] 435 ! which were previously set in domvvl 436 IF ( lk_vvl ) THEN ! Is this necessary? embd 2 should be restricted to vvl only??? 437 DO jj = 1, jpjm1 438 DO ji = 1, jpim1 ! caution: use of Vector Opt. not possible 439 zcoefu = 0.5 * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) ) 440 zcoefv = 0.5 * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) ) 441 zcoeff = 0.25 * umask(ji,jj,1) * umask(ji,jj+1,1) 442 sshu_b(ji,jj) = zcoefu * ( e1t(ji ,jj) * e2t(ji ,jj) * sshb(ji ,jj) & 443 & + e1t(ji+1,jj) * e2t(ji+1,jj) * sshb(ji+1,jj) ) 444 sshv_b(ji,jj) = zcoefv * ( e1t(ji,jj ) * e2t(ji,jj ) * sshb(ji,jj ) & 445 & + e1t(ji,jj+1) * e2t(ji,jj+1) * sshb(ji,jj+1) ) 446 sshu_n(ji,jj) = zcoefu * ( e1t(ji ,jj) * e2t(ji ,jj) * sshn(ji ,jj) & 447 & + e1t(ji+1,jj) * e2t(ji+1,jj) * sshn(ji+1,jj) ) 448 sshv_n(ji,jj) = zcoefv * ( e1t(ji,jj ) * e2t(ji,jj ) * sshn(ji,jj ) & 449 & + e1t(ji,jj+1) * e2t(ji,jj+1) * sshn(ji,jj+1) ) 418 IF( .NOT. ln_rstart ) THEN 419 iatte(:,:) = 1._wp 420 oatte(:,:) = 1._wp 421 ENDIF 422 ! 423 ! clem: snwice_mass in the restart file now 424 IF( .NOT. ln_rstart ) THEN 425 ! ! embedded sea ice 426 IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 427 snwice_mass (:,:) = tms(:,:) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) ) 428 snwice_mass_b(:,:) = snwice_mass(:,:) 429 ELSE 430 snwice_mass (:,:) = 0.0_wp ! no mass exchanges 431 snwice_mass_b(:,:) = 0.0_wp ! no mass exchanges 432 ENDIF 433 IF( nn_ice_embd == 2 ) THEN ! full embedment (case 2) deplete the initial ssh below sea-ice area 434 sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 435 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 436 ! 437 ! Note: Changed the initial values of sshb and sshn=> need to recompute ssh[u,v,f]_[b,n] 438 ! which were previously set in domvvl 439 IF ( lk_vvl ) THEN ! Is this necessary? embd 2 should be restricted to vvl only??? 440 DO jj = 1, jpjm1 441 DO ji = 1, jpim1 ! caution: use of Vector Opt. not possible 442 zcoefu = 0.5 * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) ) 443 zcoefv = 0.5 * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) ) 444 zcoeff = 0.25 * umask(ji,jj,1) * umask(ji,jj+1,1) 445 sshu_b(ji,jj) = zcoefu * ( e1t(ji ,jj) * e2t(ji ,jj) * sshb(ji ,jj) & 446 & + e1t(ji+1,jj) * e2t(ji+1,jj) * sshb(ji+1,jj) ) 447 sshv_b(ji,jj) = zcoefv * ( e1t(ji,jj ) * e2t(ji,jj ) * sshb(ji,jj ) & 448 & + e1t(ji,jj+1) * e2t(ji,jj+1) * sshb(ji,jj+1) ) 449 sshu_n(ji,jj) = zcoefu * ( e1t(ji ,jj) * e2t(ji ,jj) * sshn(ji ,jj) & 450 & + e1t(ji+1,jj) * e2t(ji+1,jj) * sshn(ji+1,jj) ) 451 sshv_n(ji,jj) = zcoefv * ( e1t(ji,jj ) * e2t(ji,jj ) * sshn(ji,jj ) & 452 & + e1t(ji,jj+1) * e2t(ji,jj+1) * sshn(ji,jj+1) ) 453 END DO 450 454 END DO 451 END DO452 CALL lbc_lnk( sshu_b, 'U', 1. ) ; CALL lbc_lnk( sshu_n, 'U', 1. )453 CALL lbc_lnk( sshv_b, 'V', 1. ) ; CALL lbc_lnk( sshv_n, 'V', 1. )454 DO jj = 1, jpjm1455 DO ji = 1, jpim1 ! NO Vector Opt.456 sshf_n(ji,jj) = 0.5 * umask(ji,jj,1) * umask(ji,jj+1,1)&457 & / ( e1f(ji,jj ) * e2f(ji,jj ) )&458 & * ( e1u(ji,jj ) * e2u(ji,jj ) * sshu_n(ji,jj ) &459 & + e1u(ji,jj+1) * e2u(ji,jj+1) * sshu_n(ji,jj+1) )455 CALL lbc_lnk( sshu_b, 'U', 1. ) ; CALL lbc_lnk( sshu_n, 'U', 1. ) 456 CALL lbc_lnk( sshv_b, 'V', 1. ) ; CALL lbc_lnk( sshv_n, 'V', 1. ) 457 DO jj = 1, jpjm1 458 DO ji = 1, jpim1 ! NO Vector Opt. 459 sshf_n(ji,jj) = 0.5 * umask(ji,jj,1) * umask(ji,jj+1,1) & 460 & / ( e1f(ji,jj ) * e2f(ji,jj ) ) & 461 & * ( e1u(ji,jj ) * e2u(ji,jj ) * sshu_n(ji,jj ) & 462 & + e1u(ji,jj+1) * e2u(ji,jj+1) * sshu_n(ji,jj+1) ) 463 END DO 460 464 END DO 461 END DO462 CALL lbc_lnk( sshf_n, 'F', 1. )463 464 ENDIF 465 CALL lbc_lnk( sshf_n, 'F', 1. ) 466 ENDIF 467 ENDIF 468 ENDIF ! .NOT. ln_rstart 465 469 ! 466 470 !!? IF( .NOT. ln_rstart ) THEN ! delete the initial ssh below sea-ice area -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r4161 r4205 22 22 USE phycst ! physical constants 23 23 USE dom_oce ! ocean space and time domain variables 24 USE oce , ONLY : iatte, oatte 24 25 USE ice ! LIM: sea-ice variables 25 26 USE par_ice ! LIM: sea-ice parameters … … 220 221 ! 221 222 ! Energy needed to bring ocean surface layer until its freezing (qcmif, limflx) 222 qcmif (ji,jj) = rau0 * rcp * fse3t (ji,jj,1) * ( t_bo(ji,jj) - (sst_m(ji,jj) + rt0) )223 qcmif (ji,jj) = rau0 * rcp * fse3t_m(ji,jj,1) * ( t_bo(ji,jj) - (sst_m(ji,jj) + rt0) ) 223 224 ! 224 225 ! oceanic heat flux (limthd_dh) -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r4161 r4205 656 656 DO ji = kideb , kiut 657 657 ! snow temperatures 658 IF (ht_s_b(ji).GT.0 ) &658 IF (ht_s_b(ji).GT.0._wp) & 659 659 t_s_b(ji,nlay_s) = (zindtbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) & 660 660 * t_i_b(ji,1))/zdiagbis(ji,nlay_s+1) & … … 692 692 DO ji = kideb , kiut 693 693 ztmelt_i = -tmut * s_i_b(ji,layer) + rtt 694 t_i_b(ji,layer) = MAX(MIN(t_i_b(ji,layer),ztmelt_i), 190.0)694 t_i_b(ji,layer) = MAX(MIN(t_i_b(ji,layer),ztmelt_i), 190._wp) 695 695 zerrit(ji) = MAX(zerrit(ji),ABS(t_i_b(ji,layer) - ztitemp(ji,layer))) 696 696 END DO -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r4161 r4205 74 74 REAL(wp) :: zindb , zindsn , zindic, zindh, zinda ! local scalar 75 75 REAL(wp) :: zusvosn, zusvoic, zbigval ! - - 76 REAL(wp) :: zcfl , zusnit , zrtt! - -76 REAL(wp) :: zcfl , zusnit ! - - 77 77 REAL(wp) :: ze , zsal , zage ! - - 78 78 ! … … 450 450 zusvosn = 1.0/MAX( v_s(ji,jj,jl) , epsi16 ) 451 451 zusvoic = 1.0/MAX( v_i(ji,jj,jl) , epsi16 ) 452 zrtt = 173.15 * rone453 452 zindsn = MAX( rzero, SIGN( rone, v_s(ji,jj,jl) - epsi10 ) ) 454 453 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi10 ) ) -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r4161 r4205 180 180 ht_s(ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * zindb 181 181 o_i(ji,jj,jl) = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * zindb 182 a_i(ji,jj,jl) = a_i (ji,jj,jl) * zindb ! clem correction183 182 END DO 184 183 END DO -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r4161 r4205 22 22 REAL(wp), PUBLIC :: hicmin !: (REMOVE) 23 23 REAL(wp), PUBLIC :: hiclim !: minimum ice thickness 24 REAL(wp), PUBLIC :: amax !: maximum lead fraction25 24 REAL(wp), PUBLIC :: sbeta !: numerical scheme for diffusion in ice (REMOVE) 26 25 REAL(wp), PUBLIC :: parlat !: (REMOVE) -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r4166 r4205 260 260 CALL ctl_warn( 'dia_hsb does not take open boundary fluxes into account' ) 261 261 ENDIF 262 263 262 ! 264 263 CALL dia_hsb_rst( nit000, 'READ' ) !* read or initialize all required files -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r4187 r4205 406 406 407 407 408 FUNCTION iom_varid ( kiomid, cdvar, kdimsz, ldstop )408 FUNCTION iom_varid ( kiomid, cdvar, kdimsz, kndims, ldstop ) 409 409 !!----------------------------------------------------------------------- 410 410 !! *** FUNCTION iom_varid *** … … 415 415 CHARACTER(len=*) , INTENT(in ) :: cdvar ! name of the variable 416 416 INTEGER, DIMENSION(:), INTENT( out), OPTIONAL :: kdimsz ! size of the dimensions 417 INTEGER, INTENT( out), OPTIONAL :: kndims ! size of the dimensions 417 418 LOGICAL , INTENT(in ), OPTIONAL :: ldstop ! stop if looking for non-existing variable (default = .TRUE.) 418 419 ! … … 446 447 SELECT CASE (iom_file(kiomid)%iolib) 447 448 CASE (jpioipsl ) ; iom_varid = iom_ioipsl_varid( kiomid, cdvar, iiv, kdimsz ) 448 CASE (jpnf90 ) ; iom_varid = iom_nf90_varid ( kiomid, cdvar, iiv, kdimsz )449 CASE (jpnf90 ) ; iom_varid = iom_nf90_varid ( kiomid, cdvar, iiv, kdimsz, kndims ) 449 450 CASE (jprstdimg) ; iom_varid = -1 ! all variables are listed in iom_file 450 451 CASE DEFAULT … … 467 468 ENDIF 468 469 ENDIF 470 IF( PRESENT(kndims) ) kndims = iom_file(kiomid)%ndims(iiv) 469 471 ENDIF 470 472 ENDIF -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90
r3680 r4205 44 44 45 45 INTEGER, PARAMETER, PUBLIC :: jpmax_files = 100 !: maximum number of simultaneously opened file 46 INTEGER, PARAMETER, PUBLIC :: jpmax_vars = 360 !: maximum number of variables in one file46 INTEGER, PARAMETER, PUBLIC :: jpmax_vars = 600 !: maximum number of variables in one file 47 47 INTEGER, PARAMETER, PUBLIC :: jpmax_dims = 4 !: maximum number of dimensions for one variable 48 48 INTEGER, PARAMETER, PUBLIC :: jpmax_digits = 5 !: maximum number of digits for the cpu number in the file name -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r4147 r4205 132 132 CALL iom_rstput( kt, nitrst, numrow, 'rhd' , rhd ) 133 133 #endif 134 CALL iom_rstput( kt, nitrst, numrow, 'iatte' , iatte ) !clem modif 135 CALL iom_rstput( kt, nitrst, numrow, 'oatte' , oatte ) !clem modif 134 136 IF( kt == nitrst ) THEN 135 137 CALL iom_close( numrow ) ! close the restart file (only at last time step) … … 232 234 ENDIF 233 235 ! 236 CALL iom_get( numror, jpdom_autoglo, 'iatte' , iatte ) ! clem modif 237 CALL iom_get( numror, jpdom_autoglo, 'oatte' , oatte ) ! clem modif 238 ! 234 239 END SUBROUTINE rst_read 235 240 -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r4161 r4205 82 82 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_hc , qsr_hc_b !: heat content trend due to qsr flux [K.m/s] jpi,jpj,jpk 83 83 !! 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: oatte, iatte !: clem attenuation coef of the input solar flux [unitless]85 84 !! 86 85 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tprecip !: total precipitation [Kg/m2/s] … … 127 126 ! 128 127 ALLOCATE( rnf (jpi,jpj) , sbc_tsc (jpi,jpj,jpts) , qsr_hc (jpi,jpj,jpk) , & 129 & rnf_b(jpi,jpj) , sbc_tsc_b(jpi,jpj,jpts) , qsr_hc_b(jpi,jpj,jpk) , & 130 & iatte(jpi,jpj) , oatte (jpi,jpj) , STAT=ierr(3) ) 128 & rnf_b(jpi,jpj) , sbc_tsc_b(jpi,jpj,jpts) , qsr_hc_b(jpi,jpj,jpk) , STAT=ierr(3) ) 131 129 ! 132 130 ALLOCATE( tprecip(jpi,jpj) , sprecip(jpi,jpj) , fr_i(jpi,jpj) , & -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r4161 r4205 153 153 CALL wrk_alloc( jpi,jpj,jpl, zalb_ice_os, zalb_ice_cs ) 154 154 155 IF ( ln_cpl .OR. ln_iceflx_ave .OR. ln_iceflx_linear ) THEN 156 CALL wrk_alloc( jpi,jpj,jpl, zalb_ice) 157 END IF 158 IF ( ln_iceflx_ave .OR. ln_iceflx_linear ) THEN 159 CALL wrk_alloc( jpi,jpj, ztem_ice_all, zalb_ice_all, z_qsr_ice_all, z_qns_ice_all, z_qla_ice_all, z_dqns_ice_all, z_dqla_ice_all) 160 ENDIF 161 155 #if defined key_coupled 156 IF ( ln_cpl .OR. ln_iceflx_ave .OR. ln_iceflx_linear ) CALL wrk_alloc( jpi,jpj,jpl, zalb_ice) 157 IF ( ln_iceflx_ave .OR. ln_iceflx_linear ) & 158 & CALL wrk_alloc( jpi,jpj, ztem_ice_all, zalb_ice_all, z_qsr_ice_all, z_qns_ice_all, z_qla_ice_all, z_dqns_ice_all, z_dqla_ice_all) 159 #endif 162 160 163 161 IF( kt == nit000 ) THEN … … 169 167 ! 170 168 IF( ln_nicep ) THEN ! control print at a given point 171 jiindx = 15 ; jjindx = 46169 jiindx = 6 ; jjindx = 47 172 170 WRITE(numout,*) ' The debugging point is : jiindx : ',jiindx, ' jjindx : ',jjindx 173 171 ENDIF … … 193 191 IF ( ln_cpl ) zalb_ice (:,:,:) = 0.5 * ( zalb_ice_cs (:,:,:) + zalb_ice_os (:,:,:) ) 194 192 193 #if defined key_coupled 195 194 IF ( ln_iceflx_ave .OR. ln_iceflx_linear ) THEN 196 195 ! … … 200 199 ! 201 200 ENDIF 202 ! Bulk formulea - provides the following fields: 201 #endif 202 ! Bulk formulea - provides the following fields: 203 203 ! utau_ice, vtau_ice : surface ice stress (U- & V-points) [N/m2] 204 204 ! qsr_ice , qns_ice : solar & non solar heat flux over ice (T-point) [W/m2] … … 238 238 239 239 ! Average over all categories 240 #if defined key_coupled 240 241 IF ( ln_iceflx_ave .OR. ln_iceflx_linear ) THEN 241 242 … … 267 268 END IF 268 269 END IF 269 270 #endif 270 271 ! !----------------------! 271 272 ! ! LIM-3 time-stepping ! … … 283 284 old_smv_i(:,:,:) = smv_i(:,:,:) ! salt content 284 285 old_oa_i (:,:,:) = oa_i (:,:,:) ! areal age content 285 286 ! 287 old_u_ice(:,:) = u_ice(:,:) 288 old_v_ice(:,:) = v_ice(:,:) 286 289 ! ! intialisation to zero !!gm is it truly necessary ??? 287 290 d_a_i_thd (:,:,:) = 0._wp ; d_a_i_trp (:,:,:) = 0._wp … … 292 295 d_smv_i_thd(:,:,:) = 0._wp ; d_smv_i_trp(:,:,:) = 0._wp 293 296 d_oa_i_thd (:,:,:) = 0._wp ; d_oa_i_trp (:,:,:) = 0._wp 297 ! 298 d_u_ice_dyn(:,:) = 0._wp 299 d_v_ice_dyn(:,:) = 0._wp 294 300 ! 295 301 sfx (:,:) = 0._wp ; sfx_thd (:,:) = 0._wp … … 373 379 CALL lim_wri( 1 ) ! Ice outputs 374 380 !clem # endif 375 IF( kt == nit000 ) CALL iom_close( numrir ) ! clem: close input ice restart file 381 IF( kt == nit000 .AND. ln_rstart ) & 382 & CALL iom_close( numrir ) ! clem: close input ice restart file 383 ! 376 384 IF( lrst_ice ) CALL lim_rst_write( kt ) ! Ice restart file 377 385 CALL lim_var_glo2eqv ! ??? … … 392 400 ! 393 401 CALL wrk_dealloc( jpi,jpj,jpl, zalb_ice_os, zalb_ice_cs ) 394 IF ( ln_cpl .OR. ln_iceflx_ave .OR. ln_iceflx_linear ) THEN 395 CALL wrk_dealloc( jpi,jpj,jpl, zalb_ice) 396 END IF397 IF ( ln_iceflx_ave .OR. ln_iceflx_linear ) THEN398 CALL wrk_dealloc( jpi,jpj, ztem_ice_all, zalb_ice_all, z_qsr_ice_all, z_qns_ice_all, z_qla_ice_all, z_dqns_ice_all, z_dqla_ice_all)399 ENDIF 402 403 #if defined key_coupled 404 IF ( ln_cpl .OR. ln_iceflx_ave .OR. ln_iceflx_linear ) CALL wrk_dealloc( jpi,jpj,jpl, zalb_ice) 405 IF ( ln_iceflx_ave .OR. ln_iceflx_linear ) & 406 & CALL wrk_dealloc( jpi,jpj, ztem_ice_all, zalb_ice_all, z_qsr_ice_all, z_qns_ice_all, z_qla_ice_all, z_dqns_ice_all, z_dqla_ice_all) 407 #endif 400 408 ! 401 409 IF( nn_timing == 1 ) CALL timing_stop('sbc_ice_lim') -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r4161 r4205 136 136 ENDIF 137 137 138 ! Flux handling over ice categories 138 ! Flux handling over ice categories 139 #if defined key_coupled 139 140 SELECT CASE ( TRIM (cn_iceflx)) 140 141 CASE ('ave') … … 150 151 IF(lwp) WRITE(numout,*) ' Fluxes averaged over all ice categories ln_iceflx_ave = ', ln_iceflx_ave 151 152 IF(lwp) WRITE(numout,*) ' Fluxes distributed linearly over ice categories ln_iceflx_linear = ', ln_iceflx_linear 153 #endif 152 154 ! 153 155 ! ! allocate sbc arrays … … 189 191 IF( ( nn_ice == 3 .OR. nn_ice == 4 ) .AND. nn_ice_embd == 0 ) & 190 192 & CALL ctl_stop( 'LIM3 and CICE sea-ice models require nn_ice_embd = 1 or 2' ) 191 193 #if defined key_coupled 192 194 IF( ln_iceflx_ave .AND. ln_iceflx_linear ) & 193 195 & CALL ctl_stop( ' ln_iceflx_ave and ln_iceflx_linear options are not compatible' ) 194 195 196 IF( ( nn_ice ==3 .AND. lk_cpl) .AND. .NOT. ( ln_iceflx_ave .OR. ln_iceflx_linear ) ) & 196 197 & CALL ctl_stop( ' With lim3 coupled, either ln_iceflx_ave or ln_iceflx_linear must be set to .TRUE.' ) 197 198 #endif 198 199 IF( ln_dm2dc ) nday_qsr = -1 ! initialisation flag 199 200 … … 247 248 IF( nsbc == 6 ) WRITE(numout,*) ' MFS Bulk formulation' 248 249 ENDIF 249 250 250 ! 251 251 CALL sbc_ssm_init ! Sea-surface mean fields initialisation … … 255 255 IF( nn_ice == 4 ) CALL cice_sbc_init( nsbc ) ! CICE initialisation 256 256 ! 257 258 257 END SUBROUTINE sbc_init 259 258 … … 329 328 CASE( 3 ) ; CALL sbc_ice_lim ( kt, nsbc ) ! LIM-3 ice model 330 329 !is it useful? 331 !CASE( 4 ) ; CALL sbc_ice_cice ( kt, nsbc ) ! CICE ice model330 CASE( 4 ) ; CALL sbc_ice_cice ( kt, nsbc ) ! CICE ice model 332 331 END SELECT 333 332 -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r4161 r4205 45 45 LOGICAL , PUBLIC :: ln_qsr_2bd !: 2 band light absorption flag 46 46 LOGICAL , PUBLIC :: ln_qsr_bio !: bio-model light absorption flag 47 LOGICAL , PUBLIC :: ln_qsr_ice !: light penetration for ice-model LIM3 (clem) 47 48 INTEGER , PUBLIC :: nn_chldta !: use Chlorophyll data (=1) or not (=0) 48 49 REAL(wp), PUBLIC :: rn_abs !: fraction absorbed in the very near surface (RGB & 2 bands) 49 50 REAL(wp), PUBLIC :: rn_si0 !: very near surface depth of extinction (RGB & 2 bands) 50 51 REAL(wp), PUBLIC :: rn_si1 !: deepest depth of extinction (water type I) (2 bands) 51 LOGICAL , PUBLIC :: ln_qsr_ice !: light penetration for ice-model LIM3 (clem)52 53 52 54 53 ! Module variables … … 395 394 ! 396 395 ! clem init for oatte and iatte 397 oatte(:,:) = 1._wp 398 iatte(:,:) = 1._wp 396 IF( .NOT. ln_rstart ) THEN 397 oatte(:,:) = 1._wp 398 iatte(:,:) = 1._wp 399 ENDIF 399 400 ! 400 401 CALL wrk_alloc( jpi, jpj, zekb, zekg, zekr ) -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/oce.F90
r4152 r4205 57 57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: snwice_fmass !: time evolution of mass of snow+ice [Kg/m2/s] 58 58 59 !! arrays related to penetration of solar fluxes to calculate the heat budget for sea ice 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: oatte, iatte !: attenuation coef of the input solar flux [unitless] 61 59 62 !!---------------------------------------------------------------------- 60 63 !! NEMO/OPA 4.0 , NEMO Consortium (2011) … … 68 71 !! *** FUNCTION oce_alloc *** 69 72 !!---------------------------------------------------------------------- 70 INTEGER :: ierr( 3)73 INTEGER :: ierr(4) 71 74 !!---------------------------------------------------------------------- 72 75 ! … … 90 93 & gru(jpi,jpj) , grv(jpi,jpj) , STAT=ierr(2) ) 91 94 ! 92 ALLOCATE( snwice_mass(jpi,jpj) , snwice_mass_b(jpi,jpj), & 93 & snwice_fmass(jpi,jpj), STAT= ierr(3) ) 95 ALLOCATE( snwice_mass(jpi,jpj) , snwice_mass_b(jpi,jpj), snwice_fmass(jpi,jpj) , STAT=ierr(3) ) 96 ! 97 ALLOCATE( iatte(jpi,jpj) , oatte(jpi,jpj) , STAT=ierr(4) ) 94 98 ! 95 99 oce_alloc = MAXVAL( ierr ) -
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/par_oce.F90
r4147 r4205 56 56 !! Values set to pp_to_be_computed indicates that variables will be computed in domzgr 57 57 REAL(wp) :: pp_not_used = 999999._wp !: vertical grid parameter 58 REAL(wp) :: pp_to_be_computed = 99999 8._wp !: - - -58 REAL(wp) :: pp_to_be_computed = 999999._wp !: - - - 59 59 60 60
Note: See TracChangeset
for help on using the changeset viewer.