Changeset 4333
- Timestamp:
- 2013-12-11T18:34:00+01:00 (10 years ago)
- Location:
- branches/2013/dev_MERGE_2013/NEMOGCM
- Files:
-
- 1 deleted
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_MERGE_2013/NEMOGCM/CONFIG/cfg.txt
r4310 r4333 1 1 GYRE_BFM OPA_SRC TOP_SRC 2 2 GYRE_PISCES OPA_SRC TOP_SRC 3 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC4 3 ORCA2_LIM_CFC_C14b OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 5 4 GYRE OPA_SRC … … 10 9 ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 11 10 ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 11 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r4205 r4333 292 292 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: dh_i_surf2D, dh_i_bott2D, fstbif, fsup2D, focea2D, q_s 293 293 294 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: patho_case ! number of the pathological case (if any, of course)295 296 294 !!-------------------------------------------------------------------------- 297 295 !! * Ice global state variables … … 465 463 & fsup2D (jpi,jpj) , focea2D (jpi,jpj) , q_s (jpi,jpj) , STAT=ierr(ii) ) 466 464 467 ii = ii + 1468 ALLOCATE( patho_case(jpi, jpj, jpl) , STAT=ierr(ii) )469 470 465 ! * Ice global state variables 471 466 ii = ii + 1 -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/iceini.F90
r4319 r4333 90 90 ! 91 91 ! ! Initial sea-ice state 92 IF( .NOT. ln_rstart ) THEN ! start from rest92 IF( .NOT. ln_rstart ) THEN ! start from rest 93 93 numit = 0 94 94 numit = nit000 - 1 … … 105 105 hi_max(jpl) = 99._wp ! Set hi_max(jpl) to a big value to ensure that all ice is thinner than hi_max(jpl) 106 106 ! 107 CALL lim_sbc_init ! ice surface boundary condition108 ! 109 fr_i(:,:) = at_i(:,:) ! initialisation of sea-ice fraction110 tn_ice(:,:,:) = t_su(:,:,:) 107 CALL lim_sbc_init ! ice surface boundary condition 108 ! 109 fr_i(:,:) = at_i(:,:) ! initialisation of sea-ice fraction 110 tn_ice(:,:,:) = t_su(:,:,:) ! initialisation of surface temp for coupled simu 111 111 ! 112 112 nstart = numit + nn_fsbc … … 143 143 WRITE ( numoni, namicerun ) 144 144 ! 145 IF( lk_mpp .AND. ln_nicep ) THEN146 ln_nicep = .FALSE.147 CALL ctl_warn( 'ice_run : specific control print for LIM3 desactivated with MPI' )148 ENDIF145 !IF( lk_mpp .AND. ln_nicep ) THEN 146 ! ln_nicep = .FALSE. 147 ! CALL ctl_warn( 'ice_run : specific control print for LIM3 desactivated with MPI' ) 148 !ENDIF 149 149 ! 150 150 IF(lwp) THEN ! control print -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limcat_1D.F90
r4298 r4333 45 45 REAL(wp), DIMENSION(:,:), INTENT(inout) :: zht_i, zht_s, za_i ! output ice/snow variables 46 46 REAL(wp) :: epsi06 = 1.0e-6 47 REAL(wp) :: zc1, zc2, zc3, zx1! local scalars47 REAL(wp) :: zc1, zc2, zc3, zx1, zdh ! local scalars 48 48 REAL(wp), DIMENSION(0:jpl) :: zhi_max !:Boundary of ice thickness categories in thickness space 49 49 … … 85 85 ! ---------------------------------------- 86 86 DO ji = 1, ijpij 87 ! snow thickness in each category88 zht_s(ji,1:jpl) = zhts(ji)89 87 88 IF( zhti(ji) > 0._wp ) THEN 89 90 90 ! initialisation of tests 91 91 ztest_1 = 0 … … 108 108 zht_i(ji,1) = zhti(ji) 109 109 za_i (ji,1) = zai (ji) 110 111 110 ! *** case ice is thicker: fill categories >1 112 111 ELSE … … 178 177 ! WRITE(numout,*) 'za_i(ji,jpl)=',za_i(ji,:) 179 178 !ENDIF 180 179 180 ENDIF ! if zhti > 0 181 181 182 END DO ! i loop 183 184 ! ------------------------------------------------ 185 ! Adding Snow in each category where za_i is not 0 186 ! ------------------------------------------------ 187 DO jl = 1, jpl 188 DO ji = 1, ijpij 189 IF( za_i(ji,jl) > 0._wp ) THEN 190 zht_s(ji,jl) = zht_i(ji,jl) * ( zhts(ji) / zhti(ji) ) 191 ! In case snow load is in excess that would lead to transformation from snow to ice 192 ! Then, transfer the snow excess into the ice (different from limthd_dh) 193 zdh = MAX( 0._wp, ( rhosn * zht_s(ji,jl) + ( rhoic - rau0 ) * zht_i(ji,jl) ) * r1_rau0 ) 194 ! recompute ht_i, ht_s avoiding out of bounds values 195 zht_i(ji,jl) = MIN( zhi_max(jl), zht_i(ji,jl) + zdh ) 196 zht_s(ji,jl) = MAX( 0._wp, zht_s(ji,jl) - zdh * rhoic / rhosn ) 197 ENDIF 198 ENDDO 199 ENDDO 182 200 183 201 IF( nn_timing == 1 ) CALL timing_stop('limcat_1D') -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limhdf.F90
r4161 r4333 29 29 30 30 LOGICAL :: linit = .TRUE. ! initialization flag (set to flase after the 1st call) 31 REAL(wp) :: epsi04 = 1 e-04 ! constant31 REAL(wp) :: epsi04 = 1.e-04 ! constant 32 32 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: efact ! metric coefficient 33 33 … … 54 54 REAL(wp), DIMENSION(jpi,jpj), INTENT( inout ) :: ptab ! Field on which the diffusion is applied 55 55 ! 56 INTEGER :: ji, jj ! dummy loop indices57 INTEGER :: its, iter, ierr ! local integers58 REAL(wp) :: zalfa, zrlxint, zconv , zeps! local scalars56 INTEGER :: ji, jj ! dummy loop indices 57 INTEGER :: its, iter, ierr ! local integers 58 REAL(wp) :: zalfa, zrlxint, zconv ! local scalars 59 59 REAL(wp), POINTER, DIMENSION(:,:) :: zrlx, zflu, zflv, zdiv0, zdiv, ztab0 60 60 CHARACTER(lc) :: charout ! local character … … 79 79 zalfa = 0.5_wp ! =1.0/0.5/0.0 = implicit/Cranck-Nicholson/explicit 80 80 its = 100 ! Maximum number of iteration 81 zeps = 2._wp * epsi0482 81 ! 83 82 ztab0(:, : ) = ptab(:,:) ! Arrays initialization … … 94 93 iter = 0 95 94 ! 96 DO WHILE( zconv > zeps.AND. iter <= its ) ! Sub-time step loop95 DO WHILE( zconv > ( 2._wp * epsi04 ) .AND. iter <= its ) ! Sub-time step loop 97 96 ! 98 97 iter = iter + 1 ! incrementation of the sub-time step number -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r4205 r4333 76 76 !! 6) Lateral boundary conditions 77 77 !! 78 !! ** Notes : o_i, t_su, t_s, t_i, s_i must be filled everywhere, even 79 !! where there is no ice (clem: I do not know why but it is mandatory) 80 !! 78 81 !! History : 79 82 !! 2.0 ! 01-04 (C. Ethe, G. Madec) Original code … … 84 87 !! * Local variables 85 88 INTEGER :: ji, jj, jk, jl ! dummy loop indices 86 REAL(wp) :: epsi 06, epsi20, ztmelts89 REAL(wp) :: epsi20, ztmelts, zdh 87 90 INTEGER :: i_hemis, i_fill, jl0 88 91 REAL(wp) :: ztest_1, ztest_2, ztest_3, ztest_4, ztests, zsigma, zarg, zA, zV, zA_cons, zV_cons, zconv … … 98 101 CALL wrk_alloc( 2, zhm_i_ini, zat_i_ini, zvt_i_ini, zhm_s_ini, zsm_i_ini ) 99 102 100 epsi06 = 1.0e-6101 103 epsi20 = 1.0e-20 102 104 IF(lwp) WRITE(numout,*) … … 308 310 !--------------------------------------------------------------------- 309 311 310 ! Ice concentration, thickness and volume, snow depth, ice 311 ! salinity, ice age, surface temperature 312 ! Ice concentration, thickness and volume, ice salinity, ice age, surface temperature 312 313 DO jl = 1, jpl ! loop over categories 313 314 DO jj = 1, jpj … … 315 316 a_i(ji,jj,jl) = zidto(ji,jj) * za_i_ini (jl,zhemis(ji,jj)) ! concentration 316 317 ht_i(ji,jj,jl) = zidto(ji,jj) * zht_i_ini(jl,zhemis(ji,jj)) ! ice thickness 317 ht_s(ji,jj,jl) = zidto(ji,jj) * zhm_s_ini(zhemis(ji,jj))! snow depth318 sm_i(ji,jj,jl) = zidto(ji,jj) * zsm_i_ini(zhemis(ji,jj)) 318 ht_s(ji,jj,jl) = ht_i(ji,jj,jl) * ( zhm_s_ini( zhemis(ji,jj) ) / zhm_i_ini( zhemis(ji,jj) ) ) ! snow depth 319 sm_i(ji,jj,jl) = zidto(ji,jj) * zsm_i_ini(zhemis(ji,jj)) + ( 1._wp - zidto(ji,jj) ) * s_i_min ! salinity 319 320 o_i(ji,jj,jl) = zidto(ji,jj) * 1._wp + ( 1._wp - zidto(ji,jj) ) ! age 320 t_su(ji,jj,jl) = zidto(ji,jj) * 270.0 + ( 1._wp - zidto(ji,jj) ) * t_bo(ji,jj) ! surf temp 321 322 ! ice volume, snow volume, salt content, age content 321 t_su(ji,jj,jl) = zidto(ji,jj) * 270.0 + ( 1._wp - zidto(ji,jj) ) * 270.0 ! surf temp 322 323 ! This case below should not be used if (ht_s/ht_i) is ok in namelist 324 ! In case snow load is in excess that would lead to transformation from snow to ice 325 ! Then, transfer the snow excess into the ice (different from limthd_dh) 326 zdh = MAX( 0._wp, ( rhosn * ht_s(ji,jj,jl) + ( rhoic - rau0 ) * ht_i(ji,jj,jl) ) * r1_rau0 ) 327 ! recompute ht_i, ht_s avoiding out of bounds values 328 ht_i(ji,jj,jl) = MIN( hi_max(jl), ht_i(ji,jj,jl) + zdh ) 329 ht_s(ji,jj,jl) = MAX( 0._wp, ht_s(ji,jj,jl) - zdh * rhoic / rhosn ) 330 331 ! ice volume, salt content, age content 323 332 v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) ! ice volume 324 333 v_s(ji,jj,jl) = ht_s(ji,jj,jl) * a_i(ji,jj,jl) ! snow volume -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r4298 r4333 43 43 PUBLIC lim_itd_me_alloc ! called by iceini.F90 44 44 45 REAL(wp) :: epsi 11 = 1.e-11_wp ! constant values45 REAL(wp) :: epsi20 = 1.e-20_wp ! constant values 46 46 REAL(wp) :: epsi10 = 1.e-10_wp ! constant values 47 47 REAL(wp) :: epsi06 = 1.e-06_wp ! constant values … … 50 50 ! Variables shared among ridging subroutines 51 51 !----------------------------------------------------------------------- 52 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: asum ! sum of total ice and open water area 53 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: aksum ! ratio of area removed to area ridged 54 ! 55 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: athorn ! participation function; fraction of ridging/ 56 ! ! closing associated w/ category n 57 ! 58 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hrmin ! minimum ridge thickness 59 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hrmax ! maximum ridge thickness 60 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hraft ! thickness of rafted ice 61 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: krdg ! mean ridge thickness/thickness of ridging ice 62 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aridge ! participating ice ridging 63 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: araft ! participating ice rafting 52 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: asum ! sum of total ice and open water area 53 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: aksum ! ratio of area removed to area ridged 54 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: athorn ! participation function; fraction of ridging/ 55 ! ! closing associated w/ category n 56 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: hrmin ! minimum ridge thickness 57 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: hrmax ! maximum ridge thickness 58 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: hraft ! thickness of rafted ice 59 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: krdg ! mean ridge thickness/thickness of ridging ice 60 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: aridge ! participating ice ridging 61 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: araft ! participating ice rafting 64 62 65 63 REAL(wp), PARAMETER :: krdgmin = 1.1_wp ! min ridge thickness multiplier 66 64 REAL(wp), PARAMETER :: kraft = 2.0_wp ! rafting multipliyer 67 REAL(wp), PARAMETER :: kamax = 1.0 65 REAL(wp), PARAMETER :: kamax = 1.0_wp ! max of ice area authorized (clem: scheme is not stable if kamax <= 0.99) 68 66 69 67 REAL(wp) :: Cp ! … … 261 259 ! Reduce the closing rate if more than 100% of the open water 262 260 ! would be removed. Reduce the opening rate proportionately. 263 IF ( ato_i(ji,jj) .GT. epsi1 1.AND. athorn(ji,jj,0) .GT. 0.0 ) THEN261 IF ( ato_i(ji,jj) .GT. epsi10 .AND. athorn(ji,jj,0) .GT. 0.0 ) THEN 264 262 w1 = athorn(ji,jj,0) * closing_gross(ji,jj) * rdt_ice 265 263 IF ( w1 .GT. ato_i(ji,jj)) THEN … … 281 279 DO jj = 1, jpj 282 280 DO ji = 1, jpi 283 IF ( a_i(ji,jj,jl) > epsi1 1.AND. athorn(ji,jj,jl) > 0._wp )THEN281 IF ( a_i(ji,jj,jl) > epsi10 .AND. athorn(ji,jj,jl) > 0._wp )THEN 284 282 w1 = athorn(ji,jj,jl) * closing_gross(ji,jj) * rdt_ice 285 283 IF ( w1 > a_i(ji,jj,jl) ) THEN … … 312 310 DO jj = 1, jpj 313 311 DO ji = 1, jpi 314 IF (ABS(asum(ji,jj) - kamax ) .LT. epsi1 1) THEN312 IF (ABS(asum(ji,jj) - kamax ) .LT. epsi10) THEN 315 313 closing_net(ji,jj) = 0._wp 316 314 opning (ji,jj) = 0._wp … … 354 352 DO ji = 1, jpi 355 353 356 IF(ABS(asum(ji,jj) - kamax) > epsi1 1) asum_error = .true.354 IF(ABS(asum(ji,jj) - kamax) > epsi10 ) asum_error = .true. 357 355 358 356 dardg1dt(ji,jj) = dardg1dt(ji,jj) * r1_rdtice … … 373 371 DO jj = 1, jpj 374 372 DO ji = 1, jpi 375 IF( ABS( asum(ji,jj) - kamax) > epsi1 1) THEN ! there is a bug373 IF( ABS( asum(ji,jj) - kamax) > epsi10 ) THEN ! there is a bug 376 374 WRITE(numout,*) ' ' 377 375 WRITE(numout,*) ' ALERTE : Ridging error: total area = ', asum(ji,jj) … … 396 394 397 395 !-----------------------------------------------------------------------------! 398 ! 6) Updating state variables and trend terms 396 ! 6) Updating state variables and trend terms (done in limupdate) 399 397 !-----------------------------------------------------------------------------! 400 401 398 CALL lim_var_glo2eqv 402 399 CALL lim_itd_me_zapsmall … … 415 412 END DO 416 413 END DO 417 418 !-----------------419 ! Trend terms420 !-----------------421 422 d_u_ice_dyn(:,:) = u_ice(:,:) - old_u_ice(:,:)423 d_v_ice_dyn(:,:) = v_ice(:,:) - old_v_ice(:,:)424 d_a_i_trp (:,:,:) = a_i (:,:,:) - old_a_i (:,:,:)425 d_v_s_trp (:,:,:) = v_s (:,:,:) - old_v_s (:,:,:)426 d_v_i_trp (:,:,:) = v_i (:,:,:) - old_v_i (:,:,:)427 d_e_s_trp (:,:,:,:) = e_s (:,:,:,:) - old_e_s (:,:,:,:)428 d_e_i_trp (:,:,:,:) = e_i (:,:,:,:) - old_e_i (:,:,:,:)429 d_oa_i_trp (:,:,:) = oa_i (:,:,:) - old_oa_i (:,:,:)430 d_smv_i_trp(:,:,:) = 0._wp431 IF( num_sal == 2 ) d_smv_i_trp(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:)432 414 433 415 IF(ln_ctl) THEN ! Control print … … 487 469 ! ------------------------------- 488 470 489 !-------------------------!490 ! Back to initial values491 !-------------------------!492 493 ! update of fields will be made later in lim update494 u_ice(:,:) = old_u_ice(:,:)495 v_ice(:,:) = old_v_ice(:,:)496 a_i(:,:,:) = old_a_i(:,:,:)497 v_s(:,:,:) = old_v_s(:,:,:)498 v_i(:,:,:) = old_v_i(:,:,:)499 e_s(:,:,:,:) = old_e_s(:,:,:,:)500 e_i(:,:,:,:) = old_e_i(:,:,:,:)501 oa_i(:,:,:) = old_oa_i(:,:,:)502 IF( num_sal == 2 ) smv_i(:,:,:) = old_smv_i(:,:,:)503 504 !----------------------------------------------------!505 ! Advection of ice in a free cell, newly ridged ice506 !----------------------------------------------------!507 508 ! to allow for thermodynamics to melt new ice509 ! we immediately advect ice in free cells510 511 ! heat content has to be corrected before ice volume512 !clem@order513 ! DO jl = 1, jpl514 ! DO jk = 1, nlay_i515 ! DO jj = 1, jpj516 ! DO ji = 1, jpi517 ! IF ( ( old_v_i(ji,jj,jl) < epsi06 ) .AND. &518 ! ( d_v_i_trp(ji,jj,jl) > epsi06 ) ) THEN519 ! old_e_i(ji,jj,jk,jl) = d_e_i_trp(ji,jj,jk,jl)520 ! d_e_i_trp(ji,jj,jk,jl) = 0._wp521 ! ENDIF522 ! END DO523 ! END DO524 ! END DO525 ! END DO526 !527 ! DO jl = 1, jpl528 ! DO jj = 1, jpj529 ! DO ji = 1, jpi530 ! IF( old_v_i (ji,jj,jl) < epsi06 .AND. &531 ! d_v_i_trp(ji,jj,jl) > epsi06 ) THEN532 ! old_v_i (ji,jj,jl) = d_v_i_trp(ji,jj,jl)533 ! d_v_i_trp (ji,jj,jl) = 0._wp534 ! old_a_i (ji,jj,jl) = d_a_i_trp(ji,jj,jl)535 ! d_a_i_trp (ji,jj,jl) = 0._wp536 ! old_v_s (ji,jj,jl) = d_v_s_trp(ji,jj,jl)537 ! d_v_s_trp (ji,jj,jl) = 0._wp538 ! old_e_s (ji,jj,1,jl) = d_e_s_trp(ji,jj,1,jl)539 ! d_e_s_trp (ji,jj,1,jl) = 0._wp540 ! old_oa_i (ji,jj,jl) = d_oa_i_trp(ji,jj,jl)541 ! d_oa_i_trp(ji,jj,jl) = 0._wp542 ! IF( num_sal == 2 ) old_smv_i(ji,jj,jl) = d_smv_i_trp(ji,jj,jl)543 ! d_smv_i_trp(ji,jj,jl) = 0._wp544 ! ENDIF545 ! END DO546 ! END DO547 ! END DO548 !clem@order549 471 ENDIF ! ln_limdyn=.true. 550 472 ! … … 601 523 DO ji = 1, jpi 602 524 ! 603 IF( a_i(ji,jj,jl) > epsi11 .AND. & 604 athorn(ji,jj,jl) > 0._wp ) THEN 525 IF( a_i(ji,jj,jl) > epsi10 .AND. athorn(ji,jj,jl) > 0._wp ) THEN 605 526 hi = v_i(ji,jj,jl) / a_i(ji,jj,jl) 606 527 !---------------------------- … … 620 541 * z1_3 * (hrmax(ji,jj,jl)**3 - hrmin(ji,jj,jl)**3) / ( hrmax(ji,jj,jl)-hrmin(ji,jj,jl) ) 621 542 !!gm Optimization: (a**3-b**3)/(a-b) = a*a+ab+b*b ==> less costly operations even if a**3 is replaced by a*a*a... 622 ENDIF ! aicen > epsi1 1543 ENDIF ! aicen > epsi10 623 544 ! 624 545 END DO ! ji … … 677 598 DO jj = 2, jpj - 1 678 599 DO ji = 2, jpi - 1 679 IF ( ( asum(ji,jj) - ato_i(ji,jj) ) .GT. epsi1 1) THEN ! ice is600 IF ( ( asum(ji,jj) - ato_i(ji,jj) ) .GT. epsi10) THEN ! ice is 680 601 ! present 681 602 zworka(ji,jj) = 4.0 * strength(ji,jj) & … … 717 638 DO jj = 1, jpj - 1 718 639 DO ji = 1, jpi - 1 719 IF ( ( asum(ji,jj) - ato_i(ji,jj) ) .GT. epsi1 1) THEN ! ice is present640 IF ( ( asum(ji,jj) - ato_i(ji,jj) ) .GT. epsi10) THEN ! ice is present 720 641 numts_rm = 1 ! number of time steps for the running mean 721 642 IF ( strp1(ji,jj) .GT. 0.0 ) numts_rm = numts_rm + 1 … … 790 711 DO jj = 1, jpj 791 712 DO ji = 1, jpi 792 IF( ato_i(ji,jj) > epsi1 1) THEN ; Gsum(ji,jj,0) = ato_i(ji,jj)713 IF( ato_i(ji,jj) > epsi10 ) THEN ; Gsum(ji,jj,0) = ato_i(ji,jj) 793 714 ELSE ; Gsum(ji,jj,0) = 0._wp 794 715 ENDIF … … 800 721 DO jj = 1, jpj 801 722 DO ji = 1, jpi 802 IF( a_i(ji,jj,jl) .GT. epsi1 1) THEN ; Gsum(ji,jj,jl) = Gsum(ji,jj,jl-1) + a_i(ji,jj,jl)723 IF( a_i(ji,jj,jl) .GT. epsi10 ) THEN ; Gsum(ji,jj,jl) = Gsum(ji,jj,jl-1) + a_i(ji,jj,jl) 803 724 ELSE ; Gsum(ji,jj,jl) = Gsum(ji,jj,jl-1) 804 725 ENDIF … … 883 804 IF ( raftswi == 1 ) THEN 884 805 885 IF( MAXVAL(aridge + araft - athorn(:,:,1:jpl)) .GT. epsi1 1) THEN806 IF( MAXVAL(aridge + araft - athorn(:,:,1:jpl)) .GT. epsi10 ) THEN 886 807 DO jl = 1, jpl 887 808 DO jj = 1, jpj 888 809 DO ji = 1, jpi 889 IF ( aridge(ji,jj,jl) + araft(ji,jj,jl) - athorn(ji,jj,jl) .GT. & 890 epsi11 ) THEN 810 IF ( aridge(ji,jj,jl) + araft(ji,jj,jl) - athorn(ji,jj,jl) .GT. epsi10 ) THEN 891 811 WRITE(numout,*) ' ALERTE 96 : wrong participation function ... ' 892 812 WRITE(numout,*) ' ji, jj, jl : ', ji, jj, jl … … 934 854 DO ji = 1, jpi 935 855 936 IF (a_i(ji,jj,jl) .GT. epsi1 1.AND. athorn(ji,jj,jl) .GT. 0.0 ) THEN856 IF (a_i(ji,jj,jl) .GT. epsi10 .AND. athorn(ji,jj,jl) .GT. 0.0 ) THEN 937 857 hi = v_i(ji,jj,jl) / a_i(ji,jj,jl) 938 858 hrmean = MAX(SQRT(Hstar*hi), hi*krdgmin) … … 988 908 INTEGER :: ij ! horizontal index, combines i and j loops 989 909 INTEGER :: icells ! number of cells with aicen > puny 990 REAL(wp) :: z eps, zindb, zsrdg2 ! local scalar910 REAL(wp) :: zindb, zsrdg2 ! local scalar 991 911 REAL(wp) :: hL, hR, farea, zdummy, zdummy0, ztmelts ! left and right limits of integration 992 912 … … 1040 960 1041 961 IF( con_i ) THEN 1042 CALL lim_column_sum (jpl, v_i, vice_init ) 1043 WRITE(numout,*) ' vice_init : ', vice_init(jiindx,jjindx) 962 CALL lim_column_sum (jpl, v_i, vice_init ) 1044 963 CALL lim_column_sum_energy (jpl, nlay_i, e_i, eice_init ) 1045 WRITE(numout,*) ' eice_init : ', eice_init(jiindx,jjindx) 964 DO ji = mi0(jiindx), mi1(jiindx) 965 DO jj = mj0(jjindx), mj1(jjindx) 966 WRITE(numout,*) ' vice_init : ', vice_init(ji,jj) 967 WRITE(numout,*) ' eice_init : ', eice_init(ji,jj) 968 END DO 969 END DO 1046 970 ENDIF 1047 1048 zeps = 1.e-20_wp1049 971 1050 972 !------------------------------------------------------------------------------- … … 1058 980 ato_i(ji,jj) = ato_i(ji,jj) - athorn(ji,jj,0) * closing_gross(ji,jj) * rdt_ice & 1059 981 & + opning(ji,jj) * rdt_ice 1060 IF( ato_i(ji,jj) < -epsi1 1) THEN982 IF( ato_i(ji,jj) < -epsi10 ) THEN 1061 983 neg_ato_i = .TRUE. 1062 984 ELSEIF( ato_i(ji,jj) < 0._wp ) THEN ! roundoff error … … 1070 992 DO jj = 1, jpj 1071 993 DO ji = 1, jpi 1072 IF( ato_i(ji,jj) < -epsi1 1) THEN994 IF( ato_i(ji,jj) < -epsi10 ) THEN 1073 995 WRITE(numout,*) '' 1074 996 WRITE(numout,*) 'Ridging error: ato_i < 0' 1075 997 WRITE(numout,*) 'ato_i : ', ato_i(ji,jj) 1076 ENDIF ! ato_i < -epsi1 1998 ENDIF ! ato_i < -epsi10 1077 999 END DO 1078 1000 END DO … … 1116 1038 DO jj = 1, jpj 1117 1039 DO ji = 1, jpi 1118 IF( aicen_init(ji,jj,jl1) > epsi11 .AND. athorn(ji,jj,jl1) > 0._wp&1119 .AND. closing_gross(ji,jj) > 0._wp ) THEN1040 IF( aicen_init(ji,jj,jl1) > epsi10 .AND. athorn(ji,jj,jl1) > 0._wp & 1041 & .AND. closing_gross(ji,jj) > 0._wp ) THEN 1120 1042 icells = icells + 1 1121 1043 indxi(icells) = ji … … 1154 1076 afrft(ji,jj) = arft1(ji,jj) / aicen_init(ji,jj,jl1) !rafting 1155 1077 1156 IF (afrac(ji,jj) > kamax + epsi1 1) THEN !riging1078 IF (afrac(ji,jj) > kamax + epsi10) THEN !riging 1157 1079 large_afrac = .true. 1158 1080 ELSEIF (afrac(ji,jj) > kamax) THEN ! roundoff error 1159 1081 afrac(ji,jj) = kamax 1160 1082 ENDIF 1161 IF (afrft(ji,jj) > kamax + epsi1 1) THEN !rafting1083 IF (afrft(ji,jj) > kamax + epsi10) THEN !rafting 1162 1084 large_afrft = .true. 1163 1085 ELSEIF (afrft(ji,jj) > kamax) THEN ! roundoff error … … 1218 1140 dardg1dt (ji,jj) = dardg1dt(ji,jj) + ardg1(ji,jj) + arft1(ji,jj) 1219 1141 dardg2dt (ji,jj) = dardg2dt(ji,jj) + ardg2(ji,jj) + arft2(ji,jj) 1220 !clem diag_dyn_gr(ji,jj) = diag_dyn_gr(ji,jj) + ( vrdg2(ji,jj) + virft(ji,jj) ) * r1_rdtice1221 1142 opening (ji,jj) = opening (ji,jj) + opning(ji,jj) * rdt_ice 1222 1143 … … 1272 1193 1273 1194 ! corrected sea water salinity 1274 zindb = MAX( 0._wp , SIGN( 1._wp , vsw(ji,jj) - zeps) )1275 zdummy = zindb * ( srdg1(ji,jj) - srdg2(ji,jj) ) / MAX( ridge_por * vsw(ji,jj), zeps)1195 zindb = MAX( 0._wp , SIGN( 1._wp , vsw(ji,jj) - epsi20 ) ) 1196 zdummy = zindb * ( srdg1(ji,jj) - srdg2(ji,jj) ) / MAX( ridge_por * vsw(ji,jj), epsi20 ) 1276 1197 1277 1198 ztmelts = - tmut * zdummy + rtt … … 1308 1229 ji = indxi(ij) 1309 1230 jj = indxj(ij) 1310 IF( afrac(ji,jj) > kamax + epsi1 1) THEN1231 IF( afrac(ji,jj) > kamax + epsi10 ) THEN 1311 1232 WRITE(numout,*) '' 1312 1233 WRITE(numout,*) ' ardg > a_i' … … 1320 1241 ji = indxi(ij) 1321 1242 jj = indxj(ij) 1322 IF( afrft(ji,jj) > kamax + epsi1 1) THEN1243 IF( afrft(ji,jj) > kamax + epsi10 ) THEN 1323 1244 WRITE(numout,*) '' 1324 1245 WRITE(numout,*) ' arft > a_i' … … 1420 1341 fieldid = ' v_i : limitd_me ' 1421 1342 CALL lim_cons_check (vice_init, vice_final, 1.0e-6, fieldid) 1422 WRITE(numout,*) ' vice_init : ', vice_init(jiindx,jjindx)1423 WRITE(numout,*) ' vice_final : ', vice_final(jiindx,jjindx)1424 1343 1425 1344 CALL lim_column_sum_energy (jpl, nlay_i, e_i, eice_final ) 1426 1345 fieldid = ' e_i : limitd_me ' 1427 1346 CALL lim_cons_check (eice_init, eice_final, 1.0e-2, fieldid) 1428 WRITE(numout,*) ' eice_init : ', eice_init(jiindx,jjindx) 1429 WRITE(numout,*) ' eice_final : ', eice_final(jiindx,jjindx) 1347 1348 DO ji = mi0(jiindx), mi1(jiindx) 1349 DO jj = mj0(jjindx), mj1(jjindx) 1350 WRITE(numout,*) ' vice_init : ', vice_init (ji,jj) 1351 WRITE(numout,*) ' vice_final : ', vice_final(ji,jj) 1352 WRITE(numout,*) ' eice_init : ', eice_init (ji,jj) 1353 WRITE(numout,*) ' eice_final : ', eice_final(ji,jj) 1354 END DO 1355 END DO 1430 1356 ENDIF 1431 1357 ! … … 1536 1462 1537 1463 REAL(wp), POINTER, DIMENSION(:,:) :: zmask ! 2D workspace 1538 1464 REAL(wp) :: zmask_glo 1539 1465 !!gm REAL(wp) :: xtmp ! temporary variable 1540 1466 !!------------------------------------------------------------------- … … 1548 1474 ! Abort model in case of negative area. 1549 1475 !----------------------------------------------------------------- 1550 IF( MINVAL(a_i(:,:,jl)) .LT. -epsi11 .AND. ln_nicep ) THEN1551 DO jj = 1, jpj1552 DO ji = 1, jpi1553 IF ( a_i(ji,jj,jl) .LT. -epsi11 ) THEN1554 WRITE (numout,*) ' ALERTE 98 '1555 WRITE (numout,*) ' Negative ice area: ji, jj, jl: ', ji, jj,jl1556 WRITE (numout,*) ' a_i ', a_i(ji,jj,jl)1557 ENDIF1558 END DO1559 END DO1560 ENDIF1561 1562 1476 icells = 0 1563 zmask = 0._wp1477 zmask(:,:) = 0._wp 1564 1478 DO jj = 1, jpj 1565 1479 DO ji = 1, jpi 1566 IF( ( a_i(ji,jj,jl) .GE. -epsi11 .AND. a_i(ji,jj,jl) .LT. 0._wp ) .OR. & 1567 & ( a_i(ji,jj,jl) .GT. 0._wp .AND. a_i(ji,jj,jl) .LE. 1.0e-11 ) .OR. & 1568 & ( v_i(ji,jj,jl) == 0._wp .AND. a_i(ji,jj,jl) .GT. 0._wp ) .OR. & 1569 & ( v_i(ji,jj,jl) .GT. 0._wp .AND. v_i(ji,jj,jl) .LT. 1.e-12 ) ) zmask(ji,jj) = 1._wp 1570 END DO 1571 END DO 1572 IF( ln_nicep ) WRITE(numout,*) SUM(zmask), ' cells of ice zapped in the ocean ' 1480 IF( ( a_i(ji,jj,jl) >= -epsi10 .AND. a_i(ji,jj,jl) < 0._wp ) .OR. & 1481 & ( a_i(ji,jj,jl) > 0._wp .AND. a_i(ji,jj,jl) <= epsi10 ) .OR. & 1482 & ( v_i(ji,jj,jl) == 0._wp .AND. a_i(ji,jj,jl) > 0._wp ) .OR. & 1483 & ( v_i(ji,jj,jl) > 0._wp .AND. v_i(ji,jj,jl) <= epsi10 ) ) zmask(ji,jj) = 1._wp 1484 END DO 1485 END DO 1486 zmask_glo = glob_sum(zmask) 1487 !IF( ln_nicep .AND. lwp ) WRITE(numout,*) zmask_glo, ' cells of ice zapped in the ocean ' 1573 1488 1574 1489 !----------------------------------------------------------------- … … 1582 1497 !!gm xtmp = xtmp * unit_fac 1583 1498 ! fheat_res(ji,jj) = fheat_res(ji,jj) - xtmp 1584 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * ( 1 - zmask(ji,jj) )1499 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * ( 1._wp - zmask(ji,jj) ) 1585 1500 END DO 1586 1501 END DO … … 1604 1519 !!gm xtmp = ( rhosn*cpic*( rtt-t_s(ji,jj,1,jl) ) + rhosn*lfus ) * r1_rdtice !RB ??????? 1605 1520 1606 t_s(ji,jj,1,jl) = rtt * zmask(ji,jj) + t_s(ji,jj,1,jl) * ( 1 - zmask(ji,jj) )1521 t_s(ji,jj,1,jl) = rtt * zmask(ji,jj) + t_s(ji,jj,1,jl) * ( 1._wp - zmask(ji,jj) ) 1607 1522 1608 1523 !----------------------------------------------------------------- … … 1618 1533 1619 1534 ato_i(ji,jj) = a_i (ji,jj,jl) * zmask(ji,jj) + ato_i(ji,jj) 1620 a_i (ji,jj,jl) = a_i (ji,jj,jl) * ( 1 - zmask(ji,jj) )1621 v_i (ji,jj,jl) = v_i (ji,jj,jl) * ( 1 - zmask(ji,jj) )1622 v_s (ji,jj,jl) = v_s (ji,jj,jl) * ( 1 - zmask(ji,jj) )1623 t_su (ji,jj,jl) = t_su (ji,jj,jl) * ( 1 - zmask(ji,jj) ) + t_bo(ji,jj) * zmask(ji,jj)1624 oa_i (ji,jj,jl) = oa_i (ji,jj,jl) * ( 1 - zmask(ji,jj) )1625 smv_i(ji,jj,jl) = smv_i(ji,jj,jl) * ( 1 - zmask(ji,jj) )1535 a_i (ji,jj,jl) = a_i (ji,jj,jl) * ( 1._wp - zmask(ji,jj) ) 1536 v_i (ji,jj,jl) = v_i (ji,jj,jl) * ( 1._wp - zmask(ji,jj) ) 1537 v_s (ji,jj,jl) = v_s (ji,jj,jl) * ( 1._wp - zmask(ji,jj) ) 1538 t_su (ji,jj,jl) = t_su (ji,jj,jl) * ( 1._wp - zmask(ji,jj) ) + t_bo(ji,jj) * zmask(ji,jj) 1539 oa_i (ji,jj,jl) = oa_i (ji,jj,jl) * ( 1._wp - zmask(ji,jj) ) 1540 smv_i(ji,jj,jl) = smv_i(ji,jj,jl) * ( 1._wp - zmask(ji,jj) ) 1626 1541 ! 1627 1542 END DO -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90
r4293 r4333 45 45 PUBLIC lim_itd_shiftice 46 46 47 REAL(wp) :: epsi20 = 1.e-20_wp ! constant values48 REAL(wp) :: epsi13 = 1.e-13_wp !49 47 REAL(wp) :: epsi10 = 1.e-10_wp ! 48 REAL(wp) :: epsi06 = 1.e-6_wp ! 50 49 51 50 !!---------------------------------------------------------------------- … … 110 109 CALL lim_var_glo2eqv ! only for info 111 110 112 !---------------------------------------------------------------------------------------- 113 ! 4) Computation of trend terms and get back to old values 114 !---------------------------------------------------------------------------------------- 115 116 !- Trend terms 117 d_a_i_thd(:,:,:) = a_i(:,:,:) - old_a_i(:,:,:) 118 d_v_s_thd(:,:,:) = v_s(:,:,:) - old_v_s(:,:,:) 119 d_v_i_thd(:,:,:) = v_i(:,:,:) - old_v_i(:,:,:) 120 d_e_s_thd(:,:,:,:) = e_s(:,:,:,:) - old_e_s(:,:,:,:) 121 d_e_i_thd(:,:,:,:) = e_i(:,:,:,:) - old_e_i(:,:,:,:) 122 !?? d_oa_i_thd(:,:,:) = oa_i (:,:,:) - old_oa_i (:,:,:) 123 d_smv_i_thd(:,:,:) = 0._wp 124 IF( num_sal == 2 ) d_smv_i_thd(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:) 125 126 ! diag only (clem) 127 dv_dt_thd(:,:,:) = d_v_i_thd(:,:,:) * r1_rdtice * rday 128 129 IF(ln_ctl) THEN ! Control print 111 IF(ln_ctl) THEN ! Control print 130 112 CALL prt_ctl_info(' ') 131 113 CALL prt_ctl_info(' - Cell values : ') … … 183 165 ! ------------------------------- 184 166 ! 185 !- Recover Old values 186 a_i(:,:,:) = old_a_i (:,:,:) 187 v_s(:,:,:) = old_v_s (:,:,:) 188 v_i(:,:,:) = old_v_i (:,:,:) 189 e_s(:,:,:,:) = old_e_s (:,:,:,:) 190 e_i(:,:,:,:) = old_e_i (:,:,:,:) 191 !?? oa_i(:,:,:) = old_oa_i(:,:,:) 192 IF( num_sal == 2 ) smv_i(:,:,:) = old_smv_i(:,:,:) 193 ! 194 IF( nn_timing == 1 ) CALL timing_stop('limitd_th') 167 IF( nn_timing == 1 ) CALL timing_stop('limitd_th') 195 168 END SUBROUTINE lim_itd_th 196 169 ! … … 281 254 DO jj = 1, jpj 282 255 DO ji = 1, jpi 283 zindb = 1.0 -MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl)+epsi10)) !0 if no ice and 1 if yes284 ht_i(ji,jj,jl) = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl),epsi10) * zindb285 zindb = 1.0 -MAX(0.0,SIGN(1.0,-old_a_i(ji,jj,jl)+epsi10)) !0 if no ice and 1 if yes286 zht_i_o(ji,jj,jl) = old_v_i(ji,jj,jl) / MAX( old_a_i(ji,jj,jl),epsi10) * zindb287 IF( a_i(ji,jj,jl) > 1e-6 ) zdhice(ji,jj,jl) = ht_i(ji,jj,jl) - zht_i_o(ji,jj,jl)256 zindb = 1.0 - MAX( 0.0, SIGN( 1.0, - a_i(ji,jj,jl) + epsi10 ) ) !0 if no ice and 1 if yes 257 ht_i(ji,jj,jl) = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zindb 258 zindb = 1.0 - MAX( 0.0, SIGN( 1.0, - old_a_i(ji,jj,jl) + epsi10) ) !0 if no ice and 1 if yes 259 zht_i_o(ji,jj,jl) = old_v_i(ji,jj,jl) / MAX( old_a_i(ji,jj,jl), epsi10 ) * zindb 260 IF( a_i(ji,jj,jl) > epsi06 ) zdhice(ji,jj,jl) = ht_i(ji,jj,jl) - zht_i_o(ji,jj,jl) 288 261 END DO 289 262 END DO … … 329 302 ij = nind_j(ji) 330 303 ! 331 IF ( ( zht_i_o(ii,ij,jl) .GT.epsi10 ) .AND. &332 ( zht_i_o(ii,ij,jl+1) .GT.epsi10 ) ) THEN304 IF ( ( zht_i_o(ii,ij,jl) .GT. epsi10 ) .AND. & 305 ( zht_i_o(ii,ij,jl+1) .GT. epsi10 ) ) THEN 333 306 !interpolate between adjacent category growth rates 334 307 zslope = ( zdhice(ii,ij,jl+1) - zdhice(ii,ij,jl) ) / & … … 449 422 * a_i(ii,ij,klbnd) / ( a_i(ii,ij,klbnd) - zda0 ) 450 423 a_i(ii,ij,klbnd) = a_i(ii,ij,klbnd) - zda0 451 v_i(ii,ij,klbnd) = a_i(ii,ij,klbnd)*ht_i(ii,ij,klbnd) ! clem @useless ?424 v_i(ii,ij,klbnd) = a_i(ii,ij,klbnd)*ht_i(ii,ij,klbnd) ! clem-useless ? 452 425 ENDIF ! zetamax > 0 453 426 ! ji, a_i > epsi10 … … 541 514 a_i(ii,ij,1) = a_i(ii,ij,1) * ht_i(ii,ij,1) / hiclim 542 515 ht_i(ii,ij,1) = hiclim 543 v_i(ii,ij,1) = a_i(ii,ij,1) * ht_i(ii,ij,1) !clem @useless516 v_i(ii,ij,1) = a_i(ii,ij,1) * ht_i(ii,ij,1) !clem-useless 544 517 ENDIF 545 518 END DO !ji … … 604 577 REAL(wp) :: zdhr ! 1 / (hR - hL) 605 578 REAL(wp) :: zwk1, zwk2 ! temporary variables 606 REAL(wp) :: zacrith ! critical minimum concentration in an ice category 607 !!------------------------------------------------------------------ 608 ! 609 zacrith = 1.0e-6 579 !!------------------------------------------------------------------ 580 ! 610 581 ! 611 582 DO jj = 1, jpj 612 583 DO ji = 1, jpi 613 584 ! 614 IF( zremap_flag(ji,jj) == 1 .AND. a_i(ji,jj,num_cat) > zacrith&585 IF( zremap_flag(ji,jj) == 1 .AND. a_i(ji,jj,num_cat) > epsi10 & 615 586 & .AND. hice(ji,jj) > 0._wp ) THEN 616 587 … … 1015 986 ! end TECLIM change 1016 987 ! clem: how much of a_i you send in cat sup is somewhat arbitrary 1017 zdaice(ji,jj,jl) = a_i(ji,jj,jl) * ( ht_i(ji,jj,jl) - hi_max(jl) ) / ht_i(ji,jj,jl)988 zdaice(ji,jj,jl) = a_i(ji,jj,jl) * ( ht_i(ji,jj,jl) - hi_max(jl) + epsi10 ) / ht_i(ji,jj,jl) 1018 989 zdvice(ji,jj,jl) = v_i(ji,jj,jl) - ( a_i(ji,jj,jl) - zdaice(ji,jj,jl) ) * ( hi_max(jl) - epsi10 ) 1019 990 ENDIF … … 1043 1014 zshiftflag = 0 1044 1015 1016 !clem-change 1017 ! DO jj = 1, jpj 1018 ! DO ji = 1, jpi 1019 ! IF( a_i(ji,jj,jl+1) > epsi10 .AND. & 1020 ! ht_i(ji,jj,jl+1) <= hi_max(jl) ) THEN 1021 ! ! 1022 ! zshiftflag = 1 1023 ! zdonor(ji,jj,jl) = jl + 1 1024 ! zdaice(ji,jj,jl) = a_i(ji,jj,jl+1) 1025 ! zdvice(ji,jj,jl) = v_i(ji,jj,jl+1) 1026 ! ENDIF 1027 ! END DO ! ji 1028 ! END DO ! jj 1029 ! 1030 ! IF(lk_mpp) CALL mpp_max( zshiftflag ) 1031 ! 1032 ! IF( zshiftflag == 1 ) THEN ! Shift ice between categories 1033 ! CALL lim_itd_shiftice( klbnd, kubnd, zdonor, zdaice, zdvice ) 1034 ! ! Reset shift parameters 1035 ! zdonor(:,:,jl) = 0 1036 ! zdaice(:,:,jl) = 0._wp 1037 ! zdvice(:,:,jl) = 0._wp 1038 ! ENDIF 1039 !clem-change 1040 1041 ! clem-change begin: why not doing that? 1045 1042 DO jj = 1, jpj 1046 1043 DO ji = 1, jpi 1047 1044 IF( a_i(ji,jj,jl+1) > epsi10 .AND. & 1048 1045 ht_i(ji,jj,jl+1) <= hi_max(jl) ) THEN 1049 ! 1050 zshiftflag = 1 1051 zdonor(ji,jj,jl) = jl + 1 1052 zdaice(ji,jj,jl) = a_i(ji,jj,jl+1) 1053 zdvice(ji,jj,jl) = v_i(ji,jj,jl+1) 1046 ht_i(ji,jj,jl+1) = hi_max(jl) + epsi10 1047 a_i (ji,jj,jl+1) = v_i(ji,jj,jl+1) / ht_i(ji,jj,jl+1) 1054 1048 ENDIF 1055 1049 END DO ! ji 1056 1050 END DO ! jj 1057 1058 IF(lk_mpp) CALL mpp_max( zshiftflag ) 1059 1060 IF( zshiftflag == 1 ) THEN ! Shift ice between categories 1061 CALL lim_itd_shiftice( klbnd, kubnd, zdonor, zdaice, zdvice ) 1062 ! Reset shift parameters 1063 zdonor(:,:,jl) = 0 1064 zdaice(:,:,jl) = 0._wp 1065 zdvice(:,:,jl) = 0._wp 1066 ENDIF 1051 ! clem-change end 1067 1052 1068 1053 END DO ! jl -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r4269 r4333 50 50 PUBLIC lim_rhg ! routine called by lim_dyn (or lim_dyn_2) 51 51 52 REAL(wp) :: epsi10 = 1.e-10_wp ! 52 53 REAL(wp) :: rzero = 0._wp ! constant values 53 54 REAL(wp) :: rone = 1._wp ! constant values … … 426 427 !-Calculate stress tensor components zs1 and zs2 427 428 !-at centre of grid cells (see section 3.5 of CICE user's guide). 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 )429 zs1(ji,jj) = ( zs1(ji,jj) - dtotel*( ( 1._wp - alphaevp) * zs1(ji,jj) + & 430 & ( delta / deltat(ji,jj) - zdd(ji,jj) / deltat(ji,jj) ) * zpresh(ji,jj) ) ) & 431 & / ( 1._wp + alphaevp * dtotel ) 432 433 zs2(ji,jj) = ( zs2(ji,jj) - dtotel * ( ( 1._wp - alphaevp ) * ecc2 * zs2(ji,jj) - & 434 zdt(ji,jj) / deltat(ji,jj) * zpresh(ji,jj) ) ) & 435 & / ( 1._wp + alphaevp * ecc2 * dtotel ) 435 436 436 437 ! 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 )438 !zs1(ji,jj) = ( zs1(ji,jj) + dtotel * ( ( zdd(ji,jj) / deltat(ji,jj) - delta / deltat(ji,jj) ) & 439 ! & * zpresh(ji,jj) ) ) / ( 1._wp + dtotel ) 440 !zs2(ji,jj) = ( zs2(ji,jj) + dtotel * ( ecci * zdt(ji,jj) / deltat(ji,jj) * zpresh(ji,jj) ) ) & 441 ! & / ( 1._wp + dtotel ) 441 442 442 443 END DO … … 472 473 473 474 !-Calculate stress tensor component zs12 at corners (see section 3.5 of CICE user's guide). 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 )475 zs12(ji,jj) = ( zs12(ji,jj) - dtotel * ( (1.0-alphaevp) * ecc2 * zs12(ji,jj) - zds(ji,jj) / & 476 & ( 2._wp * deltac(ji,jj) ) * zpreshc(ji,jj) ) ) & 477 & / ( 1._wp + alphaevp * ecc2 * dtotel ) 477 478 478 479 ! 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 )480 !zs12(ji,jj) = ( zs12(ji,jj) + dtotel * & 481 ! & ( ecci * zds(ji,jj) / ( 2._wp * deltac(ji,jj) ) * zpreshc(ji,jj) ) ) & 482 ! & / ( 1.0 + dtotel ) 482 483 483 484 END DO ! ji … … 485 486 486 487 CALL lbc_lnk( zs12(:,:), 'F', 1. ) 487 488 !#if defined key_bdy489 ! ! clem: change zs1, zs2, zs12 at the boundary for each iteration490 ! CALL bdy_ice_lim_dyn( 2, zs1, zs2, zs12 )491 ! CALL lbc_lnk( zs1 (:,:), 'T', 1. )492 ! CALL lbc_lnk( zs2 (:,:), 'T', 1. )493 ! CALL lbc_lnk( zs12(:,:), 'F', 1. )494 !#endif495 488 496 489 ! Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002) … … 544 537 CALL agrif_rhg_lim2( jter, nevp, 'U' ) 545 538 #endif 539 #if defined key_bdy 540 ! clem: change u_ice and v_ice at the boundary for each iteration 541 CALL bdy_ice_lim_dyn( 'U' ) 542 #endif 546 543 547 544 !CDIR NOVERRCHK … … 572 569 CALL agrif_rhg_lim2( jter, nevp, 'V' ) 573 570 #endif 571 #if defined key_bdy 572 ! clem: change u_ice and v_ice at the boundary for each iteration 573 CALL bdy_ice_lim_dyn( 'V' ) 574 #endif 574 575 575 576 ELSE … … 599 600 CALL lbc_lnk( v_ice(:,:), 'V', -1. ) 600 601 #if defined key_agrif && defined key_lim2 601 CALL agrif_rhg_lim2( jter, nevp , 'V' ) 602 #endif 602 CALL agrif_rhg_lim2( jter, nevp, 'V' ) 603 #endif 604 #if defined key_bdy 605 ! clem: change u_ice and v_ice at the boundary for each iteration 606 CALL bdy_ice_lim_dyn( 'V' ) 607 #endif 603 608 604 609 !CDIR NOVERRCHK … … 632 637 CALL agrif_rhg_lim2( jter, nevp, 'U' ) 633 638 #endif 639 #if defined key_bdy 640 ! clem: change u_ice and v_ice at the boundary for each iteration 641 CALL bdy_ice_lim_dyn( 'U' ) 642 #endif 634 643 635 644 ENDIF 636 645 637 !#if defined key_bdy638 ! ! clem: change u_ice and v_ice at the boundary for each iteration639 ! CALL bdy_ice_lim_dyn( 1 )640 !#endif641 642 646 IF(ln_ctl) THEN 643 647 !--- Convergence test. … … 666 670 !CDIR NOVERRCHK 667 671 DO ji = fs_2, fs_jpim1 668 zindb = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - 1.0e-6) )669 !zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , 1.0e-06)672 zindb = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - epsi10 ) ) 673 !zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , epsi10 ) 670 674 zdummy = vt_i(ji,jj) 671 675 IF ( zdummy .LE. hminrhg ) THEN … … 684 688 #if defined key_bdy 685 689 ! clem: change u_ice and v_ice at the boundary 686 CALL bdy_ice_lim_dyn( 1 ) 690 CALL bdy_ice_lim_dyn( 'U' ) 691 CALL bdy_ice_lim_dyn( 'V' ) 687 692 #endif 688 693 689 694 DO jj = k_j1+1, k_jpj-1 690 695 DO ji = fs_2, fs_jpim1 691 zindb = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - 1.0e-6) )692 !zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , 1.0e-06)696 zindb = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - epsi10 ) ) 697 !zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , epsi10 ) 693 698 zdummy = vt_i(ji,jj) 694 699 IF ( zdummy .LE. hminrhg ) THEN … … 714 719 !- zdd(:,:), zdt(:,:): divergence and tension at centre 715 720 !- zds(:,:): shear on northeast corner of grid cells 716 zindb = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - 1.0e-6) )717 !zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , 1.0e-06)721 zindb = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - epsi10 ) ) 722 !zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , epsi10 ) 718 723 zdummy = vt_i(ji,jj) 719 724 IF ( zdummy .LE. hminrhg ) THEN -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r4302 r4333 51 51 PUBLIC lim_sbc_tau ! called by sbc_ice_lim 52 52 53 REAL(wp) :: epsi16 = 1.e-16_wp ! constant values54 53 REAL(wp) :: rzero = 0._wp 55 54 REAL(wp) :: rone = 1._wp … … 147 146 148 147 ! computation the solar flux at ocean surface 149 IF (lk_cpl) THEN ! be carfeful: not be ingtested yet148 IF (lk_cpl) THEN ! be carfeful: not been tested yet 150 149 ! original line 151 150 !zfcm1 = qsr_tot(ji,jj) + fstric(ji,jj) * at_i(ji,jj) … … 190 189 qns(ji,jj) = zfcm2 - fdtcn(ji,jj) ! non solar heat flux 191 190 ! ! fdtcn : turbulent oceanic heat flux 192 193 !!gm this IF prevents the vertorisation of the whole loop194 ! IF ( ( ji == jiindx ) .AND. ( jj == jjindx) ) THEN195 ! WRITE(numout,*) ' lim_sbc : heat fluxes '196 ! WRITE(numout,*) ' qsr : ', qsr(jiindx,jjindx)197 ! WRITE(numout,*) ' pfrld : ', pfrld(jiindx,jjindx)198 ! WRITE(numout,*) ' fstric : ', fstric (jiindx,jjindx)199 ! WRITE(numout,*)200 ! WRITE(numout,*) ' qns : ', qns(jiindx,jjindx)201 ! WRITE(numout,*) ' fdtcn : ', fdtcn(jiindx,jjindx)202 ! WRITE(numout,*) ' ifral : ', ifral203 ! WRITE(numout,*) ' ial : ', ial204 ! WRITE(numout,*) ' qcmif : ', qcmif(jiindx,jjindx)205 ! WRITE(numout,*) ' qldif : ', qldif(jiindx,jjindx)206 ! !WRITE(numout,*) ' qcmif / dt: ', qcmif(jiindx,jjindx) * r1_rdtice207 ! !WRITE(numout,*) ' qldif / dt: ', qldif(jiindx,jjindx) * r1_rdtice208 ! WRITE(numout,*) ' ifrdv : ', ifrdv209 ! WRITE(numout,*) ' qfvbq : ', qfvbq(jiindx,jjindx)210 ! WRITE(numout,*) ' qdtcn : ', qdtcn(jiindx,jjindx)211 ! !WRITE(numout,*) ' qfvbq / dt: ', qfvbq(jiindx,jjindx) * r1_rdtice212 ! !WRITE(numout,*) ' qdtcn / dt: ', qdtcn(jiindx,jjindx) * r1_rdtice213 ! WRITE(numout,*) ' '214 ! WRITE(numout,*) ' fdtcn : ', fdtcn(jiindx,jjindx)215 ! WRITE(numout,*) ' fhmec : ', fhmec(jiindx,jjindx)216 ! WRITE(numout,*) ' fheat_mec : ', fheat_mec(jiindx,jjindx)217 ! WRITE(numout,*) ' fhbri : ', fhbri(jiindx,jjindx)218 ! WRITE(numout,*) ' fheat_res : ', fheat_res(jiindx,jjindx)219 ! ENDIF220 !!gm end221 191 END DO 222 192 END DO -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r4295 r4333 50 50 PUBLIC lim_thd_init ! called by iceini module 51 51 52 REAL(wp) :: epsi20 = 1e-20_wp ! constant values 53 REAL(wp) :: epsi16 = 1e-16_wp ! 54 REAL(wp) :: epsi10 = 1e-10_wp ! 55 REAL(wp) :: epsi06 = 1e-06_wp ! 56 REAL(wp) :: epsi04 = 1e-04_wp ! 52 REAL(wp) :: epsi10 = 1.e-10_wp ! 57 53 REAL(wp) :: zzero = 0._wp ! 58 54 REAL(wp) :: zone = 1._wp ! … … 126 122 DO ji = 1, jpi 127 123 !Energy of melting q(S,T) [J.m-3] 128 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_i(ji,jj,jl) , epsi 06) ) * REAL( nlay_i )124 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_i(ji,jj,jl) , epsi10 ) ) * REAL( nlay_i ) 129 125 !0 if no ice and 1 if yes 130 zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - ht_i(ji,jj,jl) ) )126 zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) + epsi10 ) ) 131 127 !convert units ! very important that this line is here 132 128 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac * zindb … … 138 134 DO ji = 1, jpi 139 135 !Energy of melting q(S,T) [J.m-3] 140 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi 06) ) * REAL( nlay_s )136 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi10 ) ) * REAL( nlay_s ) 141 137 !0 if no ice and 1 if yes 142 zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - ht_s(ji,jj,jl) ) )138 zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_s(ji,jj,jl) + epsi10 ) ) 143 139 !convert units ! very important that this line is here 144 140 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * unit_fac * zindb … … 147 143 END DO 148 144 END DO 149 150 !-----------------------------151 ! 1.3) Set some dummies to 0152 !-----------------------------153 !clem rdvosif(:,:) = 0.e0 ! variation of ice volume at surface154 !clem rdvobif(:,:) = 0.e0 ! variation of ice volume at bottom155 !clem fdvolif(:,:) = 0.e0 ! total variation of ice volume156 !clem rdvonif(:,:) = 0.e0 ! lateral variation of ice volume157 !clem fstric (:,:) = 0.e0 ! part of solar radiation transmitted through the ice158 !clem ffltbif(:,:) = 0.e0 ! linked with fstric159 !clem qfvbq (:,:) = 0.e0 ! linked with fstric160 !clem rdm_snw(:,:) = 0.e0 ! variation of snow mass per unit area161 !clem rdm_ice(:,:) = 0.e0 ! variation of ice mass per unit area162 !clem hicifp (:,:) = 0.e0 ! daily thermodynamic ice production.163 !clem sfx_bri(:,:) = 0.e0 ! brine flux contribution to salt flux to the ocean164 !clem fhbri (:,:) = 0.e0 ! brine flux contribution to heat flux to the ocean165 !clem sfx_thd(:,:) = 0.e0 ! equivalent salt flux to the ocean due to ice/growth decay166 145 167 146 !----------------------------------- … … 182 161 !CDIR NOVERRCHK 183 162 DO ji = 1, jpi 184 phicif(ji,jj) = vt_i(ji,jj) 185 pfrld(ji,jj) = 1.0 - at_i(ji,jj) 186 zinda = tms(ji,jj) * ( 1.0 - MAX( zzero , SIGN( zone , - at_i(ji,jj) ) ) ) 163 zinda = tms(ji,jj) * ( 1.0 - MAX( zzero , SIGN( zone , - at_i(ji,jj) + epsi10 ) ) ) 187 164 ! 188 165 ! ! solar irradiance transmission at the mixed layer bottom and used in the lead heat budget … … 195 172 196 173 ! here the drag will depend on ice thickness and type (0.006) 197 fdtcn(ji,jj) = zinda * rau0 * rcp * 0.006 * zfric_u * ( ( sst_m(ji,jj) + rt0) - t_bo(ji,jj) )174 fdtcn(ji,jj) = zinda * rau0 * rcp * 0.006 * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) 198 175 ! also category dependent 199 176 ! !-- Energy from the turbulent oceanic heat flux heat flux coming in the lead 200 qdtcn(ji,jj) = zinda * fdtcn(ji,jj) * ( 1.0 - at_i(ji,jj)) * rdt_ice177 qdtcn(ji,jj) = zinda * fdtcn(ji,jj) * ( 1.0 - at_i(ji,jj) ) * rdt_ice 201 178 ! 202 179 ! !-- Lead heat budget, qldif (part 1, next one is in limthd_dh) … … 214 191 zpareff = 1.0 - zinda * zfntlat 215 192 != 0 if ice and positive heat budget and 1 if one of those two is false 216 zqlbsbq(ji,jj) = qldif(ji,jj) * ( 1.0 - zpareff ) / MAX( at_i(ji,jj) * rdt_ice , epsi16)193 zqlbsbq(ji,jj) = qldif(ji,jj) * ( 1.0 - zpareff ) / ( rdt_ice * MAX( at_i(ji,jj), epsi10 ) ) 217 194 ! 218 195 ! Heat budget of the lead, energy transferred from ice to ocean … … 221 198 ! 222 199 ! Energy needed to bring ocean surface layer until its freezing (qcmif, limflx) 223 qcmif (ji,jj) = rau0 * rcp * fse3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0) )200 qcmif (ji,jj) = rau0 * rcp * fse3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) 224 201 ! 225 202 ! oceanic heat flux (limthd_dh) 226 fbif (ji,jj) = zinda * ( fsbbq(ji,jj) / MAX( at_i(ji,jj) , epsi 20 ) + fdtcn(ji,jj) )203 fbif (ji,jj) = zinda * ( fsbbq(ji,jj) / MAX( at_i(ji,jj) , epsi10 ) + fdtcn(ji,jj) ) 227 204 ! 228 205 END DO … … 240 217 ENDIF 241 218 242 zareamin = 1.e-10219 zareamin = epsi10 243 220 nbpb = 0 244 221 DO jj = 1, jpj … … 248 225 npb(nbpb) = (jj - 1) * jpi + ji 249 226 ENDIF 250 ! debug point to follow 251 IF ( (ji.eq.jiindx).AND.(jj.eq.jjindx) ) THEN 252 jiindex_1d = nbpb 253 ENDIF 254 END DO 255 END DO 227 END DO 228 END DO 229 230 ! debug point to follow 231 jiindex_1d = 0 232 IF( ln_nicep ) THEN 233 DO ji = mi0(jiindx), mi1(jiindx) 234 DO jj = mj0(jjindx), mj1(jjindx) 235 jiindex_1d = (jj - 1) * jpi + ji 236 END DO 237 END DO 238 ENDIF 256 239 257 240 !------------------------------------------------------------------------------! … … 315 298 !-------------------------------- 316 299 317 IF( con_i ) CALL lim_thd_enmelt( 1, nbpb ) ! computes sea ice energy of melting318 IF( con_i ) CALL lim_thd_glohec( qt_i_in, qt_s_in, q_i_layer_in, 1, nbpb, jl )300 IF( con_i .AND. jiindex_1d > 0 ) CALL lim_thd_enmelt( 1, nbpb ) ! computes sea ice energy of melting 301 IF( con_i .AND. jiindex_1d > 0 ) CALL lim_thd_glohec( qt_i_in, qt_s_in, q_i_layer_in, 1, nbpb, jl ) 319 302 320 303 ! !---------------------------------! … … 324 307 CALL lim_thd_enmelt( 1, nbpb ) ! computes sea ice energy of melting compulsory for limthd_dh 325 308 326 IF( con_i ) CALL lim_thd_glohec ( qt_i_fin, qt_s_fin, q_i_layer_fin, 1, nbpb, jl )327 IF( con_i ) CALL lim_thd_con_dif( 1 , nbpb , jl )309 IF( con_i .AND. jiindex_1d > 0 ) CALL lim_thd_glohec ( qt_i_fin, qt_s_fin, q_i_layer_fin, 1, nbpb, jl ) 310 IF( con_i .AND. jiindex_1d > 0 ) CALL lim_thd_con_dif( 1 , nbpb , jl ) 328 311 329 312 ! !---------------------------------! … … 340 323 341 324 ! CALL lim_thd_enmelt(1,nbpb) ! computes sea ice energy of melting 342 IF( con_i ) CALL lim_thd_glohec( qt_i_fin, qt_s_fin, q_i_layer_fin, 1, nbpb, jl )343 IF( con_i ) CALL lim_thd_con_dh ( 1 , nbpb , jl )325 IF( con_i .AND. jiindex_1d > 0 ) CALL lim_thd_glohec( qt_i_fin, qt_s_fin, q_i_layer_fin, 1, nbpb, jl ) 326 IF( con_i .AND. jiindex_1d > 0 ) CALL lim_thd_con_dh ( 1 , nbpb , jl ) 344 327 345 328 !-------------------------------- … … 431 414 !clem@mv-to-itd dv_dt_thd(:,:,:) = d_v_i_thd(:,:,:) * r1_rdtice * rday 432 415 433 IF( con_i ) fbif(:,:) = fbif(:,:) + zqlbsbq(:,:)416 IF( con_i .AND. jiindex_1d > 0 ) fbif(:,:) = fbif(:,:) + zqlbsbq(:,:) 434 417 435 418 IF(ln_ctl) THEN ! Control print … … 522 505 END DO 523 506 ! 524 IF(lwp)WRITE(numout,*) ' lim_thd_glohec '525 IF(lwp)WRITE(numout,*) ' qt_i_in : ', eti(jiindex_1d,jl) * r1_rdtice526 IF(lwp)WRITE(numout,*) ' qt_s_in : ', ets(jiindex_1d,jl) * r1_rdtice527 IF(lwp)WRITE(numout,*) ' qt_in : ', ( eti(jiindex_1d,jl) + ets(jiindex_1d,jl) ) * r1_rdtice507 WRITE(numout,*) ' lim_thd_glohec ' 508 WRITE(numout,*) ' qt_i_in : ', eti(jiindex_1d,jl) * r1_rdtice 509 WRITE(numout,*) ' qt_s_in : ', ets(jiindex_1d,jl) * r1_rdtice 510 WRITE(numout,*) ' qt_in : ', ( eti(jiindex_1d,jl) + ets(jiindex_1d,jl) ) * r1_rdtice 528 511 ! 529 512 END SUBROUTINE lim_thd_glohec … … 611 594 WRITE(numout,*) ' Number of points where there is a surf err gt than surf_err : ', numce, numit 612 595 613 IF (jiindex_1D.GT.0)WRITE(numout,*) ' fc_su : ', fc_su(jiindex_1d)614 IF (jiindex_1D.GT.0)WRITE(numout,*) ' fatm : ', fatm(jiindex_1d,jl)615 IF (jiindex_1D.GT.0)WRITE(numout,*) ' t_su : ', t_su_b(jiindex_1d)596 WRITE(numout,*) ' fc_su : ', fc_su(jiindex_1d) 597 WRITE(numout,*) ' fatm : ', fatm(jiindex_1d,jl) 598 WRITE(numout,*) ' t_su : ', t_su_b(jiindex_1d) 616 599 617 600 !--------------------------------------- -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r4161 r4333 32 32 PUBLIC lim_thd_dh ! called by lim_thd 33 33 34 REAL(wp) :: epsi20 = 1 e-20 ! constant values35 REAL(wp) :: epsi1 3 = 1e-13!36 REAL(wp) :: epsi1 6 = 1e-16!37 REAL(wp) :: zzero = 0. e0!38 REAL(wp) :: zone = 1. e0!34 REAL(wp) :: epsi20 = 1.e-20 ! constant values 35 REAL(wp) :: epsi10 = 1.e-10 ! 36 REAL(wp) :: epsi13 = 1.e-13 ! 37 REAL(wp) :: zzero = 0._wp ! 38 REAL(wp) :: zone = 1._wp ! 39 39 40 40 !!---------------------------------------------------------------------- … … 125 125 INTEGER :: num_iter_max, numce_dh 126 126 REAL(wp) :: meance_dh 127 REAL(wp) :: zinda 127 128 REAL(wp), POINTER, DIMENSION(:) :: zinnermelt 128 129 REAL(wp), POINTER, DIMENSION(:) :: zfbase, zdq_i … … 288 289 END DO 289 290 290 ! !-------------------291 IF( con_i ) THEN ! Conservation test292 ! !-------------------291 ! !------------------- 292 IF( con_i .AND. jiindex_1d > 0 ) THEN ! Conservation test 293 ! !------------------- 293 294 numce_dh = 0 294 295 meance_dh = 0._wp … … 494 495 END DO ! jk 495 496 496 ! !-------------------497 IF( con_i ) THEN ! Conservation test498 ! !-------------------497 ! !------------------- 498 IF( con_i .AND. jiindex_1d > 0 ) THEN ! Conservation test 499 ! !------------------- 499 500 DO ji = kideb, kiut 500 501 IF( ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) >= 0.e0 ) THEN … … 544 545 sfx_thd_1d(ji) = sfx_thd_1d(ji) - sm_i_b(ji) * a_i_b(ji) * zdvres * rhoic * r1_rdtice 545 546 ! ! excessive energy is sent to lateral ablation 546 fsup (ji) = rhoic * lfus * at_i_b(ji) / MAX( 1.0 - at_i_b(ji) , epsi13 ) * zdvres * r1_rdtice 547 zinda = MAX( 0._wp, SIGN( 1._wp , 1.0 - at_i_b(ji) - epsi10 ) ) 548 fsup(ji) = zinda * rhoic * lfus * at_i_b(ji) / MAX( 1.0 - at_i_b(ji) , epsi10 ) * zdvres * r1_rdtice 547 549 END DO 548 550 … … 577 579 578 580 ! energy of melting of remaining snow 579 zqt_s(ji) = ( 1. - zihg ) * zqt_s(ji) / MAX( zhni, epsi13 ) 581 zinda = MAX( 0._wp, SIGN( 1._wp , zhni - epsi10 ) ) 582 zqt_s(ji) = ( 1. - zihg ) * zqt_s(ji) / MAX( zhni, epsi10 ) * zinda 580 583 zdhnm = - ( 1. - zihg ) * ( 1. - zihgnew ) * zfdt_final(ji) / MAX( zqt_s(ji) , epsi13 ) 581 584 zhnfi = zhni + zdhnm … … 613 616 ENDIF 614 617 ! 615 ! diagnostic ( bottom ice growth )618 ! diagnostic 616 619 ii = MOD( npb(ji) - 1, jpi ) + 1 617 620 ij = ( npb(ji) - 1 ) / jpi + 1 … … 689 692 ! clem: new salinity difference stored (to be used in limthd_ent.F90) 690 693 IF ( num_sal == 2 ) THEN 691 i_ice_switch = 1.0 - MAX( 0.e0 , SIGN( 1.0 , - zhgnew(ji) + epsi13) )694 i_ice_switch = MAX( 0._wp , SIGN( 1._wp , zhgnew(ji) - epsi10 ) ) 692 695 ! salinity dif due to snow-ice formation 693 dsm_i_si_1d(ji) = ( zsm_snowice - sm_i_b(ji) ) * dh_snowice(ji) / MAX( zhgnew(ji), epsi1 3) * i_ice_switch696 dsm_i_si_1d(ji) = ( zsm_snowice - sm_i_b(ji) ) * dh_snowice(ji) / MAX( zhgnew(ji), epsi10 ) * i_ice_switch 694 697 ! salinity dif due to bottom growth 695 698 IF ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) < 0._wp ) THEN 696 dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_b(ji) ) * dh_i_bott(ji) / MAX( zhgnew(ji), epsi1 3) * i_ice_switch699 dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_b(ji) ) * dh_i_bott(ji) / MAX( zhgnew(ji), epsi10 ) * i_ice_switch 697 700 ENDIF 698 701 ENDIF -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r4205 r4333 31 31 PUBLIC lim_thd_dif ! called by lim_thd 32 32 33 REAL(wp) :: epsi20 = 1e-20 ! constant values 34 REAL(wp) :: epsi13 = 1e-13 ! constant values 35 33 REAL(wp) :: epsi10 = 1.e-10_wp ! 36 34 !!---------------------------------------------------------------------- 37 35 !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) … … 107 105 INTEGER, DIMENSION(kiut) :: numeqmax ! reference number of bottom equation 108 106 INTEGER, DIMENSION(kiut) :: isnow ! switch for presence (1) or absence (0) of snow 109 REAL(wp) :: zeps = 1.e-10_wp !110 107 REAL(wp) :: zg1s = 2._wp ! for the tridiagonal system 111 108 REAL(wp) :: zg1 = 2._wp ! … … 114 111 REAL(wp) :: zraext_s = 1.e+8_wp ! extinction coefficient of radiation in the snow 115 112 REAL(wp) :: zkimin = 0.10_wp ! minimum ice thermal conductivity 116 REAL(wp) :: zht_smin = 1.e-4_wp ! minimum snow depth117 113 REAL(wp) :: ztmelt_i ! ice melting temperature 118 114 REAL(wp) :: zerritmax ! current maximal error on temperature … … 312 308 IF( thcon_i_swi == 0 ) THEN ! Untersteiner (1964) formula 313 309 DO ji = kideb , kiut 314 ztcond_i(ji,0) = rcdic + zbeta*s_i_b(ji,1) / MIN(- zeps,t_i_b(ji,1)-rtt)310 ztcond_i(ji,0) = rcdic + zbeta*s_i_b(ji,1) / MIN(-epsi10,t_i_b(ji,1)-rtt) 315 311 ztcond_i(ji,0) = MAX(ztcond_i(ji,0),zkimin) 316 312 END DO … … 318 314 DO ji = kideb , kiut 319 315 ztcond_i(ji,layer) = rcdic + zbeta*( s_i_b(ji,layer) + s_i_b(ji,layer+1) ) / & 320 MIN(-2.0_wp * zeps, t_i_b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt)316 MIN(-2.0_wp * epsi10, t_i_b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt) 321 317 ztcond_i(ji,layer) = MAX(ztcond_i(ji,layer),zkimin) 322 318 END DO … … 326 322 IF( thcon_i_swi == 1 ) THEN ! Pringle et al formula included: 2.11 + 0.09 S/T - 0.011.T 327 323 DO ji = kideb , kiut 328 ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_b(ji,1) / MIN( - zeps, t_i_b(ji,1)-rtt ) &324 ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_b(ji,1) / MIN( -epsi10, t_i_b(ji,1)-rtt ) & 329 325 & - 0.011_wp * ( t_i_b(ji,1) - rtt ) 330 326 ztcond_i(ji,0) = MAX( ztcond_i(ji,0), zkimin ) … … 333 329 DO ji = kideb , kiut 334 330 ztcond_i(ji,layer) = rcdic + 0.090_wp * ( s_i_b(ji,layer) + s_i_b(ji,layer+1) ) & 335 & / MIN(-2.0_wp * zeps, t_i_b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt) &331 & / MIN(-2.0_wp * epsi10, t_i_b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt) & 336 332 & - 0.0055_wp* ( t_i_b(ji,layer) + t_i_b(ji,layer+1) - 2.0*rtt ) 337 333 ztcond_i(ji,layer) = MAX( ztcond_i(ji,layer), zkimin ) … … 339 335 END DO 340 336 DO ji = kideb , kiut 341 ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_b(ji,nlay_i) / MIN(- zeps,t_bo_b(ji)-rtt) &337 ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_b(ji,nlay_i) / MIN(-epsi10,t_bo_b(ji)-rtt) & 342 338 & - 0.011_wp * ( t_bo_b(ji) - rtt ) 343 339 ztcond_i(ji,nlay_i) = MAX( ztcond_i(ji,nlay_i), zkimin ) … … 352 348 353 349 !-- Snow kappa factors 354 zkappa_s(ji,0) = rcdsn / MAX( zeps,zh_s(ji))355 zkappa_s(ji,nlay_s) = rcdsn / MAX( zeps,zh_s(ji))350 zkappa_s(ji,0) = rcdsn / MAX(epsi10,zh_s(ji)) 351 zkappa_s(ji,nlay_s) = rcdsn / MAX(epsi10,zh_s(ji)) 356 352 END DO 357 353 … … 359 355 DO ji = kideb , kiut 360 356 zkappa_s(ji,layer) = 2.0 * rcdsn / & 361 MAX( zeps,2.0*zh_s(ji))357 MAX(epsi10,2.0*zh_s(ji)) 362 358 END DO 363 359 END DO … … 367 363 !-- Ice kappa factors 368 364 zkappa_i(ji,layer) = 2.0*ztcond_i(ji,layer)/ & 369 MAX( zeps,2.0*zh_i(ji))370 END DO 371 END DO 372 373 DO ji = kideb , kiut 374 zkappa_i(ji,0) = ztcond_i(ji,0)/MAX( zeps,zh_i(ji))375 zkappa_i(ji,nlay_i) = ztcond_i(ji,nlay_i) / MAX( zeps,zh_i(ji))365 MAX(epsi10,2.0*zh_i(ji)) 366 END DO 367 END DO 368 369 DO ji = kideb , kiut 370 zkappa_i(ji,0) = ztcond_i(ji,0)/MAX(epsi10,zh_i(ji)) 371 zkappa_i(ji,nlay_i) = ztcond_i(ji,nlay_i) / MAX(epsi10,zh_i(ji)) 376 372 !-- Interface 377 zkappa_s(ji,nlay_s) = 2.0*rcdsn*ztcond_i(ji,0)/MAX( zeps, &373 zkappa_s(ji,nlay_s) = 2.0*rcdsn*ztcond_i(ji,0)/MAX(epsi10, & 378 374 (ztcond_i(ji,0)*zh_s(ji) + rcdsn*zh_i(ji))) 379 375 zkappa_i(ji,0) = zkappa_s(ji,nlay_s)*REAL( isnow(ji) ) & … … 389 385 ztitemp(ji,layer) = t_i_b(ji,layer) 390 386 zspeche_i(ji,layer) = cpic + zgamma*s_i_b(ji,layer)/ & 391 MAX((t_i_b(ji,layer)-rtt)*(ztiold(ji,layer)-rtt), zeps)387 MAX((t_i_b(ji,layer)-rtt)*(ztiold(ji,layer)-rtt),epsi10) 392 388 zeta_i(ji,layer) = rdt_ice / MAX(rhoic*zspeche_i(ji,layer)*zh_i(ji), & 393 zeps)389 epsi10) 394 390 END DO 395 391 END DO … … 398 394 DO ji = kideb , kiut 399 395 ztstemp(ji,layer) = t_s_b(ji,layer) 400 zeta_s(ji,layer) = rdt_ice / MAX(rhosn*cpic*zh_s(ji), zeps)396 zeta_s(ji,layer) = rdt_ice / MAX(rhosn*cpic*zh_s(ji),epsi10) 401 397 END DO 402 398 END DO … … 707 703 END DO ! End of the do while iterative procedure 708 704 709 IF( ln_nicep ) THEN705 IF( ln_nicep .AND. lwp ) THEN 710 706 WRITE(numout,*) ' zerritmax : ', zerritmax 711 707 WRITE(numout,*) ' nconv : ', nconv … … 732 728 ! Heat conservation ! 733 729 !-------------------------! 734 IF( con_i ) THEN730 IF( con_i .AND. jiindex_1d > 0 ) THEN 735 731 DO ji = kideb, kiut 736 732 ! Upper snow value -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90
r4161 r4333 36 36 PUBLIC lim_thd_ent ! called by lim_thd 37 37 38 REAL(wp) :: epsi20 = 1e-20_wp ! constant values 39 REAL(wp) :: epsi13 = 1e-13_wp ! 40 REAL(wp) :: epsi10 = 1e-10_wp ! 41 REAL(wp) :: epsi06 = 1e-06_wp ! 38 REAL(wp) :: epsi20 = 1.e-20_wp ! constant values 39 REAL(wp) :: epsi10 = 1.e-10_wp ! 42 40 REAL(wp) :: zzero = 0._wp ! 43 41 REAL(wp) :: zone = 1._wp ! … … 122 120 REAL(wp), POINTER, DIMENSION(:,:) :: zhl0 ! old and new layer thicknesses 123 121 REAL(wp), POINTER, DIMENSION(:,:) :: zrl01 122 123 REAL(wp) :: zinda 124 124 !!------------------------------------------------------------------- 125 125 … … 391 391 DO layer1 = ntop1, nbot1 392 392 DO ji = kideb, kiut 393 zrl01(layer1,layer0) = MAX(0.0,( MIN(zm0(ji,layer0),z_s(ji,layer1)) & 393 zinda = MAX( 0._wp, SIGN( 1._wp , zhl0(ji,layer0) - epsi10 ) ) 394 zrl01(layer1,layer0) = zinda * MAX(0.0,( MIN(zm0(ji,layer0),z_s(ji,layer1)) & 394 395 & - MAX(zm0(ji,layer0-1), z_s(ji,layer1-1))) / MAX(zhl0(ji,layer0),epsi10)) 395 396 q_s_b(ji,layer1) = q_s_b(ji,layer1) + zrl01(layer1,layer0)*qm0(ji,layer0) & … … 407 408 END DO 408 409 409 IF ( con_i ) THEN410 IF ( con_i .AND. jiindex_1d > 0 ) THEN 410 411 DO ji = kideb, kiut 411 412 IF ( ABS ( zqts_in(ji) - zqts_fin(ji) ) * r1_rdtice > 1.0e-6 ) THEN … … 429 430 DO jk = 1, nlay_s 430 431 DO ji = kideb, kiut 431 q_s_b(ji,jk) = q_s_b(ji,jk) / MAX( zh_s(ji) , epsi20 ) 432 zinda = MAX( 0._wp, SIGN( 1._wp , zh_s(ji) - epsi10 ) ) 433 q_s_b(ji,jk) = zinda * q_s_b(ji,jk) / MAX( zh_s(ji) , epsi10 ) 432 434 END DO !ji 433 435 END DO !jk … … 555 557 DO ji = kideb, kiut 556 558 ! Heat conservation 557 zqti_in(ji) = zqti_in(ji) + qm0(ji,jk) * MAX( 0.0 , SIGN(1.0,ht_i_b(ji)-epsi 06) ) &559 zqti_in(ji) = zqti_in(ji) + qm0(ji,jk) * MAX( 0.0 , SIGN(1.0,ht_i_b(ji)-epsi10) ) & 558 560 & * MAX( 0.0 , SIGN( 1. , REAL(nbot0(ji) - jk) ) ) 559 561 END DO … … 601 603 DO layer1 = ntop1, nbot1 602 604 DO ji = kideb, kiut 603 zrl01(layer1,layer0) = MAX(0.0,( MIN(zm0(ji,layer0),z_i(ji,layer1)) & 605 zinda = MAX( 0._wp, SIGN( 1._wp , zhl0(ji,layer0) - epsi10 ) ) 606 zrl01(layer1,layer0) = zinda * MAX(0.0,( MIN(zm0(ji,layer0),z_i(ji,layer1)) & 604 607 - MAX(zm0(ji,layer0-1), z_i(ji,layer1-1)))/MAX(zhl0(ji,layer0),epsi10)) 605 608 q_i_b(ji,layer1) = q_i_b(ji,layer1) & 606 609 + zrl01(layer1,layer0)*qm0(ji,layer0) & 607 * MAX(0.0,SIGN(1.0,ht_i_b(ji)-epsi 06)) &610 * MAX(0.0,SIGN(1.0,ht_i_b(ji)-epsi10)) & 608 611 * MAX(0.0,SIGN(1.0,REAL(nbot0(ji)-layer0))) 609 612 END DO … … 621 624 END DO 622 625 ! 623 IF ( con_i ) THEN626 IF ( con_i .AND. jiindex_1d > 0 ) THEN 624 627 DO ji = kideb, kiut 625 628 IF ( ABS ( zqti_in(ji) - zqti_fin(ji) ) * r1_rdtice > 1.0e-6 ) THEN … … 646 649 DO jk = 1, nlay_i 647 650 DO ji = kideb, kiut 648 q_i_b(ji,jk) = q_i_b(ji,jk) / MAX( zh_i(ji) , epsi20 ) 651 zinda = MAX( 0._wp, SIGN( 1._wp , zh_i(ji) - epsi10 ) ) 652 q_i_b(ji,jk) = zinda * q_i_b(ji,jk) / MAX( zh_i(ji) , epsi10 ) 649 653 END DO !ji 650 654 END DO !jk -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r4161 r4333 36 36 PUBLIC lim_thd_lac ! called by lim_thd 37 37 38 REAL(wp) :: epsi20 = 1e-20_wp ! constant values 39 REAL(wp) :: epsi13 = 1e-13_wp ! 40 REAL(wp) :: epsi11 = 1e-11_wp ! 41 REAL(wp) :: epsi10 = 1e-10_wp ! 42 REAL(wp) :: epsi06 = 1e-06_wp ! 43 REAL(wp) :: epsi03 = 1e-03_wp ! 38 REAL(wp) :: epsi10 = 1.e-10_wp ! 44 39 REAL(wp) :: zzero = 0._wp ! 45 40 REAL(wp) :: zone = 1._wp ! … … 160 155 !Energy of melting q(S,T) [J.m-3] 161 156 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / MAX( area(ji,jj) * v_i(ji,jj,jl) , epsi10 ) * REAL( nlay_i ) 162 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , -v_i(ji,jj,jl) ) ) !0 if no ice and 1 if yes157 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , -v_i(ji,jj,jl) + epsi10 ) ) !0 if no ice and 1 if yes 163 158 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac * zindb 164 159 END DO … … 286 281 nbpac = nbpac + 1 287 282 npac( nbpac ) = (jj - 1) * jpi + ji 288 IF( ji == jiindx .AND. jj == jjindx ) jiindex_1d = nbpac289 283 ENDIF 290 284 END DO 291 285 END DO 292 286 293 IF( ln_nicep ) WRITE(numout,*) 'lim_thd_lac : nbpac = ', nbpac 287 ! debug point to follow 288 jiindex_1d = 0 289 IF( ln_nicep ) THEN 290 DO ji = mi0(jiindx), mi1(jiindx) 291 DO jj = mj0(jjindx), mj1(jjindx) 292 IF ( tms(ji,jj) * ( qcmif(ji,jj) - qldif(ji,jj) ) > 0._wp ) THEN 293 jiindex_1d = (jj - 1) * jpi + ji 294 ENDIF 295 END DO 296 END DO 297 ENDIF 298 299 IF( ln_nicep ) WRITE(numout,*) 'lim_thd_lac : nbpac = ', nbpac 294 300 295 301 !------------------------------ … … 499 505 END DO 500 506 501 IF( ln_nicep ) WRITE(numout,*) ' zv_i_ac : ', zv_i_ac(jiindx, 1:jpl)507 IF( ln_nicep .AND. jiindex_1d > 0 ) WRITE(numout,*) ' zv_i_ac : ', zv_i_ac(jiindex_1d, 1:jpl) 502 508 DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) 503 509 DO ji = 1, nbpac 504 510 zindb = MAX( 0._wp, SIGN( 1._wp , zdv_res(ji) ) ) 505 zinda = MAX( 0._wp, SIGN( 1._wp , zat_i_lev(ji) - epsi 06) ) ! clem506 zv_i_ac(ji,jl) = zv_i_ac(ji,jl) + zindb * zinda * zdv_res(ji) * za_i_ac(ji,jl) / MAX( zat_i_lev(ji) , epsi 06)507 END DO 508 END DO 509 IF( ln_nicep ) WRITE(numout,*) ' zv_i_ac : ', zv_i_ac(jiindx, 1:jpl)511 zinda = MAX( 0._wp, SIGN( 1._wp , zat_i_lev(ji) - epsi10 ) ) ! clem 512 zv_i_ac(ji,jl) = zv_i_ac(ji,jl) + zindb * zinda * zdv_res(ji) * za_i_ac(ji,jl) / MAX( zat_i_lev(ji) , epsi10 ) 513 END DO 514 END DO 515 IF( ln_nicep .AND. jiindex_1d > 0 ) WRITE(numout,*) ' zv_i_ac : ', zv_i_ac(jiindex_1d, 1:jpl) 510 516 511 517 !--------------------------------- … … 649 655 ! CALL lim_cons_check (et_s_init, et_s_final, 1.0e-3, fieldid) 650 656 IF( ln_nicep ) THEN 651 WRITE(numout,*) ' vt_i_init : ', vt_i_init(jiindx,jjindx) 652 WRITE(numout,*) ' vt_i_final: ', vt_i_final(jiindx,jjindx) 653 WRITE(numout,*) ' et_i_init : ', et_i_init(jiindx,jjindx) 654 WRITE(numout,*) ' et_i_final: ', et_i_final(jiindx,jjindx) 657 DO ji = mi0(jiindx), mi1(jiindx) 658 DO jj = mj0(jjindx), mj1(jjindx) 659 WRITE(numout,*) ' vt_i_init : ', vt_i_init (ji,jj) 660 WRITE(numout,*) ' vt_i_final: ', vt_i_final(ji,jj) 661 WRITE(numout,*) ' et_i_init : ', et_i_init (ji,jj) 662 WRITE(numout,*) ' et_i_final: ', et_i_final(ji,jj) 663 END DO 664 END DO 655 665 ENDIF 656 666 ! -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r4259 r4333 36 36 PUBLIC lim_trp ! called by ice_step 37 37 38 REAL(wp) :: epsi06 = 1.e-06_wp ! constant values39 REAL(wp) :: epsi03 = 1.e-03_wp40 38 REAL(wp) :: epsi10 = 1.e-10_wp 41 REAL(wp) :: epsi16 = 1.e-16_wp42 REAL(wp) :: epsi20 = 1.e-20_wp43 39 REAL(wp) :: rzero = 0._wp 44 40 REAL(wp) :: rone = 1._wp … … 446 442 447 443 ! Switches and dummy variables 448 zusvosn = 1.0/MAX( v_s(ji,jj,jl) , epsi1 6)449 zusvoic = 1.0/MAX( v_i(ji,jj,jl) , epsi1 6)444 zusvosn = 1.0/MAX( v_s(ji,jj,jl) , epsi10 ) 445 zusvoic = 1.0/MAX( v_i(ji,jj,jl) , epsi10 ) 450 446 zindsn = MAX( rzero, SIGN( rone, v_s(ji,jj,jl) - epsi10 ) ) 451 447 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi10 ) ) … … 458 454 ENDIF 459 455 460 zage = MAX( MIN( zbigval, zs0oi(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi1 6) ), 0._wp ) * a_i(ji,jj,jl)456 zage = MAX( MIN( zbigval, zs0oi(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) ), 0._wp ) * a_i(ji,jj,jl) 461 457 oa_i (ji,jj,jl) = zindic * zage 462 458 … … 498 494 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) ! ice concentration 499 495 ! 500 zinda = MAX( rzero , SIGN( rone , at_i(ji,jj) - epsi1 6) )501 icethi(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj) , epsi1 6) * zinda ! ice thickness496 zinda = MAX( rzero , SIGN( rone , at_i(ji,jj) - epsi10 ) ) 497 icethi(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj) , epsi10 ) * zinda ! ice thickness 502 498 END DO 503 499 END DO -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90
r4293 r4333 48 48 PUBLIC lim_update1 ! routine called by ice_step 49 49 50 REAL(wp) :: epsi06 = 1.e-06_wp ! module constants51 REAL(wp) :: epsi04 = 1.e-04_wp ! - -52 REAL(wp) :: epsi03 = 1.e-03_wp ! - -53 50 REAL(wp) :: epsi10 = 1.e-10_wp ! - - 54 REAL(wp) :: epsi16 = 1.e-16_wp ! - -55 REAL(wp) :: epsi20 = 1.e-20_wp ! - -56 51 REAL(wp) :: rzero = 0._wp ! - - 57 52 REAL(wp) :: rone = 1._wp ! - - … … 108 103 !------------------------------------------------------------------------------ 109 104 110 !--------------------- 111 ! Ice dynamics 112 !--------------------- 113 u_ice(:,:) = u_ice(:,:) + d_u_ice_dyn(:,:) 114 v_ice(:,:) = v_ice(:,:) + d_v_ice_dyn(:,:) 115 116 !----------------------------- 117 ! Update ice and snow volumes 118 !----------------------------- 119 DO jl = 1, jpl 120 v_i(:,:,jl) = v_i(:,:,jl) + d_v_i_trp(:,:,jl) 121 v_s(:,:,jl) = v_s(:,:,jl) + d_v_s_trp(:,:,jl) 122 END DO 123 124 125 !--------------------------------------------- 126 ! Ice concentration and ice heat content 127 !--------------------------------------------- 128 a_i (:,:,:) = a_i (:,:,:) + d_a_i_trp(:,:,:) 129 e_i(:,:,:,:) = e_i(:,:,:,:) + d_e_i_trp(:,:,:,:) 130 131 !------------------------------ 132 ! Snow temperature and ice age 133 !------------------------------ 134 e_s (:,:,:,:) = e_s (:,:,:,:) + d_e_s_trp (:,:,:,:) 135 oa_i(:,:,:) = oa_i(:,:,:) + d_oa_i_trp(:,:,:) 136 137 !-------------- 138 ! Ice salinity 139 !-------------- 140 IF( num_sal == 2 ) THEN ! general case 141 smv_i(:,:,:) = smv_i(:,:,:) + d_smv_i_trp(:,:,:) 142 ENDIF 105 !----------------- 106 ! Trend terms 107 !----------------- 108 d_u_ice_dyn(:,:) = u_ice(:,:) - old_u_ice(:,:) 109 d_v_ice_dyn(:,:) = v_ice(:,:) - old_v_ice(:,:) 110 d_a_i_trp (:,:,:) = a_i (:,:,:) - old_a_i (:,:,:) 111 d_v_s_trp (:,:,:) = v_s (:,:,:) - old_v_s (:,:,:) 112 d_v_i_trp (:,:,:) = v_i (:,:,:) - old_v_i (:,:,:) 113 d_e_s_trp (:,:,:,:) = e_s (:,:,:,:) - old_e_s (:,:,:,:) 114 d_e_i_trp (:,:,:,:) = e_i (:,:,:,:) - old_e_i (:,:,:,:) 115 d_oa_i_trp (:,:,:) = oa_i (:,:,:) - old_oa_i (:,:,:) 116 d_smv_i_trp(:,:,:) = 0._wp 117 IF( num_sal == 2 ) d_smv_i_trp(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:) 143 118 144 119 ! mass and salt flux init (clem) … … 160 135 CALL lim_var_glo2eqv 161 136 162 !---------------------------------163 ! Classify the pathological cases164 !---------------------------------165 ! (1) v_i (new) > 0; d_v_i_thd + v_i(old) > 0 (easy case)166 ! (3) v_i (new) < 0; d_v_i_thd + v_i(old) > 0 (combined total ablation)167 ! (5) v_i (old) = 0; d_v_i_trp > 0 (advection of ice in a free-cell)168 !169 DO jl = 1, jpl170 DO jj = 1, jpj171 DO ji = 1, jpi172 patho_case(ji,jj,jl) = 1173 IF( v_i(ji,jj,jl) .LT. 0.0 ) THEN174 patho_case(ji,jj,jl) = 3175 ENDIF176 IF( ( old_v_i(ji,jj,jl) .LE. epsi10 ) .AND. ( d_v_i_trp(ji,jj,jl) .GT. epsi06 ) ) THEN177 patho_case(ji,jj,jl) = 5 ! advection of ice in an ice-free cell178 ENDIF179 END DO180 END DO181 END DO182 183 137 !-------------------------------------- 184 138 ! 2. Review of all pathological cases 185 139 !-------------------------------------- 186 140 141 ! clem: useless now 187 142 !------------------------------------------- 188 143 ! 2.1) Advection of ice in an ice-free cell 189 144 !------------------------------------------- 190 145 ! should be removed since it is treated after dynamics now 191 192 ! !IF( ln_nicep ) THEN 193 ! WRITE(numout,*) ' limupdate1 - before h correction ' 194 ! WRITE(numout,*) ' a_i : ', a_i(12, 44, 1:jpl) 195 ! WRITE(numout,*) ' at_i : ', at_i(12,44) 196 ! WRITE(numout,*) ' v_i : ', v_i(12, 44, 1:jpl) 197 ! WRITE(numout,*) ' ht_i : ', ht_i(12, 44, 1:jpl) 198 ! !ENDIF 146 ! zhimax = 5._wp 147 ! ! first category 148 ! DO jj = 1, jpj 149 ! DO ji = 1, jpi 150 ! !--- the thickness of such an ice is often out of bounds 151 ! !--- thus we recompute a new area while conserving ice volume 152 ! zat_i_old = SUM( old_a_i(ji,jj,:) ) 153 ! zindb = MAX( 0._wp, SIGN( 1._wp, ABS( d_a_i_trp(ji,jj,1) ) - epsi10 ) ) 154 ! IF( ( ABS( d_v_i_trp(ji,jj,1) ) / MAX( ABS( d_a_i_trp(ji,jj,1) ), epsi10 ) * zindb .GT. zhimax ) & 155 ! & .AND.( ( v_i(ji,jj,1) / MAX( a_i(ji,jj,1), epsi10 ) * zindb ) .GT. zhimax ) & 156 ! & .AND.( zat_i_old .LT. 1.e-6 ) ) THEN ! new line 157 ! ht_i(ji,jj,1) = hi_max(1) * 0.5_wp 158 ! a_i (ji,jj,1) = v_i(ji,jj,1) / ht_i(ji,jj,1) 159 ! ENDIF 160 ! END DO 161 ! END DO 199 162 ! 200 zhimax = 5._wp 201 ! first category 202 DO jj = 1, jpj 203 DO ji = 1, jpi 204 !--- the thickness of such an ice is often out of bounds 205 !--- thus we recompute a new area while conserving ice volume 206 zat_i_old = SUM( old_a_i(ji,jj,:) ) 207 zindb = MAX( 0._wp, SIGN( 1._wp, ABS( d_a_i_trp(ji,jj,1) ) - epsi10 ) ) 208 IF( ( ABS( d_v_i_trp(ji,jj,1) ) / MAX( ABS( d_a_i_trp(ji,jj,1) ), epsi10 ) * zindb .GT. zhimax ) & 209 & .AND.( ( v_i(ji,jj,1) / MAX( a_i(ji,jj,1), epsi10 ) * zindb ) .GT. zhimax ) & 210 & .AND.( zat_i_old .LT. 1.e-6 ) ) THEN ! new line 211 ht_i(ji,jj,1) = hi_max(1) * 0.5_wp 212 a_i (ji,jj,1) = v_i(ji,jj,1) / ht_i(ji,jj,1) 213 ENDIF 214 END DO 215 END DO 216 217 218 ! !IF( ln_nicep ) THEN 219 ! at_i(:,:) = 0._wp 220 ! DO jl = 1, jpl 221 ! at_i(:,:) = a_i(:,:,jl) + at_i(:,:) 222 ! END DO 223 ! WRITE(numout,*) ' limupdate1 - after h correction 1 ' 224 ! WRITE(numout,*) ' a_i : ', a_i(12, 44, 1:jpl) 225 ! WRITE(numout,*) ' at_i : ', at_i(12,44) 226 ! WRITE(numout,*) ' v_i : ', v_i(12, 44, 1:jpl) 227 ! WRITE(numout,*) ' ht_i : ', ht_i(12, 44, 1:jpl) 228 ! !ENDIF 229 230 zhimax = 20._wp 231 ! other categories 232 DO jl = 2, jpl 233 jm = ice_types(jl) 234 DO jj = 1, jpj 235 DO ji = 1, jpi 236 zindb = MAX( rzero, SIGN( rone, ABS( d_a_i_trp(ji,jj,jl) ) - epsi10 ) ) 237 ! this correction is very tricky... sometimes, advection gets wrong i don't know why 238 ! it makes problems when the advected volume and concentration do not seem to be 239 ! related with each other 240 ! the new thickness is sometimes very big! 241 ! and sometimes d_a_i_trp and d_v_i_trp have different sign 242 ! which of course is plausible 243 ! but fuck! it fucks everything up :) 244 IF ( ( ABS( d_v_i_trp(ji,jj,jl) ) / MAX( ABS( d_a_i_trp(ji,jj,jl) ), epsi10 ) * zindb .GT. zhimax ) & 245 & .AND. ( v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zindb ) .GT. zhimax ) THEN 246 ht_i(ji,jj,jl) = ( hi_max_typ(jl-ice_cat_bounds(jm,1),jm) + hi_max_typ(jl-ice_cat_bounds(jm,1)+1,jm) ) * 0.5_wp 247 a_i (ji,jj,jl) = v_i(ji,jj,jl) / ht_i(ji,jj,jl) 248 ENDIF 249 END DO ! ji 250 END DO !jj 251 END DO !jl 163 ! zhimax = 20._wp 164 ! ! other categories 165 ! DO jl = 2, jpl 166 ! jm = ice_types(jl) 167 ! DO jj = 1, jpj 168 ! DO ji = 1, jpi 169 ! zindb = MAX( rzero, SIGN( rone, ABS( d_a_i_trp(ji,jj,jl) ) - epsi10 ) ) 170 ! ! this correction is very tricky... sometimes, advection gets wrong i don't know why 171 ! ! it makes problems when the advected volume and concentration do not seem to be 172 ! ! related with each other 173 ! ! the new thickness is sometimes very big! 174 ! ! and sometimes d_a_i_trp and d_v_i_trp have different sign 175 ! ! which of course is plausible 176 ! ! but fuck! it fucks everything up :) 177 ! IF ( ( ABS( d_v_i_trp(ji,jj,jl) ) / MAX( ABS( d_a_i_trp(ji,jj,jl) ), epsi10 ) * zindb .GT. zhimax ) & 178 ! & .AND. ( v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zindb ) .GT. zhimax ) THEN 179 ! ht_i(ji,jj,jl) = ( hi_max_typ(jl-ice_cat_bounds(jm,1),jm) + hi_max_typ(jl-ice_cat_bounds(jm,1)+1,jm) ) * 0.5_wp 180 ! a_i (ji,jj,jl) = v_i(ji,jj,jl) / ht_i(ji,jj,jl) 181 ! ENDIF 182 ! END DO ! ji 183 ! END DO !jj 184 ! END DO !jl 252 185 253 186 at_i(:,:) = 0._wp … … 255 188 at_i(:,:) = a_i(:,:,jl) + at_i(:,:) 256 189 END DO 257 258 ! !IF( ln_nicep ) THEN259 ! WRITE(numout,*) ' limupdate1 - after h correction 2 '260 ! WRITE(numout,*) ' a_i : ', a_i(12, 44, 1:jpl)261 ! WRITE(numout,*) ' at_i : ', at_i(12,44)262 ! WRITE(numout,*) ' v_i : ', v_i(12, 44, 1:jpl)263 ! WRITE(numout,*) ' ht_i : ', ht_i(12, 44, 1:jpl)264 ! !ENDIF265 190 266 191 !---------------------------------------------------- … … 285 210 286 211 !switches 287 zindb = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi 06) )212 zindb = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi10 ) ) 288 213 !switch = 1 if a_i > 1e-06 and 0 if not 289 zindsn = MAX( rzero, SIGN( rone, v_s(ji,jj,jl) - epsi 06 ) ) !=1 if hs > 1e-6and 0 if not290 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi 04 ) ) !=1 if hi > 1e-3and 0 if not214 zindsn = MAX( rzero, SIGN( rone, v_s(ji,jj,jl) - epsi10 ) ) !=1 if hs > 1e-10 and 0 if not 215 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi10 ) ) !=1 if hi > 1e-10 and 0 if not 291 216 ! bug fix 25 avril 2007 292 217 zindb = zindb*zindic … … 332 257 !-------------------------------------------- 333 258 ! if greater than 0, ice concentration cannot be smaller than 1e-10 334 !clem a_i(ji,jj,jl) = zindb * MAX(zindsn, zindic) * MAX( a_i(ji,jj,jl), epsi06 )335 259 a_i(ji,jj,jl) = zindb * a_i(ji,jj,jl) 336 260 … … 352 276 DO jj = 1, jpj 353 277 DO ji = 1, jpi 354 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi 04) )278 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi10 ) ) 355 279 e_i(ji,jj,jk,jl)= zindic * ( MIN ( MAX ( 0.0, e_i(ji,jj,jk,jl) ), zbigvalue ) ) 356 280 END DO ! ji … … 370 294 DO ji = 1, jpi 371 295 z_da_ex = MAX( at_i(ji,jj) - amax , 0.0 ) 372 zindb = MAX( rzero, SIGN( rone, at_i(ji,jj) - epsi 06) )296 zindb = MAX( rzero, SIGN( rone, at_i(ji,jj) - epsi10 ) ) 373 297 DO jl = 1, jpl 374 z_da_i = a_i(ji,jj,jl) * z_da_ex / MAX( at_i(ji,jj), epsi 06) * zindb298 z_da_i = a_i(ji,jj,jl) * z_da_ex / MAX( at_i(ji,jj), epsi10 ) * zindb 375 299 a_i(ji,jj,jl) = MAX( 0._wp, a_i(ji,jj,jl) - z_da_i ) 376 300 ! 377 zinda = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi 06) )378 ht_i(ji,jj,jl) = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi 06) * zinda301 zinda = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi10 ) ) 302 ht_i(ji,jj,jl) = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zinda 379 303 !v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) ! makes ice shrinken but should not be used 380 304 END DO … … 412 336 !clem smv_i(ji,jj,jl) = MAX(MIN((rhoic-rhosn)/rhoic*sss_m(ji,jj),smv_i(ji,jj,jl)),0.1 * v_i(ji,jj,jl) ) 413 337 smv_i(ji,jj,jl) = MAX( MIN( s_i_max * v_i(ji,jj,jl), smv_i(ji,jj,jl) ), s_i_min * v_i(ji,jj,jl) ) 414 i_ice_switch = 1._wp - MAX( 0._wp, SIGN( 1._wp, -v_i(ji,jj,jl) + epsi20) )415 smv_i(ji,jj,jl) = i_ice_switch * smv_i(ji,jj,jl) + s_i_min * ( 1._wp - i_ice_switch ) * v_i(ji,jj,jl)338 i_ice_switch = 1._wp - MAX( 0._wp, SIGN( 1._wp, -v_i(ji,jj,jl) ) ) 339 smv_i(ji,jj,jl) = i_ice_switch * smv_i(ji,jj,jl) !+ s_i_min * ( 1._wp - i_ice_switch ) * v_i(ji,jj,jl) 416 340 END DO ! ji 417 341 END DO ! jj … … 512 436 CALL prt_ctl(tab2d_1=old_oa_i (:,:,jl) , clinfo1= ' lim_update1 : old_oa_i : ') 513 437 CALL prt_ctl(tab2d_1=d_oa_i_trp (:,:,jl) , clinfo1= ' lim_update1 : d_oa_i_trp : ') 514 CALL prt_ctl(tab2d_1=REAL(patho_case(:,:,jl)) , clinfo1= ' lim_update1 : Path. case : ')515 438 516 439 DO jk = 1, nlay_i -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90
r4293 r4333 45 45 PUBLIC lim_update2 ! routine called by ice_step 46 46 47 REAL(wp) :: epsi06 = 1.e-06_wp ! module constants48 REAL(wp) :: epsi04 = 1.e-04_wp ! - -49 47 REAL(wp) :: epsi10 = 1.e-10_wp ! - - 50 REAL(wp) :: epsi16 = 1.e-16_wp ! - -51 REAL(wp) :: epsi20 = 1.e-20_wp ! - -52 48 REAL(wp) :: rzero = 0._wp ! - - 53 49 REAL(wp) :: rone = 1._wp ! - - … … 102 98 CALL wrk_alloc( jpi,jpj,jpl,zviold, zvsold, zsmvold ) ! clem 103 99 104 !------------------------------------------------------------------------------ 105 ! 1. Update of Global variables | 106 !------------------------------------------------------------------------------ 107 108 !----------------------------- 109 ! Update ice and snow volumes 110 !----------------------------- 111 DO jl = 1, jpl 112 v_i(:,:,jl) = v_i(:,:,jl) + d_v_i_thd(:,:,jl) 113 v_s(:,:,jl) = v_s(:,:,jl) + d_v_s_thd(:,:,jl) 114 END DO 115 116 !--------------------------------------------- 117 ! Ice concentration and ice heat content 118 !--------------------------------------------- 119 a_i (:,:,:) = a_i (:,:,:) + d_a_i_thd(:,:,:) 120 e_i(:,:,:,:) = e_i(:,:,:,:) + d_e_i_thd(:,:,:,:) 121 122 !------------------------------ 123 ! Snow temperature and ice age 124 !------------------------------ 125 e_s (:,:,:,:) = e_s (:,:,:,:) + d_e_s_thd (:,:,:,:) 126 oa_i(:,:,:) = oa_i(:,:,:) + d_oa_i_thd(:,:,:) 127 128 !-------------- 129 ! Ice salinity 130 !-------------- 131 IF( num_sal == 2 ) THEN ! general case 132 smv_i(:,:,:) = smv_i(:,:,:) + d_smv_i_thd(:,:,:) 133 ENDIF 100 !---------------------------------------------------------------------------------------- 101 ! 1. Computation of trend terms 102 !---------------------------------------------------------------------------------------- 103 !- Trend terms 104 d_a_i_thd(:,:,:) = a_i(:,:,:) - old_a_i(:,:,:) 105 d_v_s_thd(:,:,:) = v_s(:,:,:) - old_v_s(:,:,:) 106 d_v_i_thd(:,:,:) = v_i(:,:,:) - old_v_i(:,:,:) 107 d_e_s_thd(:,:,:,:) = e_s(:,:,:,:) - old_e_s(:,:,:,:) 108 d_e_i_thd(:,:,:,:) = e_i(:,:,:,:) - old_e_i(:,:,:,:) 109 !?? d_oa_i_thd(:,:,:) = oa_i (:,:,:) - old_oa_i (:,:,:) 110 d_smv_i_thd(:,:,:) = 0._wp 111 IF( num_sal == 2 ) d_smv_i_thd(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:) 112 ! diag only (clem) 113 dv_dt_thd(:,:,:) = d_v_i_thd(:,:,:) * r1_rdtice * rday 134 114 135 115 ! mass and salt flux init (clem) … … 151 131 CALL lim_var_glo2eqv 152 132 153 !---------------------------------154 ! Classify the pathological cases155 !---------------------------------156 ! (1) v_i (new) > 0; d_v_i_thd + v_i(old) > 0 (easy case)157 ! (2) v_i (new) > 0; d_v_i_thd + v_i(old) = 0 (total thermodynamic ablation)158 ! (3) v_i (new) < 0; d_v_i_thd + v_i(old) > 0 (combined total ablation)159 ! (4) v_i (new) < 0; d_v_i_thd + v_i(old) = 0 (total thermodynamic ablation160 ! with negative advection, very pathological )161 !162 DO jl = 1, jpl163 DO jj = 1, jpj164 DO ji = 1, jpi165 patho_case(ji,jj,jl) = 1166 IF( v_i(ji,jj,jl) .GE. 0.0 ) THEN167 IF ( old_v_i(ji,jj,jl) + d_v_i_thd(ji,jj,jl) .LT. epsi10 ) THEN168 patho_case(ji,jj,jl) = 2169 ENDIF170 ELSE171 patho_case(ji,jj,jl) = 3172 IF( old_v_i(ji,jj,jl) + d_v_i_thd(ji,jj,jl) .LT. epsi10 ) THEN173 patho_case(ji,jj,jl) = 4174 ENDIF175 ENDIF176 END DO177 END DO178 END DO179 180 133 !-------------------------------------- 181 134 ! 2. Review of all pathological cases 182 135 !-------------------------------------- 136 137 ! clem: useless now 183 138 !------------------------------------------- 184 139 ! 2.1) Advection of ice in an ice-free cell 185 140 !------------------------------------------- 186 141 ! should be removed since it is treated after dynamics now 187 188 ! !IF( ln_nicep ) THEN 189 ! WRITE(numout,*) ' limupdate2 - before h correction ' 190 ! WRITE(numout,*) ' a_i : ', a_i(12, 44, 1:jpl) 191 ! WRITE(numout,*) ' at_i : ', at_i(12,44) 192 ! WRITE(numout,*) ' v_i : ', v_i(12, 44, 1:jpl) 193 ! WRITE(numout,*) ' ht_i : ', ht_i(12, 44, 1:jpl) 194 ! !ENDIF 195 196 zhimax = 5._wp 197 ! first category 198 DO jj = 1, jpj 199 DO ji = 1, jpi 200 !--- the thickness of such an ice is often out of bounds 201 !--- thus we recompute a new area while conserving ice volume 202 zat_i_old = SUM( old_a_i(ji,jj,:) ) 203 zindb = MAX( 0._wp, SIGN( 1._wp, ABS( d_a_i_thd(ji,jj,1) ) - epsi10 ) ) 204 IF ( ( ABS( d_v_i_thd(ji,jj,1) ) / MAX( ABS( d_a_i_thd(ji,jj,1) ),epsi10 ) * zindb .GT. zhimax ) & 205 & .AND. ( ( v_i(ji,jj,1) / MAX( a_i(ji,jj,1), epsi10 ) * zindb ) .GT. zhimax ) & 206 & .AND. ( zat_i_old .LT. 1.e-6 ) ) THEN ! new line 207 ht_i(ji,jj,1) = hi_max(1) * 0.5_wp 208 a_i (ji,jj,1) = v_i(ji,jj,1) / ht_i(ji,jj,1) 209 ENDIF 210 END DO 211 END DO 212 213 ! !IF( ln_nicep ) THEN 214 ! at_i(:,:) = 0._wp 215 ! DO jl = 1, jpl 216 ! at_i(:,:) = a_i(:,:,jl) + at_i(:,:) 142 ! zhimax = 5._wp 143 ! ! first category 144 ! DO jj = 1, jpj 145 ! DO ji = 1, jpi 146 ! !--- the thickness of such an ice is often out of bounds 147 ! !--- thus we recompute a new area while conserving ice volume 148 ! zat_i_old = SUM( old_a_i(ji,jj,:) ) 149 ! zindb = MAX( 0._wp, SIGN( 1._wp, ABS( d_a_i_thd(ji,jj,1) ) - epsi10 ) ) 150 ! IF ( ( ABS( d_v_i_thd(ji,jj,1) ) / MAX( ABS( d_a_i_thd(ji,jj,1) ),epsi10 ) * zindb .GT. zhimax ) & 151 ! & .AND. ( ( v_i(ji,jj,1) / MAX( a_i(ji,jj,1), epsi10 ) * zindb ) .GT. zhimax ) & 152 ! & .AND. ( zat_i_old .LT. 1.e-6 ) ) THEN ! new line 153 ! ht_i(ji,jj,1) = hi_max(1) * 0.5_wp 154 ! a_i (ji,jj,1) = v_i(ji,jj,1) / ht_i(ji,jj,1) 155 ! ENDIF 217 156 ! END DO 218 ! WRITE(numout,*) ' limupdate2 - after h correction 1 ' 219 ! WRITE(numout,*) ' a_i : ', a_i(12, 44, 1:jpl) 220 ! WRITE(numout,*) ' at_i : ', at_i(12,44) 221 ! WRITE(numout,*) ' v_i : ', v_i(12, 44, 1:jpl) 222 ! WRITE(numout,*) ' ht_i : ', ht_i(12, 44, 1:jpl) 223 ! !ENDIF 224 ! 225 zhimax = 20._wp 226 ! other categories 227 DO jl = 2, jpl 228 jm = ice_types(jl) 229 DO jj = 1, jpj 230 DO ji = 1, jpi 231 zindb = MAX( rzero, SIGN( rone, ABS( d_a_i_thd(ji,jj,jl)) - epsi10 ) ) 232 ! this correction is very tricky... sometimes, advection gets wrong i don't know why 233 ! it makes problems when the advected volume and concentration do not seem to be 234 ! related with each other 235 ! the new thickness is sometimes very big! 236 ! and sometimes d_a_i_trp and d_v_i_trp have different sign 237 ! which of course is plausible 238 ! but fuck! it fucks everything up :) 239 IF ( ( ABS( d_v_i_thd(ji,jj,jl) ) / MAX( ABS( d_a_i_thd(ji,jj,jl) ), epsi10 ) * zindb .GT. zhimax ) & 240 & .AND. ( v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zindb ) .GT. zhimax ) THEN 241 ht_i(ji,jj,jl) = ( hi_max_typ(jl-ice_cat_bounds(jm,1),jm) + hi_max_typ(jl-ice_cat_bounds(jm,1)+1,jm) ) * 0.5_wp 242 a_i (ji,jj,jl) = v_i(ji,jj,jl) / ht_i(ji,jj,jl) 243 ENDIF 244 END DO ! ji 245 END DO !jj 246 END DO !jl 157 ! END DO 158 159 ! zhimax = 20._wp 160 ! ! other categories 161 ! DO jl = 2, jpl 162 ! jm = ice_types(jl) 163 ! DO jj = 1, jpj 164 ! DO ji = 1, jpi 165 ! zindb = MAX( rzero, SIGN( rone, ABS( d_a_i_thd(ji,jj,jl)) - epsi10 ) ) 166 ! ! this correction is very tricky... sometimes, advection gets wrong i don't know why 167 ! ! it makes problems when the advected volume and concentration do not seem to be 168 ! ! related with each other 169 ! ! the new thickness is sometimes very big! 170 ! ! and sometimes d_a_i_trp and d_v_i_trp have different sign 171 ! ! which of course is plausible 172 ! ! but fuck! it fucks everything up :) 173 ! IF ( ( ABS( d_v_i_thd(ji,jj,jl) ) / MAX( ABS( d_a_i_thd(ji,jj,jl) ), epsi10 ) * zindb .GT. zhimax ) & 174 ! & .AND. ( v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zindb ) .GT. zhimax ) THEN 175 ! ht_i(ji,jj,jl) = ( hi_max_typ(jl-ice_cat_bounds(jm,1),jm) + hi_max_typ(jl-ice_cat_bounds(jm,1)+1,jm) ) * 0.5_wp 176 ! a_i (ji,jj,jl) = v_i(ji,jj,jl) / ht_i(ji,jj,jl) 177 ! ENDIF 178 ! END DO ! ji 179 ! END DO !jj 180 ! END DO !jl 247 181 248 182 at_i(:,:) = 0._wp … … 250 184 at_i(:,:) = a_i(:,:,jl) + at_i(:,:) 251 185 END DO 252 253 ! !IF( ln_nicep ) THEN254 ! WRITE(numout,*) ' limupdate2 - after h correction 2 '255 ! WRITE(numout,*) ' a_i : ', a_i(12, 44, 1:jpl)256 ! WRITE(numout,*) ' at_i : ', at_i(12,44)257 ! WRITE(numout,*) ' v_i : ', v_i(12, 44, 1:jpl)258 ! WRITE(numout,*) ' ht_i : ', ht_i(12, 44, 1:jpl)259 ! !ENDIF260 186 261 187 !---------------------------------------------------- … … 304 230 zesum = zesum + e_i(ji,jj,jk,jl) 305 231 END DO 306 !clem IF (ind_im .LT. nlay_i ) THEN307 !clem smv_i(ji,jj,jl) = smv_i(ji,jj,jl) / ht_i(ji,jj,jl) * ( ht_i(ji,jj,jl) - REAL(ind_im)*ht_i(ji,jj,jl) / REAL(nlay_i) )308 !clem ENDIF309 232 ht_i(ji,jj,jl) = ht_i(ji,jj,jl) - REAL(ind_im)*ht_i(ji,jj,jl) / REAL(nlay_i) 310 233 v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) … … 368 291 DO ji = 1, jpi 369 292 ! snow energy of melting 370 ze_s = e_s(ji,jj,1,jl) * unit_fac / area(ji,jj) / MAX( v_s(ji,jj,jl), 1.0e-6 ) ! snow energy of melting 293 zinda = MAX( 0._wp, SIGN( 1._wp, v_s(ji,jj,jl) - epsi10 ) ) 294 ze_s = zinda * e_s(ji,jj,1,jl) * unit_fac / area(ji,jj) / MAX( v_s(ji,jj,jl), epsi10 ) ! snow energy of melting 371 295 372 296 ! If snow energy of melting smaller then Lf … … 401 325 402 326 !switches 403 zindb = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi 06) )327 zindb = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi10 ) ) 404 328 !switch = 1 if a_i > 1e-06 and 0 if not 405 zindsn = MAX( rzero, SIGN( rone, v_s(ji,jj,jl) - epsi 06 ) ) !=1 if hs > 1e-6and 0 if not406 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi 04 ) ) !=1 if hi > 1e-3and 0 if not329 zindsn = MAX( rzero, SIGN( rone, v_s(ji,jj,jl) - epsi10 ) ) !=1 if hs > 1e-10 and 0 if not 330 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi10 ) ) !=1 if hi > 1e-10 and 0 if not 407 331 ! bug fix 25 avril 2007 408 332 zindb = zindb*zindic … … 444 368 !--- 2.7 Correction to ice concentrations 445 369 !-------------------------------------------- 446 !clem a_i(ji,jj,jl) = zindb * MAX(zindsn, zindic) * MAX( a_i(ji,jj,jl), epsi06 )447 370 a_i(ji,jj,jl) = zindb * a_i(ji,jj,jl) 448 371 … … 464 387 DO jj = 1, jpj 465 388 DO ji = 1, jpi 466 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi 04) )389 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi10 ) ) 467 390 e_i(ji,jj,jk,jl)= zindic * ( MIN ( MAX ( 0.0, e_i(ji,jj,jk,jl) ), zbigvalue ) ) 468 391 END DO ! ji … … 478 401 !--- 2.12 Constrain the thickness of the smallest category above 5 cm 479 402 !---------------------------------------------------------------------- 480 zindb = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi 06) )481 ht_i(ji,jj,jl) = zindb*v_i(ji,jj,jl)/MAX(a_i(ji,jj,jl), epsi 06)482 zh = MAX( rone , zindb * hiclim / MAX( ht_i(ji,jj,jl) , epsi 20 ) )403 zindb = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi10 ) ) 404 ht_i(ji,jj,jl) = zindb*v_i(ji,jj,jl)/MAX(a_i(ji,jj,jl), epsi10) 405 zh = MAX( rone , zindb * hiclim / MAX( ht_i(ji,jj,jl) , epsi10 ) ) 483 406 ht_s(ji,jj,jl) = ht_s(ji,jj,jl)* zh 484 407 ht_i(ji,jj,jl) = ht_i(ji,jj,jl)* zh … … 502 425 DO ji = 1, jpi 503 426 z_da_ex = MAX( at_i(ji,jj) - amax , 0.0 ) 504 zindb = MAX( rzero, SIGN( rone, at_i(ji,jj) - epsi 06) )427 zindb = MAX( rzero, SIGN( rone, at_i(ji,jj) - epsi10 ) ) 505 428 DO jl = 1, jpl 506 z_da_i = a_i(ji,jj,jl) * z_da_ex / MAX( at_i(ji,jj), epsi 06) * zindb429 z_da_i = a_i(ji,jj,jl) * z_da_ex / MAX( at_i(ji,jj), epsi10 ) * zindb 507 430 a_i(ji,jj,jl) = MAX( 0._wp, a_i(ji,jj,jl) - z_da_i ) 508 431 ! 509 zinda = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi 06) )510 ht_i(ji,jj,jl) = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi 06) * zinda432 zinda = MAX( rzero, SIGN( rone, a_i(ji,jj,jl) - epsi10 ) ) 433 ht_i(ji,jj,jl) = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zinda 511 434 !v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) ! makes ice shrinken but should not be used 512 435 END DO … … 542 465 !clem smv_i(ji,jj,jl) = MAX(MIN((rhoic-rhosn)/rhoic*sss_m(ji,jj),smv_i(ji,jj,jl)),0.1 * v_i(ji,jj,jl) ) 543 466 smv_i(ji,jj,jl) = MAX( MIN( s_i_max * v_i(ji,jj,jl), smv_i(ji,jj,jl) ), s_i_min * v_i(ji,jj,jl) ) 544 i_ice_switch = 1._wp - MAX( 0._wp, SIGN( 1._wp, -v_i(ji,jj,jl) + epsi20) )545 smv_i(ji,jj,jl) = i_ice_switch * smv_i(ji,jj,jl) + s_i_min * ( 1._wp - i_ice_switch ) * v_i(ji,jj,jl)467 i_ice_switch = 1._wp - MAX( 0._wp, SIGN( 1._wp, -v_i(ji,jj,jl) ) ) 468 smv_i(ji,jj,jl) = i_ice_switch * smv_i(ji,jj,jl) !+ s_i_min * ( 1._wp - i_ice_switch ) * v_i(ji,jj,jl) 546 469 END DO ! ji 547 470 END DO ! jj … … 663 586 CALL prt_ctl(tab2d_1=old_oa_i (:,:,jl) , clinfo1= ' lim_update2 : old_oa_i : ') 664 587 CALL prt_ctl(tab2d_1=d_oa_i_thd (:,:,jl) , clinfo1= ' lim_update2 : d_oa_i_thd : ') 665 CALL prt_ctl(tab2d_1=REAL(patho_case(:,:,jl)) , clinfo1= ' lim_update2 : Path. case : ')666 588 667 589 DO jk = 1, nlay_i -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r4205 r4333 66 66 PUBLIC lim_var_salprof1d ! 67 67 68 REAL(wp) :: epsi20 = 1.e-20_wp ! module constants69 REAL(wp) :: epsi16 = 1.e-16_wp ! - -70 REAL(wp) :: epsi13 = 1.e-13_wp ! - -71 68 REAL(wp) :: epsi10 = 1.e-10_wp ! - - 72 REAL(wp) :: epsi06 = 1.e-06_wp ! - -73 69 REAL(wp) :: zzero = 0.e0 ! - - 74 70 REAL(wp) :: zone = 1.e0 ! - - … … 117 113 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) ! ice concentration 118 114 ! 119 zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - epsi1 6) )120 icethi(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj) , epsi1 6) * zinda ! ice thickness115 zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - epsi10 ) ) 116 icethi(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj) , epsi10 ) * zinda ! ice thickness 121 117 END DO 122 118 END DO … … 138 134 DO jj = 1, jpj 139 135 DO ji = 1, jpi 140 zinda = MAX( zzero , SIGN( zone , vt_i(ji,jj) - epsi1 6) )141 zindb = MAX( zzero , SIGN( zone , at_i(ji,jj) - epsi1 6) )136 zinda = MAX( zzero , SIGN( zone , vt_i(ji,jj) - epsi10 ) ) 137 zindb = MAX( zzero , SIGN( zone , at_i(ji,jj) - epsi10 ) ) 142 138 et_s(ji,jj) = et_s(ji,jj) + e_s(ji,jj,1,jl) ! snow heat content 143 smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , epsi1 6) * zinda ! ice salinity144 ot_i(ji,jj) = ot_i(ji,jj) + oa_i(ji,jj,jl) / MAX( at_i(ji,jj) , epsi1 6) * zindb ! ice age139 smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , epsi10 ) * zinda ! ice salinity 140 ot_i(ji,jj) = ot_i(ji,jj) + oa_i(ji,jj,jl) / MAX( at_i(ji,jj) , epsi10 ) * zindb ! ice age 145 141 END DO 146 142 END DO … … 209 205 DO ji = 1, jpi 210 206 ! ! Energy of melting q(S,T) [J.m-3] 211 zq_i = e_i(ji,jj,jk,jl) / area(ji,jj) / MAX( v_i(ji,jj,jl) , epsi 06) * REAL(nlay_i,wp)212 zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) ) ) ! zindb = 0 if no ice and 1 if yes207 zq_i = e_i(ji,jj,jk,jl) / area(ji,jj) / MAX( v_i(ji,jj,jl) , epsi10 ) * REAL(nlay_i,wp) 208 zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) + epsi10 ) ) ! zindb = 0 if no ice and 1 if yes 213 209 zq_i = zq_i * unit_fac * zindb !convert units 214 210 ztmelts = -tmut * s_i(ji,jj,jk,jl) + rtt ! Ice layer melt temperature … … 235 231 DO ji = 1, jpi 236 232 !Energy of melting q(S,T) [J.m-3] 237 zq_s = e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi 06) ) * REAL(nlay_s,wp)238 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - v_s(ji,jj,jl) ) ) ! zindb = 0 if no ice and 1 if yes233 zq_s = e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi10 ) ) * REAL(nlay_s,wp) 234 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - v_s(ji,jj,jl) + epsi10 ) ) ! zindb = 0 if no ice and 1 if yes 239 235 zq_s = zq_s * unit_fac * zindb ! convert units 240 236 ! … … 341 337 zind01 = ( 1._wp - zind0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i(ji,jj,jl) ) ) 342 338 ! If 2.sm_i GE sss_m then zindbal = 1 339 ! this is to force a constant salinity profile in the Baltic Sea 343 340 zindbal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i(ji,jj,jl) - sss_m(ji,jj) ) ) 344 341 zalpha(ji,jj,jl) = zind0 + zind01 * ( sm_i(ji,jj,jl) * dummy_fac0 + dummy_fac1 ) … … 434 431 DO jj = 1, jpj 435 432 DO ji = 1, jpi 436 zinda = ( 1._wp - MAX( 0._wp , SIGN( 1._wp , (t_i(ji,jj,jk,jl) - rtt) + epsi1 6) ) )437 zindb = ( 1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi1 6) ) )438 zbvi = - zinda * tmut * s_i(ji,jj,jk,jl) / MIN( t_i(ji,jj,jk,jl) - rtt, - epsi1 6) &433 zinda = ( 1._wp - MAX( 0._wp , SIGN( 1._wp , (t_i(ji,jj,jk,jl) - rtt) + epsi10 ) ) ) 434 zindb = ( 1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi10 ) ) ) 435 zbvi = - zinda * tmut * s_i(ji,jj,jk,jl) / MIN( t_i(ji,jj,jk,jl) - rtt, - epsi10 ) & 439 436 & * v_i(ji,jj,jl) / REAL(nlay_i,wp) 440 bv_i(ji,jj) = bv_i(ji,jj) + zindb * zbvi / MAX( vt_i(ji,jj) , epsi1 6)437 bv_i(ji,jj) = bv_i(ji,jj) + zindb * zbvi / MAX( vt_i(ji,jj) , epsi10 ) 441 438 END DO 442 439 END DO … … 498 495 zind01 = ( 1._wp - zind0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i_b(ji) ) ) 499 496 ! if 2.sm_i GE sss_m then zindbal = 1 497 ! this is to force a constant salinity profile in the Baltic Sea 500 498 zindbal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i_b(ji) - sss_m(ii,ij) ) ) 501 499 ! -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r4161 r4333 52 52 INTEGER , DIMENSION(jpnoumax) :: nc , nca ! switch for saving field ( = 1 ) or not ( = 0 ) 53 53 54 REAL(wp) :: epsi06 = 1 e-6_wp54 REAL(wp) :: epsi06 = 1.e-6_wp 55 55 REAL(wp) :: zzero = 0._wp 56 56 REAL(wp) :: zone = 1._wp … … 192 192 193 193 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 194 IF( ln_nicep ) THEN195 WRITE(numout,*)196 WRITE(numout,*) 'lim_wri : write ice outputs in NetCDF files at time : ', nyear, nmonth, nday, numit197 WRITE(numout,*) '~~~~~~~ '198 WRITE(numout,*) ' kindic = ', kindic199 ENDIF194 !IF( ln_nicep ) THEN 195 ! WRITE(numout,*) 196 ! WRITE(numout,*) 'lim_wri : write ice outputs in NetCDF files at time : ', nyear, nmonth, nday, numit 197 ! WRITE(numout,*) '~~~~~~~ ' 198 ! WRITE(numout,*) ' kindic = ', kindic 199 !ENDIF 200 200 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 201 201 … … 570 570 CALL histdef( kid, "iicevolu", "Ice volume" , "m" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 571 571 CALL histdef( kid, "iicedive", "Ice divergence" , "10-8s-1", jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 572 CALL histdef( kid, "iicebopr", "Ice bottom production" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 573 CALL histdef( kid, "iicedypr", "Ice dynamic production" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 574 CALL histdef( kid, "iicelapr", "Ice open water prod" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 575 CALL histdef( kid, "iicesipr", "Snow ice production " , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 576 CALL histdef( kid, "iicerepr", "Ice prod from limupdate" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 577 CALL histdef( kid, "iicebome", "Ice bottom melt" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 578 CALL histdef( kid, "iicesume", "Ice surface melt" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 579 CALL histdef( kid, "iisfxthd", "Salt flux from thermo" , "" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 580 CALL histdef( kid, "iisfxmec", "Salt flux from dynmics" , "" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 581 CALL histdef( kid, "iisfxres", "Salt flux from limupdate", "" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 582 572 583 573 584 !CALL histdef( kid, "iice_itd", "Ice concentration by cat", "%" , jpi, jpj, kh_i, jpl, 1, jpl, -99, 32, "inst(x)", rdt, rdt ) … … 592 603 CALL histwrite( kid, "iicedive", kt, divu_i*1.0e8 , jpi*jpj, (/1/) ) 593 604 605 CALL histwrite( kid, "iicebopr", kt, diag_bot_gr , jpi*jpj, (/1/) ) 606 CALL histwrite( kid, "iicedypr", kt, diag_dyn_gr , jpi*jpj, (/1/) ) 607 CALL histwrite( kid, "iicelapr", kt, diag_lat_gr , jpi*jpj, (/1/) ) 608 CALL histwrite( kid, "iicesipr", kt, diag_sni_gr , jpi*jpj, (/1/) ) 609 CALL histwrite( kid, "iicerepr", kt, diag_res_pr , jpi*jpj, (/1/) ) 610 CALL histwrite( kid, "iicebome", kt, diag_bot_me , jpi*jpj, (/1/) ) 611 CALL histwrite( kid, "iicesume", kt, diag_sur_me , jpi*jpj, (/1/) ) 612 CALL histwrite( kid, "iisfxthd", kt, sfx_thd , jpi*jpj, (/1/) ) 613 CALL histwrite( kid, "iisfxmec", kt, sfx_mec , jpi*jpj, (/1/) ) 614 CALL histwrite( kid, "iisfxres", kt, sfx_res , jpi*jpj, (/1/) ) 615 594 616 !CALL histwrite( kid, "iice_itd", kt, a_i , jpi*jpj*jpl, (/1/) ) ! area 595 617 !CALL histwrite( kid, "iice_hid", kt, ht_i , jpi*jpj*jpl, (/1/) ) ! thickness -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/BDY/bdy_oce.F90
r4292 r4333 104 104 REAL(wp), DIMENSION(jp_bdy) :: rn_time_dmp_out !: Damping time scale in days at radiation outflow points 105 105 106 #if defined key_lim2107 CHARACTER(len=20), DIMENSION(jp_bdy) :: nn_ice_lim 2! Choice of boundary condition for sea ice variables108 INTEGER, DIMENSION(jp_bdy) :: nn_ice_lim 2_dta!: = 0 use the initial state as bdy dta ;106 #if ( defined key_lim2 || defined key_lim3 ) 107 CHARACTER(len=20), DIMENSION(jp_bdy) :: nn_ice_lim ! Choice of boundary condition for sea ice variables 108 INTEGER, DIMENSION(jp_bdy) :: nn_ice_lim_dta !: = 0 use the initial state as bdy dta ; 109 109 !: = 1 read it in a NetCDF file 110 110 #endif -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
r4292 r4333 197 197 198 198 #if defined key_lim2 199 IF( nn_ice_lim 2_dta(ib_bdy) .eq. 0 ) THEN199 IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 200 200 ilen1(:) = nblen(:) 201 201 IF( dta%ll_frld ) THEN … … 649 649 #if defined key_lim2 650 650 ! sea ice 651 IF( nn_ice_lim 2_dta(ib_bdy) .eq. 1 ) THEN651 IF( nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN 652 652 653 653 IF( dta%ll_frld ) THEN … … 724 724 ENDIF 725 725 726 ENDIF 726 727 #endif 727 728 ! Recalculate field counts … … 850 851 #if defined key_lim2 851 852 IF (nn_ice_lim(ib_bdy) .gt. 0) THEN 852 IF( nn_ice_lim 2_dta(ib_bdy) .eq. 0 ) THEN853 IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 853 854 ALLOCATE( dta_bdy(ib_bdy)%frld(nblen(1)) ) 854 855 ALLOCATE( dta_bdy(ib_bdy)%hicif(nblen(1)) ) -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90
r4292 r4333 45 45 46 46 REAL(wp) :: epsi20 = 1.e-20_wp ! module constants 47 REAL(wp) :: epsi10 = 1.e-10_wp ! min area allowed by ice model 47 48 !!---------------------------------------------------------------------- 48 49 !! NEMO/OPA 3.3 , NEMO Consortium (2010) … … 91 92 INTEGER, INTENT(in) :: ib_bdy ! BDY set index !! 92 93 94 INTEGER :: jpbound ! 0 = incoming ice 95 ! 1 = outgoing ice 93 96 INTEGER :: jb, jk, jgrd, jl ! dummy loop indices 94 INTEGER :: ji, jj 97 INTEGER :: ji, jj, ii, ij ! local scalar 95 98 REAL(wp) :: zwgt, zwgt1 ! local scalar 96 REAL(wp) :: zinda, ztmelts 99 REAL(wp) :: zinda, ztmelts, zdh 100 101 REAL(wp), PARAMETER :: zsal = 6.3 ! arbitrary salinity for incoming ice 102 REAL(wp), PARAMETER :: ztem = 270.0 ! arbitrary temperature for incoming ice 103 REAL(wp), PARAMETER :: zage = 30.0 ! arbitrary age for incoming ice 97 104 !!------------------------------------------------------------------------------ 98 105 ! 99 106 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_frs') 100 107 ! 101 !IF( kt /= nit000 ) THEN102 108 jgrd = 1 ! Everything is at T-points here 103 109 ! … … 170 176 ht_i(ji,jj,jl) = ( ht_i(ji,jj,jl) * zwgt1 + dta%ht_i(jb,jl) * zwgt ) * tmask(ji,jj,1) ! Ice depth 171 177 ht_s(ji,jj,jl) = ( ht_s(ji,jj,jl) * zwgt1 + dta%ht_s(jb,jl) * zwgt ) * tmask(ji,jj,1) ! Snow depth 178 179 ! ----------------- 180 ! Pathological case 181 ! ----------------- 182 ! In case a) snow load would be in excess or b) ice is coming into a warmer environment that would lead to 183 ! very large transformation from snow to ice (see limthd_dh.F90) 184 185 ! Then, a) transfer the snow excess into the ice (different from limthd_dh) 186 zdh = MAX( 0._wp, ( rhosn * ht_s(ji,jj,jl) + ( rhoic - rau0 ) * ht_i(ji,jj,jl) ) * r1_rau0 ) 187 ! Or, b) transfer all the snow into ice (if incoming ice is likely to melt as it comes into a warmer environment) 188 !zdh = MAX( 0._wp, ht_s(ji,jj,jl) * rhosn / rhoic ) 189 190 ! recompute ht_i, ht_s 191 ht_i(ji,jj,jl) = MIN( hi_max(jl), ht_i(ji,jj,jl) + zdh ) 192 ht_s(ji,jj,jl) = MAX( 0._wp, ht_s(ji,jj,jl) - zdh * rhoic / rhosn ) 193 172 194 ENDDO 173 195 CALL lbc_bdy_lnk( a_i(:,:,jl), 'T', 1., ib_bdy ) 174 196 CALL lbc_bdy_lnk( ht_i(:,:,jl), 'T', 1., ib_bdy ) 175 197 CALL lbc_bdy_lnk( ht_s(:,:,jl), 'T', 1., ib_bdy ) 176 198 ENDDO 199 ! retrieve at_i 200 at_i(:,:) = 0._wp 201 DO jl = 1, jpl 202 at_i(:,:) = a_i(:,:,jl) + at_i(:,:) 203 END DO 204 205 DO jl = 1, jpl 177 206 DO jb = 1, idx%nblen(jgrd) 178 207 ji = idx%nbi(jb,jgrd) 179 208 jj = idx%nbj(jb,jgrd) 180 ! clem : condition on ice thickness depends on the ice velocity 181 ! if velocity is outward (strictly), then ice thickness, volume... must be equal to adjacent values 182 IF ( u_ice(ji+1,jj ) < 0. .AND. umask(ji-1,jj ,1) == 0. ) THEN 183 ht_i(ji,jj,jl) = ht_i(ji+1,jj ,jl) 184 a_i (ji,jj,jl) = a_i (ji+1,jj ,jl) 185 ht_s(ji,jj,jl) = ht_s(ji+1,jj ,jl) 186 ENDIF 187 IF ( u_ice(ji-1,jj ) > 0. .AND. umask(ji+1,jj ,1) == 0. ) THEN 188 ht_i(ji,jj,jl) = ht_i(ji-1,jj ,jl) 189 a_i (ji,jj,jl) = a_i (ji-1,jj ,jl) 190 ht_s(ji,jj,jl) = ht_s(ji-1,jj ,jl) 191 ENDIF 192 IF ( v_ice(ji ,jj+1) < 0. .AND. vmask(ji ,jj-1,1) == 0. ) THEN 193 ht_i(ji,jj,jl) = ht_i(ji ,jj+1,jl) 194 a_i (ji,jj,jl) = a_i (ji ,jj+1,jl) 195 ht_s(ji,jj,jl) = ht_s(ji ,jj+1,jl) 196 ENDIF 197 IF ( v_ice(ji ,jj-1) > 0. .AND. vmask(ji ,jj+1,1) == 0. ) THEN 198 ht_i(ji,jj,jl) = ht_i(ji ,jj-1,jl) 199 a_i (ji,jj,jl) = a_i (ji ,jj-1,jl) 200 ht_s(ji,jj,jl) = ht_s(ji ,jj-1,jl) 201 ENDIF 202 203 zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - a_i(ji,jj,jl) ) ) ! 0 if no ice 204 ! -------------------- 209 210 ! condition on ice thickness depends on the ice velocity 211 ! if velocity is outward (strictly), then ice thickness, volume... must be equal to adjacent values 212 jpbound = 0; ii = ji; ij = jj; 213 214 IF ( u_ice(ji+1,jj ) < 0. .AND. umask(ji-1,jj ,1) == 0. ) jpbound = 1; ii = ji+1; ij = jj 215 IF ( u_ice(ji-1,jj ) > 0. .AND. umask(ji+1,jj ,1) == 0. ) jpbound = 1; ii = ji-1; ij = jj 216 IF ( v_ice(ji ,jj+1) < 0. .AND. vmask(ji ,jj-1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj+1 217 IF ( v_ice(ji ,jj-1) > 0. .AND. vmask(ji ,jj+1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj-1 218 219 zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ii,ij) + 0.01 ) ) ! 0 if no ice 220 221 ! concentration and thickness 222 a_i (ji,jj,jl) = a_i (ii,ij,jl) * zinda 223 ht_i(ji,jj,jl) = ht_i(ii,ij,jl) * zinda 224 ht_s(ji,jj,jl) = ht_s(ii,ij,jl) * zinda 225 205 226 ! Ice and snow volumes 206 ! --------------------207 227 v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) 208 228 v_s(ji,jj,jl) = ht_s(ji,jj,jl) * a_i(ji,jj,jl) 209 229 210 ! ------------- 211 ! Ice salinity 212 !--------------- 213 sm_i(ji,jj,jl) = zinda * bulk_sal + ( 1.0 - zinda ) * s_i_min 230 SELECT CASE( jpbound ) 231 232 CASE( 0 ) ! velocity is inward 233 234 ! Ice salinity, age, temperature 235 sm_i(ji,jj,jl) = zinda * zsal + ( 1.0 - zinda ) * s_i_min 236 o_i(ji,jj,jl) = zinda * zage + ( 1.0 - zinda ) 237 t_su(ji,jj,jl) = zinda * ztem + ( 1.0 - zinda ) * ztem 238 DO jk = 1, nlay_s 239 t_s(ji,jj,jk,jl) = zinda * ztem + ( 1.0 - zinda ) * rtt 240 END DO 241 DO jk = 1, nlay_i 242 t_i(ji,jj,jk,jl) = zinda * ztem + ( 1.0 - zinda ) * rtt 243 s_i(ji,jj,jk,jl) = zinda * zsal + ( 1.0 - zinda ) * s_i_min 244 END DO 245 246 CASE( 1 ) ! velocity is outward 247 248 ! Ice salinity, age, temperature 249 sm_i(ji,jj,jl) = zinda * sm_i(ii,ij,jl) + ( 1.0 - zinda ) * s_i_min 250 o_i(ji,jj,jl) = zinda * o_i(ii,ij,jl) + ( 1.0 - zinda ) 251 t_su(ji,jj,jl) = zinda * t_su(ii,ij,jl) + ( 1.0 - zinda ) * rtt 252 DO jk = 1, nlay_s 253 t_s(ji,jj,jk,jl) = zinda * t_s(ii,ij,jk,jl) + ( 1.0 - zinda ) * rtt 254 END DO 255 DO jk = 1, nlay_i 256 t_i(ji,jj,jk,jl) = zinda * t_i(ii,ij,jk,jl) + ( 1.0 - zinda ) * rtt 257 s_i(ji,jj,jk,jl) = zinda * s_i(ii,ij,jk,jl) + ( 1.0 - zinda ) * s_i_min 258 END DO 259 260 END SELECT 261 262 ! contents 214 263 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) 215 216 !----------217 ! Ice age218 !----------219 o_i(ji,jj,jl) = zinda * 1.0 + ( 1.0 - zinda )220 264 oa_i(ji,jj,jl) = o_i(ji,jj,jl) * a_i(ji,jj,jl) 221 222 !------------------------------223 ! Sea ice surface temperature224 !------------------------------225 t_su(ji,jj,jl) = zinda * 270.0 + ( 1.0 - zinda ) * t_bo(ji,jj)226 227 !------------------------------------228 ! Snow temperature and heat content229 !------------------------------------230 265 DO jk = 1, nlay_s 231 t_s(ji,jj,jk,jl) = zinda * 270.00 + ( 1.0 - zinda ) * rtt232 266 ! Snow energy of melting 233 267 e_s(ji,jj,jk,jl) = zinda * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus ) … … 235 269 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / unit_fac 236 270 ! Multiply by volume, so that heat content in 10^9 Joules 237 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * area(ji,jj) * & 238 v_s(ji,jj,jl) / nlay_s 239 END DO !jk 240 241 !----------------------------------------------- 242 ! Ice salinities, temperature and heat content 243 !----------------------------------------------- 271 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * area(ji,jj) * v_s(ji,jj,jl) / nlay_s 272 END DO 244 273 DO jk = 1, nlay_i 245 t_i(ji,jj,jk,jl) = zinda * 270.00 + ( 1.0 - zinda ) * rtt 246 s_i(ji,jj,jk,jl) = zinda * bulk_sal + ( 1.0 - zinda ) * s_i_min 247 ztmelts = - tmut * s_i(ji,jj,jk,jl) + rtt !Melting temperature in K 248 274 ztmelts = - tmut * s_i(ji,jj,jk,jl) + rtt !Melting temperature in K 249 275 ! heat content per unit volume 250 276 e_i(ji,jj,jk,jl) = zinda * rhoic * & 251 ( cpic * ( ztmelts - t_i(ji,jj,jk,jl) ) & 252 + lfus * ( 1.0 - (ztmelts-rtt) / MIN((t_i(ji,jj,jk,jl)-rtt),-epsi20) ) & 253 - rcp * ( ztmelts - rtt ) ) 254 277 ( cpic * ( ztmelts - t_i(ji,jj,jk,jl) ) & 278 + lfus * ( 1.0 - (ztmelts-rtt) / MIN((t_i(ji,jj,jk,jl)-rtt),-epsi20) ) & 279 - rcp * ( ztmelts - rtt ) ) 255 280 ! Correct dimensions to avoid big values 256 281 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / unit_fac 257 258 282 ! Mutliply by ice volume, and divide by number of layers to get heat content in 10^9 J 259 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * &260 area(ji,jj) * a_i(ji,jj,jl) * ht_i(ji,jj,jl) / nlay_i261 END DO ! jk 283 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * area(ji,jj) * a_i(ji,jj,jl) * ht_i(ji,jj,jl) / nlay_i 284 END DO 285 262 286 263 287 END DO !jb 264 288 265 266 289 CALL lbc_bdy_lnk( a_i(:,:,jl), 'T', 1., ib_bdy ) ! lateral boundary conditions 267 290 CALL lbc_bdy_lnk( ht_i(:,:,jl), 'T', 1., ib_bdy ) … … 288 311 #endif 289 312 ! 290 !ENDIF !nit000/=0291 313 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs') 292 314 ! … … 294 316 295 317 296 SUBROUTINE bdy_ice_lim_dyn( kn, pvar1, pvar2, pvar12)318 SUBROUTINE bdy_ice_lim_dyn( cd_type ) 297 319 !!------------------------------------------------------------------------------ 298 320 !! *** SUBROUTINE bdy_ice_lim_dyn *** 299 321 !! 300 322 !! ** Purpose : Apply dynamics boundary conditions for sea-ice in the cas of unstructured open boundaries. 301 !! kn = 1:u_ice and v_ice are equal to the value of the adjacent grid point if this latter is not ice free323 !! u_ice and v_ice are equal to the value of the adjacent grid point if this latter is not ice free 302 324 !! if adjacent grid point is ice free, then u_ice and v_ice are equal to ocean velocities 303 !! kn = 2: the stress tensor is set to 0 (i.e. pvar1, pvar2, pvar12)304 325 !! 305 326 !! 2013-06 : C. Rousset 306 327 !!------------------------------------------------------------------------------ 307 328 !! 308 INTEGER, INTENT( in ) :: kn ! set up of ice vel (kn=1) or stress tensor (kn=2) 309 REAL(wp), INTENT( inout ), DIMENSION(:,:), OPTIONAL :: pvar1, pvar2, pvar12 ! stress tensor components (zs1,zs2,zs12) 329 CHARACTER(len=1), INTENT(in) :: cd_type ! nature of velocity grid-points 310 330 INTEGER :: jb, jgrd ! dummy loop indices 311 331 INTEGER :: ji, jj ! local scalar … … 317 337 ! 318 338 DO ib_bdy=1, nb_bdy 319 ! 320 SELECT CASE( nn_ice_lim(ib_bdy) ) 321 322 CASE(jp_none) 323 CYCLE 324 325 CASE(jp_frs) 326 327 IF ( kn == 1 ) THEN ! set up of u_ice and v_ice 328 329 jgrd = 2 ! u velocity 330 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) 331 ji = idx_bdy(ib_bdy)%nbi(jb,jgrd) 332 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 333 zflag = idx_bdy(ib_bdy)%flagu(jb) 334 335 IF ( ABS( zflag ) == 1. ) THEN ! eastern and western boundaries 336 ! one of the two zmsk is always 0 (because of zflag) 337 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji+1,jj) ) ) ! 0 if no ice 338 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji-1,jj) ) ) ! 0 if no ice 339 ! 340 SELECT CASE( nn_ice_lim(ib_bdy) ) 341 342 CASE('none') 343 344 CYCLE 345 346 CASE('frs') 347 348 349 SELECT CASE ( cd_type ) 350 351 CASE ( 'U' ) 352 353 jgrd = 2 ! u velocity 354 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) 355 ji = idx_bdy(ib_bdy)%nbi(jb,jgrd) 356 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 357 zflag = idx_bdy(ib_bdy)%flagu(jb) 339 358 340 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 341 u_ice (ji,jj) = u_ice(ji+1,jj) * 0.5 * ABS( zflag + 1._wp ) * zmsk1 + & 342 & u_ice(ji-1,jj) * 0.5 * ABS( zflag - 1._wp ) * zmsk2 + & 343 & u_oce(ji ,jj) * ( 1._wp - MIN( 1._wp, zmsk1 + zmsk2 ) ) 344 ELSE ! everywhere else 345 u_ice(ji,jj) = u_oce(ji,jj) 346 ENDIF 347 ! mask ice velocities 348 zinda = 1.0 - MAX( 0.0_wp, SIGN( 1.0_wp , - at_i(ji,jj) ) ) ! 0 if no ice 349 u_ice(ji,jj) = zinda * u_ice(ji,jj) 350 351 ENDDO 359 IF ( ABS( zflag ) == 1. ) THEN ! eastern and western boundaries 360 ! one of the two zmsk is always 0 (because of zflag) 361 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji+1,jj) ) ) ! 0 if no ice 362 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji-1,jj) ) ) ! 0 if no ice 363 364 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 365 u_ice (ji,jj) = u_ice(ji+1,jj) * 0.5 * ABS( zflag + 1._wp ) * zmsk1 + & 366 & u_ice(ji-1,jj) * 0.5 * ABS( zflag - 1._wp ) * zmsk2 + & 367 & u_oce(ji ,jj) * ( 1._wp - MIN( 1._wp, zmsk1 + zmsk2 ) ) 368 ELSE ! everywhere else 369 !u_ice(ji,jj) = u_oce(ji,jj) 370 u_ice(ji,jj) = 0._wp 371 ENDIF 372 ! mask ice velocities 373 zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ji,jj) + 0.01 ) ) ! 0 if no ice 374 u_ice(ji,jj) = zinda * u_ice(ji,jj) 375 376 ENDDO 377 378 CALL lbc_bdy_lnk( u_ice(:,:), 'U', -1., ib_bdy ) 379 380 CASE ( 'V' ) 381 382 jgrd = 3 ! v velocity 383 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) 384 ji = idx_bdy(ib_bdy)%nbi(jb,jgrd) 385 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 386 zflag = idx_bdy(ib_bdy)%flagv(jb) 387 388 IF ( ABS( zflag ) == 1. ) THEN ! northern and southern boundaries 389 ! one of the two zmsk is always 0 (because of zflag) 390 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj+1) ) ) ! 0 if no ice 391 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj-1) ) ) ! 0 if no ice 392 393 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 394 v_ice (ji,jj) = v_ice(ji,jj+1) * 0.5 * ABS( zflag + 1._wp ) * zmsk1 + & 395 & v_ice(ji,jj-1) * 0.5 * ABS( zflag - 1._wp ) * zmsk2 + & 396 & v_oce(ji,jj ) * ( 1._wp - MIN( 1._wp, zmsk1 + zmsk2 ) ) 397 ELSE ! everywhere else 398 !v_ice(ji,jj) = v_oce(ji,jj) 399 v_ice(ji,jj) = 0._wp 400 ENDIF 401 ! mask ice velocities 402 zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ji,jj) + 0.01 ) ) ! 0 if no ice 403 v_ice(ji,jj) = zinda * v_ice(ji,jj) 404 405 ENDDO 406 407 CALL lbc_bdy_lnk( v_ice(:,:), 'V', -1., ib_bdy ) 408 409 END SELECT 352 410 353 jgrd = 3 ! v velocity 354 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) 355 ji = idx_bdy(ib_bdy)%nbi(jb,jgrd) 356 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 357 zflag = idx_bdy(ib_bdy)%flagv(jb) 358 359 IF ( ABS( zflag ) == 1. ) THEN ! northern and southern boundaries 360 ! one of the two zmsk is always 0 (because of zflag) 361 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj+1) ) ) ! 0 if no ice 362 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj-1) ) ) ! 0 if no ice 363 364 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 365 v_ice (ji,jj) = v_ice(ji,jj+1) * 0.5 * ABS( zflag + 1._wp ) * zmsk1 + & 366 & v_ice(ji,jj-1) * 0.5 * ABS( zflag - 1._wp ) * zmsk2 + & 367 & v_oce(ji,jj ) * ( 1._wp - MIN( 1._wp, zmsk1 + zmsk2 ) ) 368 ELSE ! everywhere else 369 v_ice(ji,jj) = v_oce(ji,jj) 370 ENDIF 371 ! mask ice velocities 372 zinda = 1.0 - MAX( 0.0_wp, SIGN( 1.0_wp , - at_i(ji,jj) ) ) ! 0 if no ice 373 v_ice(ji,jj) = zinda * v_ice(ji,jj) 374 375 ENDDO 376 377 CALL lbc_bdy_lnk( u_ice(:,:), 'U', -1., ib_bdy ) 378 CALL lbc_bdy_lnk( v_ice(:,:), 'V', -1., ib_bdy ) 379 380 ELSEIF ( kn == 2 ) THEN ! set up of stress tensor (not sure it works) 411 CASE DEFAULT 412 CALL ctl_stop( 'bdy_ice_lim_dyn : unrecognised option for open boundaries for ice fields' ) 413 END SELECT 381 414 382 jgrd = 1 ! T grid383 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd)384 ji = idx_bdy(ib_bdy)%nbi(jb,jgrd)385 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd)386 387 pvar1 (ji,jj) = 0._wp388 pvar2 (ji,jj) = 0._wp389 pvar12(ji,jj) = 0._wp390 391 ENDDO392 393 ENDIF394 395 CASE DEFAULT396 CALL ctl_stop( 'bdy_ice_lim_dyn : unrecognised option for open boundaries for ice fields' )397 END SELECT398 399 415 ENDDO 400 416 401 417 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_lim_dyn') 402 418 403 419 END SUBROUTINE bdy_ice_lim_dyn 404 420 -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r4294 r4333 488 488 DO igrd = 1, jpbgrd 489 489 id_dummy = iom_varid( inum, 'nbi'//cgrid(igrd), kdimsz=kdimsz ) 490 nblendta(igrd,ib_bdy) = kdimsz(1) 491 jpbdtau = MAX(jpbdtau, kdimsz(1)) 490 !clem nblendta(igrd,ib_bdy) = kdimsz(1) 491 !clem jpbdtau = MAX(jpbdtau, kdimsz(1)) 492 nblendta(igrd,ib_bdy) = MAXVAL(kdimsz) 493 jpbdtau = MAX(jpbdtau, MAXVAL(kdimsz)) 492 494 ENDDO 493 495 CALL iom_close( inum ) -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r4328 r4333 36 36 LOGICAL, PUBLIC :: ln_diahsb !: check the heat and salt budgets 37 37 38 REAL( dp), SAVE :: frc_t , frc_s , frc_v ! global forcing trends39 REAL( dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ssh_ini !40 REAL( dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hc_loc_ini, sc_loc_ini, e3t_ini !41 REAL( dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: hcssh_loc_ini, scssh_loc_ini !38 REAL(wp), SAVE :: frc_t , frc_s , frc_v ! global forcing trends 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ssh_ini ! 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hc_loc_ini, sc_loc_ini, e3t_ini ! 41 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: hcssh_loc_ini, scssh_loc_ini ! 42 42 43 43 !! * Substitutions … … 67 67 !! 68 68 INTEGER :: jk ! dummy loop indice 69 REAL( dp) :: zdiff_hc , zdiff_sc ! heat and salt content variations70 REAL( dp) :: zdiff_v1 , zdiff_v2 ! volume variation71 REAL( dp) :: z_hc , z_sc ! heat and salt content72 REAL( dp) :: z_v1 , z_v2 ! volume73 REAL( dp) :: zdeltat ! - -74 REAL( dp) :: z_frc_trd_t , z_frc_trd_s ! - -75 REAL( dp) :: z_frc_trd_v ! - -76 REAL( dp), POINTER, DIMENSION(:,:) :: zsurf !69 REAL(wp) :: zdiff_hc , zdiff_sc ! heat and salt content variations 70 REAL(wp) :: zdiff_v1 , zdiff_v2 ! volume variation 71 REAL(wp) :: z_hc , z_sc ! heat and salt content 72 REAL(wp) :: z_v1 , z_v2 ! volume 73 REAL(wp) :: zdeltat ! - - 74 REAL(wp) :: z_frc_trd_t , z_frc_trd_s ! - - 75 REAL(wp) :: z_frc_trd_v ! - - 76 REAL(wp), POINTER, DIMENSION(:,:) :: zsurf ! 77 77 !!--------------------------------------------------------------------------- 78 78 IF( nn_timing == 1 ) CALL timing_start('dia_hsb') … … 104 104 ! 2a - Content variations ! 105 105 ! ------------------------ ! 106 zdiff_v2 = 0._ dp107 zdiff_hc = 0._ dp108 zdiff_sc = 0._ dp106 zdiff_v2 = 0._wp 107 zdiff_hc = 0._wp 108 zdiff_sc = 0._wp 109 109 ! volume variation (calculated with ssh) 110 110 zdiff_v1 = glob_sum( zsurf(:,:) * ( sshn(:,:) - ssh_ini(:,:) ) ) 111 111 DO jk = 1, jpkm1 112 112 ! volume variation (calculated with scale factors) 113 zdiff_v2 = zdiff_v2 & 114 & + glob_sum( zsurf(:,:) * tmask(:,:,jk) * ( fse3t_n(:,:,jk) - e3t_ini(:,:,jk) ) ) 113 zdiff_v2 = zdiff_v2 + glob_sum( zsurf(:,:) * tmask(:,:,jk) * ( fse3t_n(:,:,jk) - e3t_ini(:,:,jk) ) ) 115 114 ! heat content variation 116 zdiff_hc = zdiff_hc & 117 & + glob_sum( zsurf(:,:) * tmask(:,:,jk) * ( fse3t_n(:,:,jk) * tsn(:,:,jk,jp_tem) & 115 zdiff_hc = zdiff_hc + glob_sum( zsurf(:,:) * tmask(:,:,jk) * ( fse3t_n(:,:,jk) * tsn(:,:,jk,jp_tem) & 118 116 & - hc_loc_ini(:,:,jk) ) ) 119 117 ! salt content variation 120 zdiff_sc = zdiff_sc & 121 & + glob_sum( zsurf(:,:) * tmask(:,:,jk) * ( fse3t_n(:,:,jk) * tsn(:,:,jk,jp_sal) & 118 zdiff_sc = zdiff_sc + glob_sum( zsurf(:,:) * tmask(:,:,jk) * ( fse3t_n(:,:,jk) * tsn(:,:,jk,jp_sal) & 122 119 & - sc_loc_ini(:,:,jk) ) ) 123 120 ENDDO … … 140 137 ! 2b - Content ! 141 138 ! ----------------------- ! 142 z_v2 = 0._ dp143 z_hc = 0._ dp144 z_sc = 0._ dp139 z_v2 = 0._wp 140 z_hc = 0._wp 141 z_sc = 0._wp 145 142 ! volume (calculated with ssh) 146 143 z_v1 = glob_sum( zsurf(:,:) * sshn(:,:) ) 147 144 DO jk = 1, jpkm1 148 145 ! volume (calculated with scale factors) 149 z_v2 = z_v2 & 150 & + glob_sum( zsurf(:,:) * tmask(:,:,jk) * fse3t_n(:,:,jk) ) 146 z_v2 = z_v2 + glob_sum( zsurf(:,:) * tmask(:,:,jk) * fse3t_n(:,:,jk) ) 151 147 ! heat content 152 z_hc = z_hc & 153 & + glob_sum( zsurf(:,:) * tmask(:,:,jk) * fse3t_n(:,:,jk) * tsn(:,:,jk,jp_tem) ) 148 z_hc = z_hc + glob_sum( zsurf(:,:) * tmask(:,:,jk) * fse3t_n(:,:,jk) * tsn(:,:,jk,jp_tem) ) 154 149 ! salt content 155 z_sc = z_sc & 156 & + glob_sum( zsurf(:,:) * tmask(:,:,jk) * fse3t_n(:,:,jk) * tsn(:,:,jk,jp_sal) ) 150 z_sc = z_sc + glob_sum( zsurf(:,:) * tmask(:,:,jk) * fse3t_n(:,:,jk) * tsn(:,:,jk,jp_sal) ) 157 151 ENDDO 158 152 ! add ssh if not vvl … … 170 164 CALL iom_put( 'bgtemper' , z_hc / z_v2 ) ! Temperature (C) 171 165 CALL iom_put( 'bgsaline' , z_sc / z_v2 ) ! Salinity (psu) 172 CALL iom_put( 'bgheatco' , zdiff_hc * rau0 * rcp * 1.e-9_ dp ) ! Heat content variation (10^9 J)166 CALL iom_put( 'bgheatco' , zdiff_hc * rau0 * rcp * 1.e-9_wp ) ! Heat content variation (10^9 J) 173 167 CALL iom_put( 'bgsaltco' , zdiff_sc * 1.e-9 ) ! Salt content variation (psu*km3) 174 168 CALL iom_put( 'bgvolssh' , zdiff_v1 * 1.e-9 ) ! volume ssh (km3) … … 176 170 CALL iom_put( 'bgvoltot' , zdiff_v2 * 1.e-9 ) ! volume total (km3) 177 171 CALL iom_put( 'bgfrcvol' , frc_v * 1.e-9 ) ! vol - surface forcing (volume) 178 CALL iom_put( 'bgfrctem' , frc_t * rau0 * rcp * 1.e-9_ dp ) ! hc - surface forcing (heat content)172 CALL iom_put( 'bgfrctem' , frc_t * rau0 * rcp * 1.e-9_wp ) ! hc - surface forcing (heat content) 179 173 CALL iom_put( 'bgfrcsal' , frc_s * 1.e-9 ) ! sc - surface forcing (salt content) 180 174 ! … … 224 218 IF(lwp) THEN ! Control print 225 219 WRITE(numout,*) 220 WRITE(numout,*) 'dia_hsb_init : check the heat and salt budgets' 221 WRITE(numout,*) '~~~~~~~~~~~~' 226 222 WRITE(numout,*) ' Namelist namhsb : set hsb parameters' 227 223 WRITE(numout,*) ' Switch for hsb diagnostic (T) or not (F) ln_diahsb = ', ln_diahsb … … 308 304 hcssh_loc_ini(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) ! initial heat content in ssh 309 305 scssh_loc_ini(:,:) = tsn(:,:,1,jp_sal) * sshn(:,:) ! initial salt content in ssh 310 frc_v = 0._ dp311 frc_t = 0._ dp312 frc_s = 0._ dp306 frc_v = 0._wp 307 frc_t = 0._wp 308 frc_s = 0._wp 313 309 ENDIF 314 310 -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r4313 r4333 23 23 USE eosbn2 ! equation of state (eos bn2 routine) 24 24 USE trdmld_oce ! ocean active mixed layer tracers trends variables 25 USE domvvl ! variable volume 25 26 USE divcur ! hor. divergence and curl (div & cur routines) 26 27 USE sbc_ice, ONLY : lk_lim3 … … 210 211 CALL iom_get( numror, jpdom_autoglo, 'hdivb' , hdivb ) 211 212 CALL iom_get( numror, jpdom_autoglo, 'sshb' , sshb ) 213 IF( lk_vvl ) CALL iom_get( numror, jpdom_autoglo, 'fse3t_b', fse3t_b(:,:,:) ) 212 214 ELSE 213 215 neuler = 0 -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r4306 r4333 793 793 Cd_n10(:,:) = cdn_wave 794 794 ELSE 795 Cd_n10 = 1 E-3 * ( 2.7/dU10 + 0.142 + dU10/13.09 ) ! L & Y eq. (6a)795 Cd_n10 = 1.e-3 * ( 2.7/dU10 + 0.142 + dU10/13.09 ) ! L & Y eq. (6a) 796 796 ENDIF 797 797 sqrt_Cd_n10 = sqrt(Cd_n10) 798 Ce_n10 = 1 E-3 * ( 34.6 * sqrt_Cd_n10 ) ! L & Y eq. (6b)799 Ch_n10 = 1 E-3*sqrt_Cd_n10*(18*stab + 32.7*(1-stab)) ! L & Y eq. (6c), (6d)798 Ce_n10 = 1.e-3 * ( 34.6 * sqrt_Cd_n10 ) ! L & Y eq. (6b) 799 Ch_n10 = 1.e-3*sqrt_Cd_n10*(18.*stab + 32.7*(1.-stab)) ! L & Y eq. (6c), (6d) 800 800 !! 801 801 !! Initializing transfert coefficients with their first guess neutral equivalents : … … 824 824 825 825 !! Updating the neutral 10m transfer coefficients : 826 Cd_n10 = 1 E-3 * (2.7/U_n10 + 0.142 + U_n10/13.09) ! L & Y eq. (6a)826 Cd_n10 = 1.e-3 * (2.7/U_n10 + 0.142 + U_n10/13.09) ! L & Y eq. (6a) 827 827 sqrt_Cd_n10 = sqrt(Cd_n10) 828 Ce_n10 = 1 E-3 * (34.6 * sqrt_Cd_n10) ! L & Y eq. (6b)828 Ce_n10 = 1.e-3 * (34.6 * sqrt_Cd_n10) ! L & Y eq. (6b) 829 829 stab = 0.5 + sign(0.5,zeta) 830 Ch_n10 = 1 E-3*sqrt_Cd_n10*(18.*stab + 32.7*(1-stab)) ! L & Y eq. (6c), (6d)830 Ch_n10 = 1.e-3*sqrt_Cd_n10*(18.*stab + 32.7*(1.-stab)) ! L & Y eq. (6c), (6d) 831 831 832 832 !! Shifting the neutral 10m transfer coefficients to ( zu , zeta ) : … … 927 927 Cd_n10(:,:) = cdn_wave 928 928 ELSE 929 Cd_n10 = 1 E-3*( 2.7/dU10 + 0.142 + dU10/13.09 )929 Cd_n10 = 1.e-3*( 2.7/dU10 + 0.142 + dU10/13.09 ) 930 930 ENDIF 931 931 sqrt_Cd_n10 = sqrt(Cd_n10) 932 Ce_n10 = 1 E-3*( 34.6 * sqrt_Cd_n10 )933 Ch_n10 = 1 E-3*sqrt_Cd_n10*(18*stab + 32.7*(1- stab))932 Ce_n10 = 1.e-3*( 34.6 * sqrt_Cd_n10 ) 933 Ch_n10 = 1.e-3*sqrt_Cd_n10*(18.*stab + 32.7*(1. - stab)) 934 934 935 935 !! Initializing transf. coeff. with their first guess neutral equivalents : … … 973 973 ELSE 974 974 !! Updating the neutral 10m transfer coefficients : 975 Cd_n10 = 1 E-3 * (2.7/U_n10 + 0.142 + U_n10/13.09) ! L & Y eq. (6a)975 Cd_n10 = 1.e-3 * (2.7/U_n10 + 0.142 + U_n10/13.09) ! L & Y eq. (6a) 976 976 sqrt_Cd_n10 = sqrt(Cd_n10) 977 Ce_n10 = 1 E-3 * (34.6 * sqrt_Cd_n10) ! L & Y eq. (6b)977 Ce_n10 = 1.e-3 * (34.6 * sqrt_Cd_n10) ! L & Y eq. (6b) 978 978 stab = 0.5 + sign(0.5,zeta_u) 979 Ch_n10 = 1 E-3*sqrt_Cd_n10*(18.*stab + 32.7*(1-stab)) ! L & Y eq. (6c-6d)979 Ch_n10 = 1.e-3*sqrt_Cd_n10*(18.*stab + 32.7*(1.-stab)) ! L & Y eq. (6c-6d) 980 980 !! 981 981 !! -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r4269 r4333 58 58 USE in_out_manager ! I/O manager 59 59 USE prtctl ! Print control 60 USE lib_fortran ! 60 61 61 62 #if defined key_bdy … … 167 168 ! 168 169 IF( ln_nicep ) THEN ! control print at a given point 169 jiindx = 6 ; jjindx = 47170 WRITE(numout,*) ' The debugging point is : jiindx : ',jiindx, ' jjindx : ',jjindx170 jiindx = 177 ; jjindx = 112 171 IF(lwp) WRITE(numout,*) ' The debugging point is : jiindx : ',jiindx, ' jjindx : ',jjindx 171 172 ENDIF 172 173 ENDIF … … 303 304 fhbri (:,:) = 0._wp ; fheat_mec(:,:) = 0._wp ; fheat_res(:,:) = 0._wp 304 305 fhmec (:,:) = 0._wp ; 305 fmmec (:,:) = 0._wp 306 fmmec (:,:) = 0._wp 307 fmmflx (:,:) = 0._wp 306 308 focea2D(:,:) = 0._wp 307 309 fsup2D (:,:) = 0._wp … … 328 330 CALL lim_rst_opn( kt ) ! Open Ice restart file 329 331 ! 330 IF( ln_nicep ) CALL lim_prt_state( jiindx, jjindx, 1, ' - Beginning the time step - ' ) ! control print 331 ! 332 IF( .NOT. lk_c1d ) THEN ! Ice dynamics & transport (except in 1D case) 332 IF( ln_nicep ) CALL lim_prt_state( kt, jiindx, jjindx, 1, ' - Beginning the time step - ' ) ! control print 333 ! ---------------------------------------------- 334 ! ice dynamics and transport (except in 1D case) 335 ! ---------------------------------------------- 336 IF( .NOT. lk_c1d ) THEN 333 337 CALL lim_dyn( kt ) ! Ice dynamics ( rheology/dynamics ) 334 338 CALL lim_trp( kt ) ! Ice transport ( Advection/diffusion ) 335 339 CALL lim_var_glo2eqv ! equivalent variables, requested for rafting 336 IF( ln_nicep ) CALL lim_prt_state( jiindx, jjindx,-1, ' - ice dyn & trp - ' ) ! control print340 IF( ln_nicep ) CALL lim_prt_state( kt, jiindx, jjindx,-1, ' - ice dyn & trp - ' ) ! control print 337 341 CALL lim_itd_me ! Mechanical redistribution ! (ridging/rafting) 338 342 CALL lim_var_agg( 1 ) 343 #if defined key_bdy 344 ! bdy ice thermo 345 CALL lim_var_glo2eqv ! equivalent variables 346 CALL bdy_ice_lim( kt ) 347 CALL lim_itd_me_zapsmall 348 CALL lim_var_agg(1) 349 IF( ln_nicep ) CALL lim_prt_state( kt, jiindx, jjindx, 1, ' - ice thermo bdy - ' ) ! control print 350 #endif 339 351 CALL lim_update1 340 352 ENDIF … … 349 361 old_oa_i(:,:,:) = oa_i(:,:,:) 350 362 old_smv_i(:,:,:) = smv_i (:,:,:) 351 ! ! Ice thermodynamics 363 364 ! ---------------------------------------------- 365 ! ice thermodynamic 366 ! ---------------------------------------------- 352 367 CALL lim_var_glo2eqv ! equivalent variables 353 368 CALL lim_var_agg(1) ! aggregate ice categories 369 ! previous lead fraction and ice volume for flux calculations 370 pfrld(:,:) = 1._wp - at_i(:,:) 371 phicif(:,:) = vt_i(:,:) 372 ! 354 373 CALL lim_var_bv ! bulk brine volume (diag) 355 374 CALL lim_thd( kt ) ! Ice thermodynamics … … 357 376 oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * zcoef 358 377 CALL lim_var_glo2eqv ! this CALL is maybe not necessary (Martin) 359 IF( ln_nicep ) CALL lim_prt_state( jiindx, jjindx, 1, ' - ice thermodyn. - ' ) ! control print378 IF( ln_nicep ) CALL lim_prt_state( kt, jiindx, jjindx, 1, ' - ice thermodyn. - ' ) ! control print 360 379 CALL lim_itd_th( kt ) ! Remap ice categories, lateral accretion ! 361 !362 ! ! Global variables update363 380 CALL lim_var_agg( 1 ) ! requested by limupdate 364 CALL lim_update2 ! Global variables update 365 #if defined key_bdy 366 CALL lim_var_glo2eqv ! 367 CALL bdy_ice_lim( kt ) ! clem modif: bdy ice 368 CALL bdy_ice_lim_dyn( 1 ) !?? repeated from limrhg.F90 369 #endif 381 CALL lim_update2 ! Global variables update 382 370 383 CALL lim_var_glo2eqv ! equivalent variables (outputs) 371 384 CALL lim_var_agg(2) ! aggregate ice thickness categories 372 IF( ln_nicep ) CALL lim_prt_state( jiindx, jjindx, 2, ' - Final state - ' ) ! control print385 IF( ln_nicep ) CALL lim_prt_state( kt, jiindx, jjindx, 2, ' - Final state - ' ) ! control print 373 386 ! 374 387 CALL lim_sbc_flx( kt ) ! Update surface ocean mass, heat and salt fluxes 375 388 ! 376 IF( ln_nicep ) CALL lim_prt_state( jiindx, jjindx, 3, ' - Final state lim_sbc - ' ) ! control print389 IF( ln_nicep ) CALL lim_prt_state( kt, jiindx, jjindx, 3, ' - Final state lim_sbc - ' ) ! control print 377 390 ! 378 391 ! ! Diagnostics and outputs … … 387 400 CALL lim_var_glo2eqv ! ??? 388 401 ! 389 IF( ln_nicep ) CALL lim_ctl 402 IF( ln_nicep ) CALL lim_ctl( kt ) ! alerts in case of model crash 390 403 ! 391 404 ENDIF ! End sea-ice time step only … … 414 427 415 428 416 SUBROUTINE lim_ctl 429 SUBROUTINE lim_ctl( kt ) 417 430 !!----------------------------------------------------------------------- 418 431 !! *** ROUTINE lim_ctl *** … … 420 433 !! ** Purpose : Alerts in case of model crash 421 434 !!------------------------------------------------------------------- 435 INTEGER, INTENT(in) :: kt ! ocean time step 422 436 INTEGER :: ji, jj, jk, jl ! dummy loop indices 423 437 INTEGER :: inb_altests ! number of alert tests (max 20) … … 439 453 DO ji = 1, jpi 440 454 IF( v_i(ji,jj,jl) /= 0._wp .AND. a_i(ji,jj,jl) == 0._wp ) THEN 441 WRITE(numout,*) ' ALERTE 2 : Incompatible volume and concentration '442 WRITE(numout,*) ' at_i ', at_i(ji,jj)443 WRITE(numout,*) ' Point - category', ji, jj, jl444 WRITE(numout,*) ' a_i *** a_i_old ', a_i (ji,jj,jl), old_a_i (ji,jj,jl)445 WRITE(numout,*) ' v_i *** v_i_old ', v_i (ji,jj,jl), old_v_i (ji,jj,jl)446 WRITE(numout,*) ' d_a_i_thd/trp ', d_a_i_thd(ji,jj,jl), d_a_i_trp(ji,jj,jl)447 WRITE(numout,*) ' d_v_i_thd/trp ', d_v_i_thd(ji,jj,jl), d_v_i_trp(ji,jj,jl)455 !WRITE(numout,*) ' ALERTE 2 : Incompatible volume and concentration ' 456 !WRITE(numout,*) ' at_i ', at_i(ji,jj) 457 !WRITE(numout,*) ' Point - category', ji, jj, jl 458 !WRITE(numout,*) ' a_i *** a_i_old ', a_i (ji,jj,jl), old_a_i (ji,jj,jl) 459 !WRITE(numout,*) ' v_i *** v_i_old ', v_i (ji,jj,jl), old_v_i (ji,jj,jl) 460 !WRITE(numout,*) ' d_a_i_thd/trp ', d_a_i_thd(ji,jj,jl), d_a_i_trp(ji,jj,jl) 461 !WRITE(numout,*) ' d_v_i_thd/trp ', d_v_i_thd(ji,jj,jl), d_v_i_trp(ji,jj,jl) 448 462 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 449 463 ENDIF … … 459 473 DO ji = 1, jpi 460 474 IF( ht_i(ji,jj,jl) > 50._wp ) THEN 461 CALL lim_prt_state(ji, jj, 2, ' ALERTE 3 : Very thick ice ' )475 !CALL lim_prt_state( kt, ji, jj, 2, ' ALERTE 3 : Very thick ice ' ) 462 476 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 463 477 ENDIF … … 470 484 DO jj = 1, jpj 471 485 DO ji = 1, jpi 472 IF( MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) > 0.5 .AND. &486 IF( MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) > 1.5 .AND. & 473 487 & at_i(ji,jj) > 0._wp ) THEN 474 CALL lim_prt_state(ji, jj, 1, ' ALERTE 4 : Very fast ice ' )475 WRITE(numout,*) ' ice strength : ', strength(ji,jj)476 WRITE(numout,*) ' oceanic stress utau : ', utau(ji,jj)477 WRITE(numout,*) ' oceanic stress vtau : ', vtau(ji,jj)478 WRITE(numout,*) ' sea-ice stress utau_ice : ', utau_ice(ji,jj)479 WRITE(numout,*) ' sea-ice stress vtau_ice : ', vtau_ice(ji,jj)480 WRITE(numout,*) ' oceanic speed u : ', u_oce(ji,jj)481 WRITE(numout,*) ' oceanic speed v : ', v_oce(ji,jj)482 WRITE(numout,*) ' sst : ', sst_m(ji,jj)483 WRITE(numout,*) ' sss : ', sss_m(ji,jj)484 WRITE(numout,*)488 !CALL lim_prt_state( kt, ji, jj, 1, ' ALERTE 4 : Very fast ice ' ) 489 !WRITE(numout,*) ' ice strength : ', strength(ji,jj) 490 !WRITE(numout,*) ' oceanic stress utau : ', utau(ji,jj) 491 !WRITE(numout,*) ' oceanic stress vtau : ', vtau(ji,jj) 492 !WRITE(numout,*) ' sea-ice stress utau_ice : ', utau_ice(ji,jj) 493 !WRITE(numout,*) ' sea-ice stress vtau_ice : ', vtau_ice(ji,jj) 494 !WRITE(numout,*) ' oceanic speed u : ', u_oce(ji,jj) 495 !WRITE(numout,*) ' oceanic speed v : ', v_oce(ji,jj) 496 !WRITE(numout,*) ' sst : ', sst_m(ji,jj) 497 !WRITE(numout,*) ' sss : ', sss_m(ji,jj) 498 !WRITE(numout,*) 485 499 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 486 500 ENDIF … … 494 508 DO ji = 1, jpi 495 509 IF( tms(ji,jj) <= 0._wp .AND. at_i(ji,jj) > 0._wp ) THEN 496 CALL lim_prt_state(ji, jj, 1, ' ALERTE 6 : Ice on continents ' )497 WRITE(numout,*) ' masks s, u, v : ', tms(ji,jj), tmu(ji,jj), tmv(ji,jj)498 WRITE(numout,*) ' sst : ', sst_m(ji,jj)499 WRITE(numout,*) ' sss : ', sss_m(ji,jj)500 WRITE(numout,*) ' at_i(ji,jj) : ', at_i(ji,jj)501 WRITE(numout,*) ' v_ice(ji,jj) : ', v_ice(ji,jj)502 WRITE(numout,*) ' v_ice(ji,jj-1) : ', v_ice(ji,jj-1)503 WRITE(numout,*) ' u_ice(ji-1,jj) : ', u_ice(ji-1,jj)504 WRITE(numout,*) ' u_ice(ji,jj) : ', v_ice(ji,jj)510 !CALL lim_prt_state( kt, ji, jj, 1, ' ALERTE 6 : Ice on continents ' ) 511 !WRITE(numout,*) ' masks s, u, v : ', tms(ji,jj), tmu(ji,jj), tmv(ji,jj) 512 !WRITE(numout,*) ' sst : ', sst_m(ji,jj) 513 !WRITE(numout,*) ' sss : ', sss_m(ji,jj) 514 !WRITE(numout,*) ' at_i(ji,jj) : ', at_i(ji,jj) 515 !WRITE(numout,*) ' v_ice(ji,jj) : ', v_ice(ji,jj) 516 !WRITE(numout,*) ' v_ice(ji,jj-1) : ', v_ice(ji,jj-1) 517 !WRITE(numout,*) ' u_ice(ji-1,jj) : ', u_ice(ji-1,jj) 518 !WRITE(numout,*) ' u_ice(ji,jj) : ', v_ice(ji,jj) 505 519 ! 506 520 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 … … 516 530 DO jj = 1, jpj 517 531 DO ji = 1, jpi 518 !!gm test twice sm_i ... ???? bug? 519 IF( ( ( ABS( sm_i(ji,jj,jl) ) < 0.5 ) .OR. & 520 ( ABS( sm_i(ji,jj,jl) ) < 0.5 ) ) .AND. & 521 ( a_i(ji,jj,jl) > 0._wp ) ) THEN 522 ! CALL lim_prt_state(ji,jj,1, ' ALERTE 7 : Very fresh ice ' ) 532 IF( sm_i(ji,jj,jl) < 0.1 .AND. a_i(ji,jj,jl) > 0._wp ) THEN 533 ! CALL lim_prt_state(kt,ji,jj,1, ' ALERTE 7 : Very fresh ice ' ) 523 534 ! WRITE(numout,*) ' sst : ', sst_m(ji,jj) 524 535 ! WRITE(numout,*) ' sss : ', sss_m(ji,jj) … … 541 552 ( ABS( o_i(ji,jj,jl) ) < 0._wp) ) .AND. & 542 553 ( a_i(ji,jj,jl) > 0._wp ) ) THEN 543 CALL lim_prt_state(ji, jj, 1, ' ALERTE 9 : Wrong ice age ')554 !CALL lim_prt_state( kt, ji, jj, 1, ' ALERTE 9 : Wrong ice age ') 544 555 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 545 556 ENDIF … … 553 564 DO jj = 1, jpj 554 565 DO ji = 1, jpi 555 IF( ABS( sfx (ji,jj) ) .GT. 1.0e-2 ) THEN 556 CALL lim_prt_state(ji, jj, 3, ' ALERTE 5 : High salt flux ' )557 DO jl = 1, jpl558 WRITE(numout,*) ' Category no: ', jl559 WRITE(numout,*) ' a_i : ', a_i (ji,jj,jl) , ' old_a_i : ', old_a_i (ji,jj,jl)560 WRITE(numout,*) ' d_a_i_trp : ', d_a_i_trp(ji,jj,jl) , ' d_a_i_thd : ', d_a_i_thd(ji,jj,jl)561 WRITE(numout,*) ' v_i : ', v_i (ji,jj,jl) , ' old_v_i : ', old_v_i (ji,jj,jl)562 WRITE(numout,*) ' d_v_i_trp : ', d_v_i_trp(ji,jj,jl) , ' d_v_i_thd : ', d_v_i_thd(ji,jj,jl)563 WRITE(numout,*) ' '564 END DO566 IF( ABS( sfx (ji,jj) ) .GT. 1.0e-2 ) THEN ! = 1 psu/day for 1m ocean depth 567 !CALL lim_prt_state( kt, ji, jj, 3, ' ALERTE 5 : High salt flux ' ) 568 !DO jl = 1, jpl 569 !WRITE(numout,*) ' Category no: ', jl 570 !WRITE(numout,*) ' a_i : ', a_i (ji,jj,jl) , ' old_a_i : ', old_a_i (ji,jj,jl) 571 !WRITE(numout,*) ' d_a_i_trp : ', d_a_i_trp(ji,jj,jl) , ' d_a_i_thd : ', d_a_i_thd(ji,jj,jl) 572 !WRITE(numout,*) ' v_i : ', v_i (ji,jj,jl) , ' old_v_i : ', old_v_i (ji,jj,jl) 573 !WRITE(numout,*) ' d_v_i_trp : ', d_v_i_trp(ji,jj,jl) , ' d_v_i_thd : ', d_v_i_thd(ji,jj,jl) 574 !WRITE(numout,*) ' ' 575 !END DO 565 576 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 566 577 ENDIF … … 573 584 DO jj = 1, jpj 574 585 DO ji = 1, jpi 575 IF( ABS( qns(ji,jj) ) > 1500._wp .AND. at_i(ji,jj) > 0._wp )THEN586 IF( ABS( qns(ji,jj) ) > 1500._wp .AND. at_i(ji,jj) > 0._wp ) THEN 576 587 ! 577 WRITE(numout,*) ' ALERTE 8 : Very high non-solar heat flux'578 WRITE(numout,*) ' ji, jj : ', ji, jj579 WRITE(numout,*) ' qns : ', qns(ji,jj)580 WRITE(numout,*) ' sst : ', sst_m(ji,jj)581 WRITE(numout,*) ' sss : ', sss_m(ji,jj)582 WRITE(numout,*) ' qcmif : ', qcmif(ji,jj)583 WRITE(numout,*) ' qldif : ', qldif(ji,jj)584 WRITE(numout,*) ' qcmif : ', qcmif(ji,jj) / rdt_ice585 WRITE(numout,*) ' qldif : ', qldif(ji,jj) / rdt_ice586 WRITE(numout,*) ' qfvbq : ', qfvbq(ji,jj)587 WRITE(numout,*) ' qdtcn : ', qdtcn(ji,jj)588 WRITE(numout,*) ' qfvbq / dt: ', qfvbq(ji,jj) / rdt_ice589 WRITE(numout,*) ' qdtcn / dt: ', qdtcn(ji,jj) / rdt_ice590 WRITE(numout,*) ' fdtcn : ', fdtcn(ji,jj)591 WRITE(numout,*) ' fhmec : ', fhmec(ji,jj)592 WRITE(numout,*) ' fheat_mec : ', fheat_mec(ji,jj)593 WRITE(numout,*) ' fheat_res : ', fheat_res(ji,jj)594 WRITE(numout,*) ' fhbri : ', fhbri(ji,jj)588 !WRITE(numout,*) ' ALERTE 8 : Very high non-solar heat flux' 589 !WRITE(numout,*) ' ji, jj : ', ji, jj 590 !WRITE(numout,*) ' qns : ', qns(ji,jj) 591 !WRITE(numout,*) ' sst : ', sst_m(ji,jj) 592 !WRITE(numout,*) ' sss : ', sss_m(ji,jj) 593 !WRITE(numout,*) ' qcmif : ', qcmif(ji,jj) 594 !WRITE(numout,*) ' qldif : ', qldif(ji,jj) 595 !WRITE(numout,*) ' qcmif : ', qcmif(ji,jj) / rdt_ice 596 !WRITE(numout,*) ' qldif : ', qldif(ji,jj) / rdt_ice 597 !WRITE(numout,*) ' qfvbq : ', qfvbq(ji,jj) 598 !WRITE(numout,*) ' qdtcn : ', qdtcn(ji,jj) 599 !WRITE(numout,*) ' qfvbq / dt: ', qfvbq(ji,jj) / rdt_ice 600 !WRITE(numout,*) ' qdtcn / dt: ', qdtcn(ji,jj) / rdt_ice 601 !WRITE(numout,*) ' fdtcn : ', fdtcn(ji,jj) 602 !WRITE(numout,*) ' fhmec : ', fhmec(ji,jj) 603 !WRITE(numout,*) ' fheat_mec : ', fheat_mec(ji,jj) 604 !WRITE(numout,*) ' fheat_res : ', fheat_res(ji,jj) 605 !WRITE(numout,*) ' fhbri : ', fhbri(ji,jj) 595 606 ! 596 CALL lim_prt_state(ji, jj, 2, ' ')607 !CALL lim_prt_state( kt, ji, jj, 2, ' ') 597 608 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 598 609 ! … … 611 622 DO ji = 1, jpi 612 623 ztmelts = -tmut * s_i(ji,jj,jk,jl) + rtt 613 IF( t_i(ji,jj,jk,jl) >= ztmelts .AND. v_i(ji,jj,jl) > 1.e- 6&624 IF( t_i(ji,jj,jk,jl) >= ztmelts .AND. v_i(ji,jj,jl) > 1.e-10 & 614 625 & .AND. a_i(ji,jj,jl) > 0._wp ) THEN 615 WRITE(numout,*) ' ALERTE 10 : Very warm ice'616 WRITE(numout,*) ' ji, jj, jk, jl : ', ji, jj, jk, jl617 WRITE(numout,*) ' t_i : ', t_i(ji,jj,jk,jl)618 WRITE(numout,*) ' e_i : ', e_i(ji,jj,jk,jl)619 WRITE(numout,*) ' s_i : ', s_i(ji,jj,jk,jl)620 WRITE(numout,*) ' ztmelts : ', ztmelts626 !WRITE(numout,*) ' ALERTE 10 : Very warm ice' 627 !WRITE(numout,*) ' ji, jj, jk, jl : ', ji, jj, jk, jl 628 !WRITE(numout,*) ' t_i : ', t_i(ji,jj,jk,jl) 629 !WRITE(numout,*) ' e_i : ', e_i(ji,jj,jk,jl) 630 !WRITE(numout,*) ' s_i : ', s_i(ji,jj,jk,jl) 631 !WRITE(numout,*) ' ztmelts : ', ztmelts 621 632 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 622 633 ENDIF … … 626 637 END DO 627 638 628 ialert_id = 1 ! reference number of this alert 629 cl_alname(ialert_id) = ' NO alerte 1 ' ! name of the alert 630 WRITE(numout,*) 631 WRITE(numout,*) ' All alerts at the end of ice model ' 632 DO ialert_id = 1, inb_altests 633 WRITE(numout,*) ialert_id, cl_alname(ialert_id)//' : ', inb_alp(ialert_id), ' times ! ' 634 END DO 635 ! 639 ! sum of the alerts on all processors 640 IF( lk_mpp ) THEN 641 DO ialert_id = 1, inb_altests 642 CALL mpp_sum(inb_alp(ialert_id)) 643 END DO 644 ENDIF 645 646 ! print alerts 647 IF( lwp ) THEN 648 ialert_id = 1 ! reference number of this alert 649 cl_alname(ialert_id) = ' NO alerte 1 ' ! name of the alert 650 WRITE(numout,*) ' time step ',kt 651 WRITE(numout,*) ' All alerts at the end of ice model ' 652 DO ialert_id = 1, inb_altests 653 WRITE(numout,*) ialert_id, cl_alname(ialert_id)//' : ', inb_alp(ialert_id), ' times ! ' 654 END DO 655 ENDIF 656 ! 636 657 END SUBROUTINE lim_ctl 637 658 638 659 639 SUBROUTINE lim_prt_state( k i, kj, kn, cd1 )660 SUBROUTINE lim_prt_state( kt, ki, kj, kn, cd1 ) 640 661 !!----------------------------------------------------------------------- 641 662 !! *** ROUTINE lim_prt_state *** … … 651 672 !! n : number of the option 652 673 !!------------------------------------------------------------------- 674 INTEGER , INTENT(in) :: kt ! ocean time step 653 675 INTEGER , INTENT(in) :: ki, kj, kn ! ocean gridpoint indices 654 676 CHARACTER(len=*), INTENT(in) :: cd1 ! 655 677 !! 656 INTEGER :: jl 678 INTEGER :: jl, ji, jj 657 679 !!------------------------------------------------------------------- 658 680 659 WRITE(numout,*) cd1 ! print title 660 661 !---------------- 662 ! Simple state 663 !---------------- 664 665 IF ( kn == 1 .OR. kn == -1 ) THEN 666 WRITE(numout,*) ' lim_prt_state - Point : ',ki,kj 667 WRITE(numout,*) ' ~~~~~~~~~~~~~~ ' 668 WRITE(numout,*) ' Simple state ' 669 WRITE(numout,*) ' masks s,u,v : ', tms(ki,kj), tmu(ki,kj), tmv(ki,kj) 670 WRITE(numout,*) ' lat - long : ', gphit(ki,kj), glamt(ki,kj) 671 WRITE(numout,*) ' Time step : ', numit 672 WRITE(numout,*) ' - Ice drift ' 673 WRITE(numout,*) ' ~~~~~~~~~~~ ' 674 WRITE(numout,*) ' u_ice(i-1,j) : ', u_ice(ki-1,kj) 675 WRITE(numout,*) ' u_ice(i ,j) : ', u_ice(ki,kj) 676 WRITE(numout,*) ' v_ice(i ,j-1): ', v_ice(ki,kj-1) 677 WRITE(numout,*) ' v_ice(i ,j) : ', v_ice(ki,kj) 678 WRITE(numout,*) ' strength : ', strength(ki,kj) 679 WRITE(numout,*) 680 WRITE(numout,*) ' - Cell values ' 681 WRITE(numout,*) ' ~~~~~~~~~~~ ' 682 WRITE(numout,*) ' cell area : ', area(ki,kj) 683 WRITE(numout,*) ' at_i : ', at_i(ki,kj) 684 WRITE(numout,*) ' vt_i : ', vt_i(ki,kj) 685 WRITE(numout,*) ' vt_s : ', vt_s(ki,kj) 686 DO jl = 1, jpl 687 WRITE(numout,*) ' - Category (', jl,')' 688 WRITE(numout,*) ' a_i : ', a_i(ki,kj,jl) 689 WRITE(numout,*) ' ht_i : ', ht_i(ki,kj,jl) 690 WRITE(numout,*) ' ht_s : ', ht_s(ki,kj,jl) 691 WRITE(numout,*) ' v_i : ', v_i(ki,kj,jl) 692 WRITE(numout,*) ' v_s : ', v_s(ki,kj,jl) 693 WRITE(numout,*) ' e_s : ', e_s(ki,kj,1,jl)/1.0e9 694 WRITE(numout,*) ' e_i : ', e_i(ki,kj,1:nlay_i,jl)/1.0e9 695 WRITE(numout,*) ' t_su : ', t_su(ki,kj,jl) 696 WRITE(numout,*) ' t_snow : ', t_s(ki,kj,1,jl) 697 WRITE(numout,*) ' t_i : ', t_i(ki,kj,1:nlay_i,jl) 698 WRITE(numout,*) ' sm_i : ', sm_i(ki,kj,jl) 699 WRITE(numout,*) ' smv_i : ', smv_i(ki,kj,jl) 700 WRITE(numout,*) 701 WRITE(numout,*) ' Pathological case : ', patho_case(ki,kj,jl) 702 END DO 703 ENDIF 704 IF( kn == -1 ) THEN 705 WRITE(numout,*) ' Mechanical Check ************** ' 706 WRITE(numout,*) ' Check what means ice divergence ' 707 WRITE(numout,*) ' Total ice concentration ', at_i (ki,kj) 708 WRITE(numout,*) ' Total lead fraction ', ato_i(ki,kj) 709 WRITE(numout,*) ' Sum of both ', ato_i(ki,kj) + at_i(ki,kj) 710 WRITE(numout,*) ' Sum of both minus 1 ', ato_i(ki,kj) + at_i(ki,kj) - 1.00 711 ENDIF 712 713 714 !-------------------- 715 ! Exhaustive state 716 !-------------------- 717 718 IF ( kn .EQ. 2 ) THEN 719 WRITE(numout,*) ' lim_prt_state - Point : ',ki,kj 720 WRITE(numout,*) ' ~~~~~~~~~~~~~~ ' 721 WRITE(numout,*) ' Exhaustive state ' 722 WRITE(numout,*) ' lat - long ', gphit(ki,kj), glamt(ki,kj) 723 WRITE(numout,*) ' Time step ', numit 724 WRITE(numout,*) 725 WRITE(numout,*) ' - Cell values ' 726 WRITE(numout,*) ' ~~~~~~~~~~~ ' 727 WRITE(numout,*) ' cell area : ', area(ki,kj) 728 WRITE(numout,*) ' at_i : ', at_i(ki,kj) 729 WRITE(numout,*) ' vt_i : ', vt_i(ki,kj) 730 WRITE(numout,*) ' vt_s : ', vt_s(ki,kj) 731 WRITE(numout,*) ' u_ice(i-1,j) : ', u_ice(ki-1,kj) 732 WRITE(numout,*) ' u_ice(i ,j) : ', u_ice(ki,kj) 733 WRITE(numout,*) ' v_ice(i ,j-1): ', v_ice(ki,kj-1) 734 WRITE(numout,*) ' v_ice(i ,j) : ', v_ice(ki,kj) 735 WRITE(numout,*) ' strength : ', strength(ki,kj) 736 WRITE(numout,*) ' d_u_ice_dyn : ', d_u_ice_dyn(ki,kj), ' d_v_ice_dyn : ', d_v_ice_dyn(ki,kj) 737 WRITE(numout,*) ' old_u_ice : ', old_u_ice(ki,kj) , ' old_v_ice : ', old_v_ice(ki,kj) 738 WRITE(numout,*) 739 740 DO jl = 1, jpl 741 WRITE(numout,*) ' - Category (',jl,')' 742 WRITE(numout,*) ' ~~~~~~~~ ' 743 WRITE(numout,*) ' ht_i : ', ht_i(ki,kj,jl) , ' ht_s : ', ht_s(ki,kj,jl) 744 WRITE(numout,*) ' t_i : ', t_i(ki,kj,1:nlay_i,jl) 745 WRITE(numout,*) ' t_su : ', t_su(ki,kj,jl) , ' t_s : ', t_s(ki,kj,1,jl) 746 WRITE(numout,*) ' sm_i : ', sm_i(ki,kj,jl) , ' o_i : ', o_i(ki,kj,jl) 747 WRITE(numout,*) ' a_i : ', a_i(ki,kj,jl) , ' old_a_i : ', old_a_i(ki,kj,jl) 748 WRITE(numout,*) ' d_a_i_trp : ', d_a_i_trp(ki,kj,jl) , ' d_a_i_thd : ', d_a_i_thd(ki,kj,jl) 749 WRITE(numout,*) ' v_i : ', v_i(ki,kj,jl) , ' old_v_i : ', old_v_i(ki,kj,jl) 750 WRITE(numout,*) ' d_v_i_trp : ', d_v_i_trp(ki,kj,jl) , ' d_v_i_thd : ', d_v_i_thd(ki,kj,jl) 751 WRITE(numout,*) ' v_s : ', v_s(ki,kj,jl) , ' old_v_s : ', old_v_s(ki,kj,jl) 752 WRITE(numout,*) ' d_v_s_trp : ', d_v_s_trp(ki,kj,jl) , ' d_v_s_thd : ', d_v_s_thd(ki,kj,jl) 753 WRITE(numout,*) ' e_i1 : ', e_i(ki,kj,1,jl)/1.0e9 , ' old_ei1 : ', old_e_i(ki,kj,1,jl)/1.0e9 754 WRITE(numout,*) ' de_i1_trp : ', d_e_i_trp(ki,kj,1,jl)/1.0e9, ' de_i1_thd : ', d_e_i_thd(ki,kj,1,jl)/1.0e9 755 WRITE(numout,*) ' e_i2 : ', e_i(ki,kj,2,jl)/1.0e9 , ' old_ei2 : ', old_e_i(ki,kj,2,jl)/1.0e9 756 WRITE(numout,*) ' de_i2_trp : ', d_e_i_trp(ki,kj,2,jl)/1.0e9, ' de_i2_thd : ', d_e_i_thd(ki,kj,2,jl)/1.0e9 757 WRITE(numout,*) ' e_snow : ', e_s(ki,kj,1,jl) , ' old_e_snow : ', old_e_s(ki,kj,1,jl) 758 WRITE(numout,*) ' d_e_s_trp : ', d_e_s_trp(ki,kj,1,jl) , ' d_e_s_thd : ', d_e_s_thd(ki,kj,1,jl) 759 WRITE(numout,*) ' smv_i : ', smv_i(ki,kj,jl) , ' old_smv_i : ', old_smv_i(ki,kj,jl) 760 WRITE(numout,*) ' d_smv_i_trp: ', d_smv_i_trp(ki,kj,jl) , ' d_smv_i_thd: ', d_smv_i_thd(ki,kj,jl) 761 WRITE(numout,*) ' oa_i : ', oa_i(ki,kj,jl) , ' old_oa_i : ', old_oa_i(ki,kj,jl) 762 WRITE(numout,*) ' d_oa_i_trp : ', d_oa_i_trp(ki,kj,jl) , ' d_oa_i_thd : ', d_oa_i_thd(ki,kj,jl) 763 WRITE(numout,*) ' Path. case : ', patho_case(ki,kj,jl) 764 END DO !jl 765 766 WRITE(numout,*) 767 WRITE(numout,*) ' - Heat / FW fluxes ' 768 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~ ' 769 ! WRITE(numout,*) ' sfx_bri : ', sfx_bri (ki,kj) 770 ! WRITE(numout,*) ' sfx : ', sfx (ki,kj) 771 ! WRITE(numout,*) ' sfx_res : ', sfx_res(ki,kj) 772 WRITE(numout,*) ' fmmec : ', fmmec (ki,kj) 773 WRITE(numout,*) ' fhmec : ', fhmec (ki,kj) 774 WRITE(numout,*) ' fhbri : ', fhbri (ki,kj) 775 WRITE(numout,*) ' fheat_mec : ', fheat_mec(ki,kj) 776 WRITE(numout,*) 777 WRITE(numout,*) ' sst : ', sst_m(ki,kj) 778 WRITE(numout,*) ' sss : ', sss_m(ki,kj) 779 WRITE(numout,*) 780 WRITE(numout,*) ' - Stresses ' 781 WRITE(numout,*) ' ~~~~~~~~ ' 782 WRITE(numout,*) ' utau_ice : ', utau_ice(ki,kj) 783 WRITE(numout,*) ' vtau_ice : ', vtau_ice(ki,kj) 784 WRITE(numout,*) ' utau : ', utau (ki,kj) 785 WRITE(numout,*) ' vtau : ', vtau (ki,kj) 786 WRITE(numout,*) ' oc. vel. u : ', u_oce (ki,kj) 787 WRITE(numout,*) ' oc. vel. v : ', v_oce (ki,kj) 788 ENDIF 789 790 !--------------------- 791 ! Salt / heat fluxes 792 !--------------------- 793 794 IF ( kn .EQ. 3 ) THEN 795 WRITE(numout,*) ' lim_prt_state - Point : ',ki,kj 796 WRITE(numout,*) ' ~~~~~~~~~~~~~~ ' 797 WRITE(numout,*) ' - Salt / Heat Fluxes ' 798 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~ ' 799 WRITE(numout,*) ' lat - long ', gphit(ki,kj), glamt(ki,kj) 800 WRITE(numout,*) ' Time step ', numit 801 WRITE(numout,*) 802 WRITE(numout,*) ' - Heat fluxes at bottom interface ***' 803 WRITE(numout,*) ' qsr : ', qsr(ki,kj) 804 WRITE(numout,*) ' qns : ', qns(ki,kj) 805 WRITE(numout,*) 806 WRITE(numout,*) ' - Salt fluxes at bottom interface ***' 807 WRITE(numout,*) ' emp : ', emp (ki,kj) 808 WRITE(numout,*) ' sfx_bri : ', sfx_bri(ki,kj) 809 WRITE(numout,*) ' sfx : ', sfx (ki,kj) 810 WRITE(numout,*) ' sfx_res : ', sfx_res(ki,kj) 811 WRITE(numout,*) ' sfx_mec : ', sfx_mec(ki,kj) 812 WRITE(numout,*) ' - Heat fluxes at bottom interface ***' 813 WRITE(numout,*) ' fheat_res : ', fheat_res(ki,kj) 814 WRITE(numout,*) 815 WRITE(numout,*) ' - Momentum fluxes ' 816 WRITE(numout,*) ' utau : ', utau(ki,kj) 817 WRITE(numout,*) ' vtau : ', vtau(ki,kj) 818 ENDIF 819 WRITE(numout,*) ' ' 820 ! 681 DO ji = mi0(ki), mi1(ki) 682 DO jj = mj0(kj), mj1(kj) 683 684 WRITE(numout,*) ' time step ',kt,' ',cd1 ! print title 685 686 !---------------- 687 ! Simple state 688 !---------------- 689 690 IF ( kn == 1 .OR. kn == -1 ) THEN 691 WRITE(numout,*) ' lim_prt_state - Point : ',ji,jj 692 WRITE(numout,*) ' ~~~~~~~~~~~~~~ ' 693 WRITE(numout,*) ' Simple state ' 694 WRITE(numout,*) ' masks s,u,v : ', tms(ji,jj), tmu(ji,jj), tmv(ji,jj) 695 WRITE(numout,*) ' lat - long : ', gphit(ji,jj), glamt(ji,jj) 696 WRITE(numout,*) ' Time step : ', numit 697 WRITE(numout,*) ' - Ice drift ' 698 WRITE(numout,*) ' ~~~~~~~~~~~ ' 699 WRITE(numout,*) ' u_ice(i-1,j) : ', u_ice(ji-1,jj) 700 WRITE(numout,*) ' u_ice(i ,j) : ', u_ice(ji,jj) 701 WRITE(numout,*) ' v_ice(i ,j-1): ', v_ice(ji,jj-1) 702 WRITE(numout,*) ' v_ice(i ,j) : ', v_ice(ji,jj) 703 WRITE(numout,*) ' strength : ', strength(ji,jj) 704 WRITE(numout,*) 705 WRITE(numout,*) ' - Cell values ' 706 WRITE(numout,*) ' ~~~~~~~~~~~ ' 707 WRITE(numout,*) ' cell area : ', area(ji,jj) 708 WRITE(numout,*) ' at_i : ', at_i(ji,jj) 709 WRITE(numout,*) ' vt_i : ', vt_i(ji,jj) 710 WRITE(numout,*) ' vt_s : ', vt_s(ji,jj) 711 DO jl = 1, jpl 712 WRITE(numout,*) ' - Category (', jl,')' 713 WRITE(numout,*) ' a_i : ', a_i(ji,jj,jl) 714 WRITE(numout,*) ' ht_i : ', ht_i(ji,jj,jl) 715 WRITE(numout,*) ' ht_s : ', ht_s(ji,jj,jl) 716 WRITE(numout,*) ' v_i : ', v_i(ji,jj,jl) 717 WRITE(numout,*) ' v_s : ', v_s(ji,jj,jl) 718 WRITE(numout,*) ' e_s : ', e_s(ji,jj,1,jl)/1.0e9 719 WRITE(numout,*) ' e_i : ', e_i(ji,jj,1:nlay_i,jl)/1.0e9 720 WRITE(numout,*) ' t_su : ', t_su(ji,jj,jl) 721 WRITE(numout,*) ' t_snow : ', t_s(ji,jj,1,jl) 722 WRITE(numout,*) ' t_i : ', t_i(ji,jj,1:nlay_i,jl) 723 WRITE(numout,*) ' sm_i : ', sm_i(ji,jj,jl) 724 WRITE(numout,*) ' smv_i : ', smv_i(ji,jj,jl) 725 WRITE(numout,*) 726 END DO 727 ENDIF 728 IF( kn == -1 ) THEN 729 WRITE(numout,*) ' Mechanical Check ************** ' 730 WRITE(numout,*) ' Check what means ice divergence ' 731 WRITE(numout,*) ' Total ice concentration ', at_i (ji,jj) 732 WRITE(numout,*) ' Total lead fraction ', ato_i(ji,jj) 733 WRITE(numout,*) ' Sum of both ', ato_i(ji,jj) + at_i(ji,jj) 734 WRITE(numout,*) ' Sum of both minus 1 ', ato_i(ji,jj) + at_i(ji,jj) - 1.00 735 ENDIF 736 737 738 !-------------------- 739 ! Exhaustive state 740 !-------------------- 741 742 IF ( kn .EQ. 2 ) THEN 743 WRITE(numout,*) ' lim_prt_state - Point : ',ji,jj 744 WRITE(numout,*) ' ~~~~~~~~~~~~~~ ' 745 WRITE(numout,*) ' Exhaustive state ' 746 WRITE(numout,*) ' lat - long ', gphit(ji,jj), glamt(ji,jj) 747 WRITE(numout,*) ' Time step ', numit 748 WRITE(numout,*) 749 WRITE(numout,*) ' - Cell values ' 750 WRITE(numout,*) ' ~~~~~~~~~~~ ' 751 WRITE(numout,*) ' cell area : ', area(ji,jj) 752 WRITE(numout,*) ' at_i : ', at_i(ji,jj) 753 WRITE(numout,*) ' vt_i : ', vt_i(ji,jj) 754 WRITE(numout,*) ' vt_s : ', vt_s(ji,jj) 755 WRITE(numout,*) ' u_ice(i-1,j) : ', u_ice(ji-1,jj) 756 WRITE(numout,*) ' u_ice(i ,j) : ', u_ice(ji,jj) 757 WRITE(numout,*) ' v_ice(i ,j-1): ', v_ice(ji,jj-1) 758 WRITE(numout,*) ' v_ice(i ,j) : ', v_ice(ji,jj) 759 WRITE(numout,*) ' strength : ', strength(ji,jj) 760 WRITE(numout,*) ' d_u_ice_dyn : ', d_u_ice_dyn(ji,jj), ' d_v_ice_dyn : ', d_v_ice_dyn(ji,jj) 761 WRITE(numout,*) ' old_u_ice : ', old_u_ice(ji,jj) , ' old_v_ice : ', old_v_ice(ji,jj) 762 WRITE(numout,*) 763 764 DO jl = 1, jpl 765 WRITE(numout,*) ' - Category (',jl,')' 766 WRITE(numout,*) ' ~~~~~~~~ ' 767 WRITE(numout,*) ' ht_i : ', ht_i(ji,jj,jl) , ' ht_s : ', ht_s(ji,jj,jl) 768 WRITE(numout,*) ' t_i : ', t_i(ji,jj,1:nlay_i,jl) 769 WRITE(numout,*) ' t_su : ', t_su(ji,jj,jl) , ' t_s : ', t_s(ji,jj,1,jl) 770 WRITE(numout,*) ' sm_i : ', sm_i(ji,jj,jl) , ' o_i : ', o_i(ji,jj,jl) 771 WRITE(numout,*) ' a_i : ', a_i(ji,jj,jl) , ' old_a_i : ', old_a_i(ji,jj,jl) 772 WRITE(numout,*) ' d_a_i_trp : ', d_a_i_trp(ji,jj,jl) , ' d_a_i_thd : ', d_a_i_thd(ji,jj,jl) 773 WRITE(numout,*) ' v_i : ', v_i(ji,jj,jl) , ' old_v_i : ', old_v_i(ji,jj,jl) 774 WRITE(numout,*) ' d_v_i_trp : ', d_v_i_trp(ji,jj,jl) , ' d_v_i_thd : ', d_v_i_thd(ji,jj,jl) 775 WRITE(numout,*) ' v_s : ', v_s(ji,jj,jl) , ' old_v_s : ', old_v_s(ji,jj,jl) 776 WRITE(numout,*) ' d_v_s_trp : ', d_v_s_trp(ji,jj,jl) , ' d_v_s_thd : ', d_v_s_thd(ji,jj,jl) 777 WRITE(numout,*) ' e_i1 : ', e_i(ji,jj,1,jl)/1.0e9 , ' old_ei1 : ', old_e_i(ji,jj,1,jl)/1.0e9 778 WRITE(numout,*) ' de_i1_trp : ', d_e_i_trp(ji,jj,1,jl)/1.0e9, ' de_i1_thd : ', d_e_i_thd(ji,jj,1,jl)/1.0e9 779 WRITE(numout,*) ' e_i2 : ', e_i(ji,jj,2,jl)/1.0e9 , ' old_ei2 : ', old_e_i(ji,jj,2,jl)/1.0e9 780 WRITE(numout,*) ' de_i2_trp : ', d_e_i_trp(ji,jj,2,jl)/1.0e9, ' de_i2_thd : ', d_e_i_thd(ji,jj,2,jl)/1.0e9 781 WRITE(numout,*) ' e_snow : ', e_s(ji,jj,1,jl) , ' old_e_snow : ', old_e_s(ji,jj,1,jl) 782 WRITE(numout,*) ' d_e_s_trp : ', d_e_s_trp(ji,jj,1,jl) , ' d_e_s_thd : ', d_e_s_thd(ji,jj,1,jl) 783 WRITE(numout,*) ' smv_i : ', smv_i(ji,jj,jl) , ' old_smv_i : ', old_smv_i(ji,jj,jl) 784 WRITE(numout,*) ' d_smv_i_trp: ', d_smv_i_trp(ji,jj,jl) , ' d_smv_i_thd: ', d_smv_i_thd(ji,jj,jl) 785 WRITE(numout,*) ' oa_i : ', oa_i(ji,jj,jl) , ' old_oa_i : ', old_oa_i(ji,jj,jl) 786 WRITE(numout,*) ' d_oa_i_trp : ', d_oa_i_trp(ji,jj,jl) , ' d_oa_i_thd : ', d_oa_i_thd(ji,jj,jl) 787 END DO !jl 788 789 WRITE(numout,*) 790 WRITE(numout,*) ' - Heat / FW fluxes ' 791 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~ ' 792 WRITE(numout,*) ' emp : ', emp (ji,jj) 793 WRITE(numout,*) ' sfx : ', sfx (ji,jj) 794 WRITE(numout,*) ' sfx_thd : ', sfx_thd(ji,jj) 795 WRITE(numout,*) ' sfx_bri : ', sfx_bri (ji,jj) 796 WRITE(numout,*) ' sfx_mec : ', sfx_mec (ji,jj) 797 WRITE(numout,*) ' sfx_res : ', sfx_res(ji,jj) 798 WRITE(numout,*) ' fmmec : ', fmmec (ji,jj) 799 WRITE(numout,*) ' fhmec : ', fhmec (ji,jj) 800 WRITE(numout,*) ' fhbri : ', fhbri (ji,jj) 801 WRITE(numout,*) ' fheat_mec : ', fheat_mec(ji,jj) 802 WRITE(numout,*) 803 WRITE(numout,*) ' sst : ', sst_m(ji,jj) 804 WRITE(numout,*) ' sss : ', sss_m(ji,jj) 805 WRITE(numout,*) 806 WRITE(numout,*) ' - Stresses ' 807 WRITE(numout,*) ' ~~~~~~~~ ' 808 WRITE(numout,*) ' utau_ice : ', utau_ice(ji,jj) 809 WRITE(numout,*) ' vtau_ice : ', vtau_ice(ji,jj) 810 WRITE(numout,*) ' utau : ', utau (ji,jj) 811 WRITE(numout,*) ' vtau : ', vtau (ji,jj) 812 WRITE(numout,*) ' oc. vel. u : ', u_oce (ji,jj) 813 WRITE(numout,*) ' oc. vel. v : ', v_oce (ji,jj) 814 ENDIF 815 816 !--------------------- 817 ! Salt / heat fluxes 818 !--------------------- 819 820 IF ( kn .EQ. 3 ) THEN 821 WRITE(numout,*) ' lim_prt_state - Point : ',ji,jj 822 WRITE(numout,*) ' ~~~~~~~~~~~~~~ ' 823 WRITE(numout,*) ' - Salt / Heat Fluxes ' 824 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~ ' 825 WRITE(numout,*) ' lat - long ', gphit(ji,jj), glamt(ji,jj) 826 WRITE(numout,*) ' Time step ', numit 827 WRITE(numout,*) 828 WRITE(numout,*) ' - Heat fluxes at bottom interface ***' 829 WRITE(numout,*) ' qsr : ', qsr(ji,jj) 830 WRITE(numout,*) ' qns : ', qns(ji,jj) 831 WRITE(numout,*) ' fdtcn : ', fdtcn(ji,jj) 832 WRITE(numout,*) ' qcmif : ', qcmif(ji,jj) * r1_rdtice 833 WRITE(numout,*) ' qldif : ', qldif(ji,jj) * r1_rdtice 834 WRITE(numout,*) 835 WRITE(numout,*) ' - Salt fluxes at bottom interface ***' 836 WRITE(numout,*) ' emp : ', emp (ji,jj) 837 WRITE(numout,*) ' sfx_bri : ', sfx_bri(ji,jj) 838 WRITE(numout,*) ' sfx : ', sfx (ji,jj) 839 WRITE(numout,*) ' sfx_res : ', sfx_res(ji,jj) 840 WRITE(numout,*) ' sfx_mec : ', sfx_mec(ji,jj) 841 WRITE(numout,*) ' - Heat fluxes at bottom interface ***' 842 WRITE(numout,*) ' fheat_res : ', fheat_res(ji,jj) 843 WRITE(numout,*) 844 WRITE(numout,*) ' - Momentum fluxes ' 845 WRITE(numout,*) ' utau : ', utau(ji,jj) 846 WRITE(numout,*) ' vtau : ', vtau(ji,jj) 847 ENDIF 848 WRITE(numout,*) ' ' 849 ! 850 END DO 851 END DO 852 821 853 END SUBROUTINE lim_prt_state 822 854 -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r4230 r4333 343 343 ! ! (update freshwater fluxes) 344 344 !RBbug do not understand why see ticket 667 345 CALL lbc_lnk( emp, 'T', 1. )345 !clem-bugsal CALL lbc_lnk( emp, 'T', 1. ) 346 346 ! 347 347 IF( kt == nit000 ) THEN ! set the forcing field at nit000 - 1 ! -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r4292 r4333 33 33 USE timing ! Timing 34 34 USE sbc_ice, ONLY : lk_lim3 35 36 35 37 36 IMPLICIT NONE
Note: See TracChangeset
for help on using the changeset viewer.