Changeset 3517
- Timestamp:
- 2012-10-26T12:13:21+02:00 (11 years ago)
- Location:
- branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO
- Files:
-
- 25 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90
r3489 r3517 199 199 ! 200 200 ! !------------------------------------------! 201 ! ! mass flux at the ocean surface!201 ! ! mass and salt flux at the ocean surface ! 202 202 ! !------------------------------------------! 203 203 ! -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r3396 r3517 158 158 !! * Share Module variables 159 159 !!-------------------------------------------------------------------------- 160 INTEGER , PUBLIC :: nstart !: iteration number of the begining of the run 161 INTEGER , PUBLIC :: nlast !: iteration number of the end of the run 162 INTEGER , PUBLIC :: nitrun !: number of iteration 163 INTEGER , PUBLIC :: numit !: iteration number 164 REAL(wp), PUBLIC :: rdt_ice !: ice time step 160 INTEGER , PUBLIC :: nstart !: iteration number of the begining of the run 161 INTEGER , PUBLIC :: nlast !: iteration number of the end of the run 162 INTEGER , PUBLIC :: nitrun !: number of iteration 163 INTEGER , PUBLIC :: numit !: iteration number 164 REAL(wp), PUBLIC :: rdt_ice !: ice time step 165 REAL(wp), PUBLIC :: r1_rdtice !: = 1. / rdt_ice 165 166 166 167 ! !!** ice-dynamic namelist (namicedyn) ** … … 201 202 ! !!** ice-salinity namelist (namicesal) ** 202 203 INTEGER , PUBLIC :: num_sal = 1 !: salinity configuration used in the model 203 ! ! 1 - s constant inspace and time204 ! ! 1 - constant salinity in both space and time 204 205 ! ! 2 - prognostic salinity (s(z,t)) 205 206 ! ! 3 - salinity profile, constant in time 206 ! ! 4 - salinity variations affect only ice thermodynamics207 207 INTEGER , PUBLIC :: sal_prof = 1 !: salinity profile or not 208 208 INTEGER , PUBLIC :: thcon_i_swi = 1 !: thermal conductivity: =1 Untersteiner (1964) ; =2 Pringle et al (2007) … … 278 278 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qfvbq !: store energy in case of total lateral ablation (?) 279 279 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: dmgwi !: Variation of the mass of snow ice 280 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fsalt_res !: Residual salt flux due to correction of ice thickness 281 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fsbri !: Salt flux due to brine rejection 282 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fsalt_rpo !: Salt flux associated with porous ridged ice formation 283 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fheat_rpo !: Heat flux associated with porous ridged ice formation 280 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fsalt_res !: Residual salt flux due to correction of ice thickness [???] 281 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fsbri !: Salt flux due to brine rejection [???] 282 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fsalt_rpo !: Salt flux associated with porous ridged ice formation [???] 283 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fheat_rpo !: Heat flux associated with porous ridged ice formation [???] 284 284 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fhbri !: heat flux due to brine rejection 285 285 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fmmec !: Mass flux due to snow loss during compression 286 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fseqv !: Equivalent salt flux due to ice growth/melt286 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fseqv !: salt flux due to ice growth/melt [units ???] 287 287 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fhmec !: Heat flux due to snow loss during compression 288 288 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fheat_res !: Residual heat flux due to correction of ice thickness -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/iceini.F90
r3294 r3517 79 79 CALL lim_thd_sal_init ! set ice salinity parameters 80 80 ! 81 rdt_ice = nn_fsbc * rdttra(1) ! sea-ice timestep 81 rdt_ice = nn_fsbc * rdttra(1) ! sea-ice timestep 82 r1_rdtice = 1._wp / rdt_ice ! sea-ice timestep inverse 82 83 ! 83 84 CALL lim_msh ! ice mesh initialization -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90
r3294 r3517 88 88 zs2new = MIN( 2.0 * zslpmax - 0.3334 * ABS( zs1new ), & 89 89 & MAX( ABS( zs1new ) - zslpmax, psxx(ji,jj) ) ) 90 zin0 = ( 1.0 - MAX( rzero, sign( rone, -zslpmax) ) ) * tms(ji,jj) ! Case of empty boxes & Apply mask90 zin0 = ( 1.0 - MAX( rzero, SIGN( rone, -zslpmax) ) ) * tms(ji,jj) ! Case of empty boxes & Apply mask 91 91 92 92 ps0 (ji,jj) = zslpmax … … 273 273 zs2new = MIN( ( 2.0 * zslpmax - 0.3334 * ABS( zs1new ) ), & 274 274 & MAX( ABS( zs1new )-zslpmax, psyy(ji,jj) ) ) 275 zin0 = ( 1.0 - MAX( rzero, sign( rone, -zslpmax) ) ) * tms(ji,jj) ! Case of empty boxes & Apply mask275 zin0 = ( 1.0 - MAX( rzero, SIGN( rone, -zslpmax) ) ) * tms(ji,jj) ! Case of empty boxes & Apply mask 276 276 ! 277 277 ps0 (ji,jj) = zslpmax -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limdia.F90
r3402 r3517 180 180 vinfor(43) = vinfor(43) + diag_dyn_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 181 181 vinfor(45) = vinfor(45) + dv_dt_thd(ji,jj,5)*aire(ji,jj) * 1.e-12_wp 182 vinfor(47) = vinfor(47) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12_wp / rdt_ice! volume acc in OW182 vinfor(47) = vinfor(47) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12_wp * r1_rdtice ! volume acc in OW 183 183 ENDIF 184 184 END DO … … 240 240 vinfor(84) = 0.0 241 241 DO ji = 134, 138 242 vinfor(83) = vinfor(83) - v_ice(ji,jj) * & 243 e1t(ji,jj)*at_i(ji,jj)*rdt_ice * 1.e-12_wp 244 vinfor(84) = vinfor(84) - v_ice(ji,jj) * & 245 e1t(ji,jj)*vt_i(ji,jj)*rdt_ice * 1.e-12_wp 242 vinfor(83) = vinfor(83) - v_ice(ji,jj) * e1t(ji,jj)*at_i(ji,jj)*rdt_ice * 1.e-12_wp 243 vinfor(84) = vinfor(84) - v_ice(ji,jj) * e1t(ji,jj)*vt_i(ji,jj)*rdt_ice * 1.e-12_wp 246 244 END DO 247 245 … … 331 329 vinfor(44) = vinfor(44) + diag_dyn_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 332 330 vinfor(46) = vinfor(46) + dv_dt_thd(ji,jj,5)*aire(ji,jj) * 1.e-12_wp 333 vinfor(48) = vinfor(48) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12_wp / rdt_ice! volume acc in OW331 vinfor(48) = vinfor(48) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12_wp * r1_rdtice ! volume acc in OW 334 332 ENDIF 335 333 END DO -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r3402 r3517 38 38 PUBLIC lim_itd_me_alloc ! called by iceini.F90 39 39 40 REAL(wp) 41 REAL(wp) 42 REAL(wp) 40 REAL(wp) :: epsi11 = 1.e-11_wp ! constant values 41 REAL(wp) :: epsi10 = 1.e-10_wp ! constant values 42 REAL(wp) :: epsi06 = 1.e-06_wp ! constant values 43 43 44 44 !----------------------------------------------------------------------- … … 47 47 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: asum ! sum of total ice and open water area 48 48 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: aksum ! ratio of area removed to area ridged 49 49 ! 50 50 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: athorn ! participation function; fraction of ridging/ 51 51 ! ! closing associated w/ category n 52 52 ! 53 53 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hrmin ! minimum ridge thickness 54 54 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hrmax ! maximum ridge thickness … … 70 70 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dvirdgdt ! rate of ice volume ridged (m/s) 71 71 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: opening ! rate of opening due to divergence/shear (1/s) 72 ! 72 73 !!---------------------------------------------------------------------- 73 74 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) … … 126 127 INTEGER :: ji, jj, jk, jl ! dummy loop index 127 128 INTEGER :: niter, nitermax = 20 ! local integer 128 LOGICAL :: asum_error 129 INTEGER :: iterate_ridging 130 REAL(wp) :: w1, tmpfac , dti! local scalar129 LOGICAL :: asum_error ! flag for asum .ne. 1 130 INTEGER :: iterate_ridging ! if true, repeat the ridging 131 REAL(wp) :: w1, tmpfac ! local scalar 131 132 CHARACTER (len = 15) :: fieldid 132 133 REAL(wp), POINTER, DIMENSION(:,:) :: closing_net ! net rate at which area is removed (1/s) … … 152 153 ! 1) Thickness categories boundaries, ice / o.w. concentrations, init_ons 153 154 !-----------------------------------------------------------------------------! 154 ! Set hi_max(ncat) to a big value to ensure that all ridged ice 155 ! is thinner than hi_max(ncat). 155 ! Set hi_max(ncat) to a big value to ensure that all ridged ice is thinner than hi_max(ncat). 156 156 157 157 hi_max(jpl) = 999.99 158 158 159 Cp = 0.5 * grav * (rau0-rhoic) * rhoic / rau0 ! proport const for PE 160 CALL lim_itd_me_ridgeprep ! prepare ridging 161 159 Cp = 0.5 * grav * (rau0-rhoic) * rhoic / rau0 ! proport const for PE 160 ! 161 CALL lim_itd_me_ridgeprep ! prepare ridging 162 ! 162 163 IF( con_i) CALL lim_column_sum( jpl, v_i, vt_i_init ) ! conservation check 163 164 … … 166 167 msnow_mlt(ji,jj) = 0._wp 167 168 esnow_mlt(ji,jj) = 0._wp 168 dardg1dt (ji,jj) 169 dardg2dt (ji,jj) 170 dvirdgdt (ji,jj) 171 opening (ji,jj) 169 dardg1dt (ji,jj) = 0._wp 170 dardg2dt (ji,jj) = 0._wp 171 dvirdgdt (ji,jj) = 0._wp 172 opening (ji,jj) = 0._wp 172 173 173 174 !-----------------------------------------------------------------------------! … … 201 202 ! to give asum = 1.0 after ridging. 202 203 203 divu_adv(ji,jj) = ( 1._wp - asum(ji,jj) ) / rdt_ice ! asum found in ridgeprep204 divu_adv(ji,jj) = ( 1._wp - asum(ji,jj) ) * r1_rdtice ! asum found in ridgeprep 204 205 205 206 IF( divu_adv(ji,jj) < 0._wp ) closing_net(ji,jj) = MAX( closing_net(ji,jj), -divu_adv(ji,jj) ) … … 207 208 ! 2.3 opning 208 209 !------------ 209 ! Compute the (non-negative) opening rate that will give 210 ! asum = 1.0 after ridging. 210 ! Compute the (non-negative) opening rate that will give asum = 1.0 after ridging. 211 211 opning(ji,jj) = closing_net(ji,jj) + divu_adv(ji,jj) 212 212 END DO … … 257 257 IF ( a_i(ji,jj,jl) > epsi11 .AND. athorn(ji,jj,jl) > 0._wp )THEN 258 258 w1 = athorn(ji,jj,jl) * closing_gross(ji,jj) * rdt_ice 259 IF ( w1 >a_i(ji,jj,jl) ) THEN259 IF ( w1 > a_i(ji,jj,jl) ) THEN 260 260 tmpfac = a_i(ji,jj,jl) / w1 261 261 closing_gross(ji,jj) = closing_gross(ji,jj) * tmpfac … … 291 291 ELSE 292 292 iterate_ridging = 1 293 divu_adv (ji,jj) = (1._wp - asum(ji,jj)) / rdt_ice293 divu_adv (ji,jj) = (1._wp - asum(ji,jj)) * r1_rdtice 294 294 closing_net(ji,jj) = MAX( 0._wp, -divu_adv(ji,jj) ) 295 295 opning (ji,jj) = MAX( 0._wp, divu_adv(ji,jj) ) … … 308 308 309 309 IF( iterate_ridging == 1 ) THEN 310 IF( niter .GT.nitermax ) THEN310 IF( niter > nitermax ) THEN 311 311 WRITE(numout,*) ' ALERTE : non-converging ridging scheme ' 312 312 WRITE(numout,*) ' niter, iterate_ridging ', niter, iterate_ridging … … 323 323 ! Update fresh water and heat fluxes due to snow melt. 324 324 325 dti = 1._wp / rdt_ice326 327 325 asum_error = .false. 328 326 … … 330 328 DO ji = 1, jpi 331 329 332 IF (ABS(asum(ji,jj) - 1.0) .GT. epsi11)asum_error = .true.333 334 dardg1dt(ji,jj) = dardg1dt(ji,jj) * dti335 dardg2dt(ji,jj) = dardg2dt(ji,jj) * dti336 dvirdgdt(ji,jj) = dvirdgdt(ji,jj) * dti337 opening (ji,jj) = opening (ji,jj) * dti330 IF( ABS( asum(ji,jj) - 1.0 ) > epsi11 ) asum_error = .true. 331 332 dardg1dt(ji,jj) = dardg1dt(ji,jj) * r1_rdtice 333 dardg2dt(ji,jj) = dardg2dt(ji,jj) * r1_rdtice 334 dvirdgdt(ji,jj) = dvirdgdt(ji,jj) * r1_rdtice 335 opening (ji,jj) = opening (ji,jj) * r1_rdtice 338 336 339 337 !-----------------------------------------------------------------------------! 340 338 ! 5) Heat, salt and freshwater fluxes 341 339 !-----------------------------------------------------------------------------! 342 fmmec(ji,jj) = fmmec(ji,jj) + msnow_mlt(ji,jj) * dti! fresh water source for ocean343 fhmec(ji,jj) = fhmec(ji,jj) + esnow_mlt(ji,jj) * dti! heat sink for ocean340 fmmec(ji,jj) = fmmec(ji,jj) + msnow_mlt(ji,jj) * r1_rdtice ! fresh water source for ocean 341 fhmec(ji,jj) = fhmec(ji,jj) + esnow_mlt(ji,jj) * r1_rdtice ! heat sink for ocean 344 342 345 343 END DO … … 349 347 DO jj = 1, jpj 350 348 DO ji = 1, jpi 351 IF (ABS(asum(ji,jj) - 1.0) .GT. epsi11) THEN! there is a bug349 IF( ABS( asum(ji,jj) - 1._wp ) > epsi11 ) THEN ! there is a bug 352 350 WRITE(numout,*) ' ' 353 351 WRITE(numout,*) ' ALERTE : Ridging error: total area = ', asum(ji,jj) … … 391 389 d_oa_i_trp (:,:,:) = oa_i (:,:,:) - old_oa_i (:,:,:) 392 390 d_smv_i_trp(:,:,:) = 0._wp 393 IF( num_sal == 2 .OR. num_sal == 4) d_smv_i_trp(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:)391 IF( num_sal == 2 ) d_smv_i_trp(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:) 394 392 395 393 IF(ln_ctl) THEN ! Control print … … 430 428 431 429 ! update of fields will be made later in lim update 432 u_ice(:,:) 433 v_ice(:,:) 434 a_i(:,:,:) 435 v_s(:,:,:) 436 v_i(:,:,:) 437 e_s(:,:,:,:) 438 e_i(:,:,:,:) 439 oa_i(:,:,:) 440 IF( num_sal == 2 .OR. num_sal == 4 ) smv_i(:,:,:)= old_smv_i(:,:,:)430 u_ice(:,:) = old_u_ice(:,:) 431 v_ice(:,:) = old_v_ice(:,:) 432 a_i(:,:,:) = old_a_i(:,:,:) 433 v_s(:,:,:) = old_v_s(:,:,:) 434 v_i(:,:,:) = old_v_i(:,:,:) 435 e_s(:,:,:,:) = old_e_s(:,:,:,:) 436 e_i(:,:,:,:) = old_e_i(:,:,:,:) 437 oa_i(:,:,:) = old_oa_i(:,:,:) 438 IF( num_sal == 2 ) smv_i(:,:,:) = old_smv_i(:,:,:) 441 439 442 440 !----------------------------------------------------! … … 465 463 DO jj = 1, jpj 466 464 DO ji = 1, jpi 467 IF ( ( old_v_i(ji,jj,jl) < epsi06 ).AND. &468 ( d_v_i_trp(ji,jj,jl) > epsi06 )) THEN469 old_v_i (ji,jj,jl)= d_v_i_trp(ji,jj,jl)470 d_v_i_trp (ji,jj,jl) = 0._wp471 old_a_i (ji,jj,jl)= d_a_i_trp(ji,jj,jl)472 d_a_i_trp (ji,jj,jl) = 0._wp473 old_v_s (ji,jj,jl)= d_v_s_trp(ji,jj,jl)474 d_v_s_trp (ji,jj,jl) = 0._wp475 old_e_s (ji,jj,1,jl)= d_e_s_trp(ji,jj,1,jl)476 d_e_s_trp (ji,jj,1,jl) = 0._wp477 old_oa_i (ji,jj,jl)= d_oa_i_trp(ji,jj,jl)478 d_oa_i_trp(ji,jj,jl) = 0._wp479 IF( num_sal == 2 .OR. num_sal == 4 ) old_smv_i(ji,jj,jl)= d_smv_i_trp(ji,jj,jl)480 d_smv_i_trp(ji,jj,jl) = 0._wp465 IF( old_v_i (ji,jj,jl) < epsi06 .AND. & 466 d_v_i_trp(ji,jj,jl) > epsi06 ) THEN 467 old_v_i (ji,jj,jl) = d_v_i_trp(ji,jj,jl) 468 d_v_i_trp (ji,jj,jl) = 0._wp 469 old_a_i (ji,jj,jl) = d_a_i_trp(ji,jj,jl) 470 d_a_i_trp (ji,jj,jl) = 0._wp 471 old_v_s (ji,jj,jl) = d_v_s_trp(ji,jj,jl) 472 d_v_s_trp (ji,jj,jl) = 0._wp 473 old_e_s (ji,jj,1,jl) = d_e_s_trp(ji,jj,1,jl) 474 d_e_s_trp (ji,jj,1,jl) = 0._wp 475 old_oa_i (ji,jj,jl) = d_oa_i_trp(ji,jj,jl) 476 d_oa_i_trp(ji,jj,jl) = 0._wp 477 IF( num_sal == 2 ) old_smv_i(ji,jj,jl) = d_smv_i_trp(ji,jj,jl) 478 d_smv_i_trp(ji,jj,jl) = 0._wp 481 479 ENDIF 482 480 END DO 483 481 END DO 484 482 END DO 485 483 ! 486 484 CALL wrk_dealloc( jpi, jpj, closing_net, divu_adv, opning, closing_gross, msnow_mlt, esnow_mlt, vt_i_init, vt_i_final ) 487 485 ! … … 612 610 ! present 613 611 zworka(ji,jj) = 4.0 * strength(ji,jj) & 614 + strength(ji-1,jj) * tms(ji-1,jj) &615 + strength(ji+1,jj) * tms(ji+1,jj) &616 + strength(ji,jj-1) * tms(ji,jj-1) &617 + strength(ji,jj+1) * tms(ji,jj+1)612 & + strength(ji-1,jj) * tms(ji-1,jj) & 613 & + strength(ji+1,jj) * tms(ji+1,jj) & 614 & + strength(ji,jj-1) * tms(ji,jj-1) & 615 & + strength(ji,jj+1) * tms(ji,jj+1) 618 616 619 617 zw1 = 4.0 + tms(ji-1,jj) + tms(ji+1,jj) + tms(ji,jj-1) + tms(ji,jj+1) 620 618 zworka(ji,jj) = zworka(ji,jj) / zw1 621 619 ELSE 622 zworka(ji,jj) = 0. 0620 zworka(ji,jj) = 0._wp 623 621 ENDIF 624 622 END DO … … 1048 1046 DO jj = 1, jpj 1049 1047 DO ji = 1, jpi 1050 IF (aicen_init(ji,jj,jl1) .GT. epsi11 .AND. athorn(ji,jj,jl1) .GT. 0.0&1051 .AND. closing_gross(ji,jj) > 0. 0) THEN1048 IF( aicen_init(ji,jj,jl1) > epsi11 .AND. athorn(ji,jj,jl1) > 0._wp & 1049 .AND. closing_gross(ji,jj) > 0._wp ) THEN 1052 1050 icells = icells + 1 1053 1051 indxi(icells) = ji … … 1130 1128 ! Salinity 1131 1129 !------------- 1132 smsw(ji,jj) = sss_m(ji,jj) * vsw(ji,jj) * rhoic / rau0 ! salt content of water frozen in voids1130 smsw(ji,jj) = sss_m(ji,jj) * vsw(ji,jj) * rhoic / rau0 ! salt content of seawater frozen in voids 1133 1131 1134 1132 zsrdg2 = srdg1(ji,jj) + smsw(ji,jj) ! salt content of new ridge … … 1137 1135 1138 1136 ! ! excess of salt is flushed into the ocean 1139 fsalt_rpo(ji,jj) = fsalt_rpo(ji,jj) + ( zsrdg2 - srdg2(ji,jj) ) * rhoic / rdt_ice 1140 1137 fsalt_rpo(ji,jj) = fsalt_rpo(ji,jj) + ( zsrdg2 - srdg2(ji,jj) ) * rhoic * r1_rdtice 1138 1139 rdm_ice(ji,jj) = rdm_ice(ji,jj) + vsw(ji,jj) * rhoic / rau0 ! increase in ice volume du to seawater frozen in voids 1140 1141 1141 !------------------------------------ 1142 1142 ! 3.6 Increment ridging diagnostics … … 1148 1148 dardg1dt (ji,jj) = dardg1dt(ji,jj) + ardg1(ji,jj) + arft1(ji,jj) 1149 1149 dardg2dt (ji,jj) = dardg2dt(ji,jj) + ardg2(ji,jj) + arft2(ji,jj) 1150 diag_dyn_gr(ji,jj) = diag_dyn_gr(ji,jj) + ( vrdg2(ji,jj) + virft(ji,jj) ) / rdt_ice1151 opening (ji,jj) = opening (ji,jj) + opning(ji,jj) *rdt_ice1150 diag_dyn_gr(ji,jj) = diag_dyn_gr(ji,jj) + ( vrdg2(ji,jj) + virft(ji,jj) ) * r1_rdtice 1151 opening (ji,jj) = opening (ji,jj) + opning(ji,jj) * rdt_ice 1152 1152 1153 1153 IF( con_i ) vice_init(ji,jj) = vice_init(ji,jj) + vrdg2(ji,jj) - vrdg1(ji,jj) … … 1156 1156 ! 3.7 Put the snow somewhere in the ocean 1157 1157 !------------------------------------------ 1158 1159 1158 ! Place part of the snow lost by ridging into the ocean. 1160 1159 ! Note that esnow_mlt < 0; the ocean must cool to melt snow. … … 1179 1178 ! ij looping 1-icells 1180 1179 1181 dhr (ji,jj)= hrmax(ji,jj,jl1) - hrmin(ji,jj,jl1)1180 dhr (ji,jj) = hrmax(ji,jj,jl1) - hrmin(ji,jj,jl1) 1182 1181 dhr2(ji,jj) = hrmax(ji,jj,jl1) * hrmax(ji,jj,jl1) - hrmin(ji,jj,jl1) * hrmin(ji,jj,jl1) 1183 1184 1182 1185 1183 END DO ! ij … … 1211 1209 1212 1210 ! heat flux 1213 fheat_rpo(ji,jj) = fheat_rpo(ji,jj) + ( ersw(ji,jj,jk) - zdummy0 ) / rdt_ice1211 fheat_rpo(ji,jj) = fheat_rpo(ji,jj) + ( ersw(ji,jj,jk) - zdummy0 ) * r1_rdtice 1214 1212 1215 1213 ! Correct dimensions to avoid big values … … 1275 1273 ! Transfer area, volume, and energy accordingly. 1276 1274 1277 IF (hrmin(ji,jj,jl1) .GE. hi_max(jl2).OR. &1278 hrmax(ji,jj,jl1) .LE. hi_max(jl2-1)) THEN1279 hL = 0. 01280 hR = 0. 01275 IF( hrmin(ji,jj,jl1) >= hi_max(jl2) .OR. & 1276 hrmax(ji,jj,jl1) <= hi_max(jl2-1) ) THEN 1277 hL = 0._wp 1278 hR = 0._wp 1281 1279 ELSE 1282 hL = MAX (hrmin(ji,jj,jl1), hi_max(jl2-1))1283 hR = MIN (hrmax(ji,jj,jl1), hi_max(jl2))1280 hL = MAX( hrmin(ji,jj,jl1), hi_max(jl2-1) ) 1281 hR = MIN( hrmax(ji,jj,jl1), hi_max(jl2) ) 1284 1282 ENDIF 1285 1283 1286 1284 ! fraction of ridged ice area and volume going to n2 1287 farea = ( hR-hL) / dhr(ji,jj)1288 fvol(ji,jj) = ( hR*hR - hL*hL) / dhr2(ji,jj)1289 1290 a_i (ji,jj ,jl2) = a_i (ji,jj,jl2)+ ardg2 (ji,jj) * farea1291 v_i (ji,jj ,jl2) = v_i (ji,jj,jl2)+ vrdg2 (ji,jj) * fvol(ji,jj)1292 v_s (ji,jj ,jl2) = v_s (ji,jj,jl2)+ vsrdg (ji,jj) * fvol(ji,jj) * fsnowrdg1285 farea = ( hR - hL ) / dhr(ji,jj) 1286 fvol(ji,jj) = ( hR*hR - hL*hL ) / dhr2(ji,jj) 1287 1288 a_i (ji,jj ,jl2) = a_i (ji,jj ,jl2) + ardg2 (ji,jj) * farea 1289 v_i (ji,jj ,jl2) = v_i (ji,jj ,jl2) + vrdg2 (ji,jj) * fvol(ji,jj) 1290 v_s (ji,jj ,jl2) = v_s (ji,jj ,jl2) + vsrdg (ji,jj) * fvol(ji,jj) * fsnowrdg 1293 1291 e_s (ji,jj,1,jl2) = e_s (ji,jj,1,jl2) + esrdg (ji,jj) * fvol(ji,jj) * fsnowrdg 1294 smv_i(ji,jj ,jl2) = smv_i(ji,jj,jl2)+ srdg2 (ji,jj) * fvol(ji,jj)1295 oa_i (ji,jj ,jl2) = oa_i (ji,jj,jl2)+ oirdg2(ji,jj) * farea1292 smv_i(ji,jj ,jl2) = smv_i(ji,jj ,jl2) + srdg2 (ji,jj) * fvol(ji,jj) 1293 oa_i (ji,jj ,jl2) = oa_i (ji,jj ,jl2) + oirdg2(ji,jj) * farea 1296 1294 1297 1295 END DO ! ij … … 1317 1315 ! Compute the fraction of rafted ice area and volume going to 1318 1316 ! thickness category jl2, transfer area, volume, and energy accordingly. 1319 1320 IF (hraft(ji,jj,jl1) .LE. hi_max(jl2).AND. &1321 hraft(ji,jj,jl1) .GT. hi_max(jl2-1)) THEN1322 a_i (ji,jj,jl2) = a_i(ji,jj,jl2) + arft2(ji,jj)1323 v_i (ji,jj,jl2) = v_i(ji,jj,jl2) + virft(ji,jj)1324 v_s (ji,jj,jl2) = v_s(ji,jj,jl2) + vsrft(ji,jj)*fsnowrft1325 e_s (ji,jj,1,jl2) = e_s(ji,jj,1,jl2) + esrft(ji,jj)*fsnowrft1326 smv_i(ji,jj ,jl2) = smv_i(ji,jj,jl2) + smrft(ji,jj)1327 oa_i (ji,jj,jl2) = oa_i(ji,jj,jl2)+ oirft2(ji,jj)1317 ! 1318 IF( hraft(ji,jj,jl1) <= hi_max(jl2) .AND. & 1319 hraft(ji,jj,jl1) > hi_max(jl2-1) ) THEN 1320 a_i (ji,jj ,jl2) = a_i (ji,jj ,jl2) + arft2 (ji,jj) 1321 v_i (ji,jj ,jl2) = v_i (ji,jj ,jl2) + virft (ji,jj) 1322 v_s (ji,jj ,jl2) = v_s (ji,jj ,jl2) + vsrft (ji,jj) * fsnowrft 1323 e_s (ji,jj,1,jl2) = e_s (ji,jj,1,jl2) + esrft (ji,jj) * fsnowrft 1324 smv_i(ji,jj ,jl2) = smv_i(ji,jj ,jl2) + smrft (ji,jj) 1325 oa_i (ji,jj ,jl2) = oa_i (ji,jj ,jl2) + oirft2(ji,jj) 1328 1326 ENDIF ! hraft 1329 1327 ! 1330 1328 END DO ! ij 1331 1329 … … 1336 1334 ji = indxi(ij) 1337 1335 jj = indxj(ij) 1338 IF (hraft(ji,jj,jl1) .LE. hi_max(jl2).AND. &1339 hraft(ji,jj,jl1) .GT. hi_max(jl2-1)) THEN1336 IF( hraft(ji,jj,jl1) <= hi_max(jl2) .AND. & 1337 hraft(ji,jj,jl1) > hi_max(jl2-1) ) THEN 1340 1338 e_i(ji,jj,jk,jl2) = e_i(ji,jj,jk,jl2) + eirft(ji,jj,jk) 1341 1339 ENDIF … … 1504 1502 DO jj = 1 , jpj 1505 1503 DO ji = 1 , jpi 1506 !!gm xtmp = e_i(ji,jj,jk,jl) / area(ji,jj) / rdt_ice1504 !!gm xtmp = e_i(ji,jj,jk,jl) / area(ji,jj) * r1_rdtice 1507 1505 !!gm xtmp = xtmp * unit_fac 1508 1506 ! fheat_res(ji,jj) = fheat_res(ji,jj) - xtmp … … 1524 1522 ! fluxes are positive to the ocean 1525 1523 ! here the flux has to be negative for the ocean 1526 !!gm xtmp = ( rhosn*cpic*( rtt-t_s(ji,jj,1,jl) ) + rhosn*lfus ) / rdt_ice1524 !!gm xtmp = ( rhosn*cpic*( rtt-t_s(ji,jj,1,jl) ) + rhosn*lfus ) * r1_rdtice 1527 1525 ! fheat_res(ji,jj) = fheat_res(ji,jj) - xtmp 1528 1526 1529 !!gm xtmp = ( rhosn*cpic*( rtt-t_s(ji,jj,1,jl) ) + rhosn*lfus ) / rdt_ice !RB ???????1527 !!gm xtmp = ( rhosn*cpic*( rtt-t_s(ji,jj,1,jl) ) + rhosn*lfus ) * r1_rdtice !RB ??????? 1530 1528 1531 1529 t_s(ji,jj,1,jl) = rtt * zmask(ji,jj) + t_s(ji,jj,1,jl) * ( 1 - zmask(ji,jj) ) … … 1540 1538 1541 1539 ! fsalt_res(ji,jj) = fsalt_res(ji,jj) + ( sss_m(ji,jj) ) * & 1542 ! rhosn * v_s(ji,jj,jl) / rdt_ice1540 ! rhosn * v_s(ji,jj,jl) * r1_rdtice 1543 1541 1544 1542 ! fsalt_res(ji,jj) = fsalt_res(ji,jj) + ( sss_m(ji,jj) - sm_i(ji,jj,jl) ) * & 1545 ! rhoic * v_i(ji,jj,jl) / rdt_ice1543 ! rhoic * v_i(ji,jj,jl) * r1_rdtice 1546 1544 1547 1545 ! sfx (i,j) = sfx (i,j) + xtmp -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90
r3294 r3517 101 101 102 102 !- Trend terms 103 d_a_i_thd (:,:,:)= a_i(:,:,:) - old_a_i(:,:,:)104 d_v_s_thd (:,:,:)= v_s(:,:,:) - old_v_s(:,:,:)105 d_v_i_thd (:,:,:)= v_i(:,:,:) - old_v_i(:,:,:)103 d_a_i_thd(:,:,:) = a_i(:,:,:) - old_a_i(:,:,:) 104 d_v_s_thd(:,:,:) = v_s(:,:,:) - old_v_s(:,:,:) 105 d_v_i_thd(:,:,:) = v_i(:,:,:) - old_v_i(:,:,:) 106 106 d_e_s_thd(:,:,:,:) = e_s(:,:,:,:) - old_e_s(:,:,:,:) 107 107 d_e_i_thd(:,:,:,:) = e_i(:,:,:,:) - old_e_i(:,:,:,:) 108 108 109 109 d_smv_i_thd(:,:,:) = 0._wp 110 IF( num_sal == 2 .OR. num_sal == 4) d_smv_i_thd(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:)110 IF( num_sal == 2 ) d_smv_i_thd(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:) 111 111 112 112 IF(ln_ctl) THEN ! Control print … … 143 143 144 144 !- Recover Old values 145 a_i(:,:,:) = old_a_i 146 v_s(:,:,:) = old_v_s 147 v_i(:,:,:) = old_v_i 148 e_s(:,:,:,:) = old_e_s 149 e_i(:,:,:,:) = old_e_i 150 ! 151 IF( num_sal == 2 .OR. num_sal == 4 ) smv_i(:,:,:) = old_smv_i(:,:,:)145 a_i(:,:,:) = old_a_i(:,:,:) 146 v_s(:,:,:) = old_v_s(:,:,:) 147 v_i(:,:,:) = old_v_i(:,:,:) 148 e_s(:,:,:,:) = old_e_s(:,:,:,:) 149 e_i(:,:,:,:) = old_e_i(:,:,:,:) 150 ! 151 IF( num_sal == 2 ) smv_i(:,:,:) = old_smv_i(:,:,:) 152 152 ! 153 153 END SUBROUTINE lim_itd_th -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limrst.F90
r3294 r3517 402 402 zsmax = 4.5_wp 403 403 zsmin = 3.5_wp 404 IF( sm_i(ji,jj,jl) .LT.zsmin ) THEN404 IF( sm_i(ji,jj,jl) < zsmin ) THEN 405 405 zalpha = 1._wp 406 ELSEIF( sm_i(ji,jj,jl) .LT.zsmax ) THEN406 ELSEIF( sm_i(ji,jj,jl) < zsmax ) THEN 407 407 zalpha = sm_i(ji,jj,jl) / ( zsmin - zsmax ) + zsmax / ( zsmax - zsmin ) 408 408 ELSE -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r3488 r3517 9 9 !! 3.3 ! 2010-05 (G. Madec) decrease ocean & ice reference salinities in the Baltic sea 10 10 !! ! + simplification of the ice-ocean stress calculation 11 !! 4.0 ! 2011-02 (G. Madec) dynamical allocation 11 !! 3.4 ! 2011-02 (G. Madec) dynamical allocation 12 !! 3.5 ! 2012-10 (A. Coward, G. Madec) salt fluxes ; ice+snow mass 12 13 !!---------------------------------------------------------------------- 13 14 #if defined key_lim3 … … 44 45 PUBLIC lim_sbc_tau ! called by sbc_ice_lim 45 46 46 REAL(wp) :: r1_rdtice ! = 1. / rdt_ice47 47 REAL(wp) :: epsi16 = 1.e-16_wp ! constant values 48 48 REAL(wp) :: rzero = 0._wp … … 88 88 !! - qns : sea heat flux: non solar 89 89 !! - emp : freshwater budget: volume flux 90 !! - sfx : freshwater budget: concentration/dillution90 !! - sfx : salt flux 91 91 !! - fr_i : ice fraction 92 92 !! - tn_ice : sea-ice surface temperature … … 102 102 INTEGER :: ifvt, i1mfr, idfr ! some switches 103 103 INTEGER :: iflt, ial, iadv, ifral, ifrdv 104 REAL(wp) :: zinda, z fons, zpme! local scalars105 REAL(wp), POINTER, DIMENSION(:,:) :: zfcm1 , zfcm2! solar/non solar heat fluxes106 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb, zalbp ! 2D/3D workspace104 REAL(wp) :: zinda, zemp, zemp_snow, zfmm ! local scalars 105 REAL(wp), POINTER, DIMENSION(:,:) :: zfcm1 , zfcm2 ! solar/non solar heat fluxes 106 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb, zalbp ! 2D/3D workspace 107 107 !!--------------------------------------------------------------------- 108 108 … … 153 153 ! & + iflt * ffltbif(ji,jj) !!! only if one category is used 154 154 & + ifral * ( ial * qcmif(ji,jj) + (1 - ial) * qldif(ji,jj) ) * r1_rdtice & 155 & + ifrdv * ( qfvbq(ji,jj) + qdtcn(ji,jj) )* r1_rdtice &156 & + fhmec(ji,jj) & ! new contribution due to snow melt in ridging!!155 & + ifrdv * ( qfvbq(ji,jj) + qdtcn(ji,jj) ) * r1_rdtice & 156 & + fhmec(ji,jj) & ! new contribution due to snow melt when ridging!! 157 157 & + fheat_rpo(ji,jj) & ! contribution from ridge formation 158 158 & + fheat_res(ji,jj) 159 ! fscmbq Part of the solar radiation transmitted through the ice and going to the ocean 160 ! computed in limthd_zdf.F90 159 ! fscmbq Part of the solar radiation transmitted through the ice and going to the ocean computed in limthd_zdf.F90 161 160 ! ffltbif Total heat content of the ice (brine pockets+ice) / delta_t 162 161 ! qcmif Energy needed to bring the ocean surface layer until its freezing (ok) … … 167 166 ! qdtcn Energy from the turbulent oceanic heat flux heat flux coming in the lead 168 167 169 IF ( num_sal == 2 ) zfcm2(ji,jj) = zfcm2(ji,jj) + & 170 fhbri(ji,jj) ! new contribution due to brine drainage 171 172 ! bottom radiative component is sent to the computation of the 173 ! oceanic heat flux 168 IF( num_sal == 2 ) zfcm2(ji,jj) = zfcm2(ji,jj) + fhbri(ji,jj) ! add contribution due to brine drainage 169 170 ! bottom radiative component is sent to the computation of the oceanic heat flux 174 171 fsbbq(ji,jj) = ( 1.0 - ( ifvt + iflt ) ) * fscmbq(ji,jj) 175 172 … … 179 176 ! ! fdtcn : turbulent oceanic heat flux 180 177 181 178 !!gm this IF prevents the vertorisation of the whole loop 182 179 IF ( ( ji == jiindx ) .AND. ( jj == jjindx) ) THEN 183 180 WRITE(numout,*) ' lim_sbc : heat fluxes ' … … 208 205 WRITE(numout,*) ' fheat_res : ', fheat_res(jiindx,jjindx) 209 206 ENDIF 210 207 !!gm end 211 208 END DO 212 209 END DO … … 229 226 230 227 ! computing freshwater exchanges at the ice/ocean interface 231 zpme = - emp(ji,jj) * ( 1.0 - at_i(ji,jj) ) & ! evaporation over oceanic fraction 232 & + tprecip(ji,jj) * at_i(ji,jj) & ! all precipitation reach the ocean 233 & - sprecip(ji,jj) * ( 1. - (pfrld(ji,jj)**betas) ) & ! except solid precip intercepted by sea-ice 234 & - rdm_snw(ji,jj) * r1_rdtice & ! freshwaterflux due to snow melting 235 & + fmmec(ji,jj) ! snow falling when ridging 236 237 238 ! computing salt exchanges at the ice/ocean interface 239 ! sice should be the same as computed with the ice model 240 zfons = ( soce_0(ji,jj) - sice_0(ji,jj) ) * rdm_ice(ji,jj) * r1_rdtice 241 ! SOCE 242 zfons = ( sss_m (ji,jj) - sice_0(ji,jj) ) * rdm_ice(ji,jj) * r1_rdtice 243 244 !CT useless ! salt flux for constant salinity 245 !CT useless fsalt(ji,jj) = zfons / ( sss_m(ji,jj) + epsi16 ) + fsalt_res(ji,jj) 246 ! salt flux for variable salinity 247 zinda = 1.0 - MAX( rzero , SIGN( rone , - ( 1.0 - pfrld(ji,jj) ) ) ) 248 ! correcting brine and salt fluxes 249 fsbri(ji,jj) = zinda*fsbri(ji,jj) 250 ! converting the salt fluxes from ice to a freshwater flux from ocean 251 fsalt_res(ji,jj) = fsalt_res(ji,jj) / ( sss_m(ji,jj) + epsi16 ) 252 fseqv(ji,jj) = fseqv(ji,jj) / ( sss_m(ji,jj) + epsi16 ) 253 fsbri(ji,jj) = fsbri(ji,jj) / ( sss_m(ji,jj) + epsi16 ) 254 fsalt_rpo(ji,jj) = fsalt_rpo(ji,jj) / ( sss_m(ji,jj) + epsi16 ) 255 256 ! freshwater mass exchange (positive to the ice, negative for the ocean ?) 257 ! actually it's a salt flux (so it's minus freshwater flux) 258 ! if sea ice grows, zfons is positive, fsalt also 259 ! POSITIVE SALT FLUX FROM THE ICE TO THE OCEAN 260 ! POSITIVE FRESHWATER FLUX FROM THE OCEAN TO THE ICE [kg.m-2.s-1] 261 262 emp(ji,jj) = - zpme 228 zemp = emp(ji,jj) * ( 1.0 - at_i(ji,jj) ) & ! evaporation over oceanic fraction 229 & - tprecip(ji,jj) * at_i(ji,jj) & ! all precipitation reach the ocean 230 & + sprecip(ji,jj) * ( 1. - (pfrld(ji,jj)**betas) ) & ! except solid precip intercepted by sea-ice 231 & - fmmec(ji,jj) ! snow falling when ridging 232 233 ! mass flux at the ocean/ice interface (sea ice fraction) 234 zemp_snw = rdm_snw(ji,jj) * r1_rdtice ! snow melting = pure water that enters the ocean 235 zfmm = rdm_ice(ji,jj) * r1_rdtice ! Freezing minus mesting 236 237 emp(ji,jj) = zemp + zemp_snw + zfmm ! mass flux + F/M mass flux (always ice/ocean mass exchange) 238 239 ! correcting brine salt fluxes (zinda = 1 if pfrld=1 , =0 otherwise) 240 zinda = 1.0 - MAX( rzero , SIGN( rone , - ( 1.0 - pfrld(ji,jj) ) ) ) 241 fsbri(ji,jj) = zinda * fsbri(ji,jj) 263 242 END DO 264 243 END DO 265 244 245 !------------------------------------------! 246 ! salt flux at the ocean surface ! 247 !------------------------------------------! 248 266 249 IF( num_sal == 2 ) THEN ! variable ice salinity: brine drainage included in the salt flux 267 sfx (:,:) = fs bri(:,:) + fseqv(:,:) + fsalt_res(:,:) + fsalt_rpo(:,:) + emp(:,:)250 sfx (:,:) = fseqv(:,:) + fsalt_res(:,:) + fsalt_rpo(:,:) + fsbri(:,:) 268 251 ELSE ! constant ice salinity: 269 sfx (:,:) = fseqv(:,:) + fsalt_res(:,:) + fsalt_rpo(:,:) + emp(:,:)252 sfx (:,:) = fseqv(:,:) + fsalt_res(:,:) + fsalt_rpo(:,:) 270 253 ENDIF 271 254 !-----------------------------------------------! … … 277 260 snwice_mass (:,:) = tms(:,:) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) ) 278 261 ! ! time evolution of snow+ice mass 279 snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) / rdt_ice262 snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) * r1_rdtice 280 263 ENDIF 281 264 … … 403 386 ! ! allocate lim_sbc array 404 387 IF( lim_sbc_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'lim_sbc_init : unable to allocate standard arrays' ) 405 !406 r1_rdtice = 1. / rdt_ice407 388 ! 408 389 soce_0(:,:) = soce ! constant SSS and ice salinity used in levitating sea-ice case -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r3419 r3517 110 110 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_i(ji,jj,jl) , epsi06 ) ) * nlay_i 111 111 !0 if no ice and 1 if yes 112 zindb = 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - ht_i(ji,jj,jl) ))112 zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - ht_i(ji,jj,jl) ) ) 113 113 !convert units ! very important that this line is here 114 114 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac * zindb … … 122 122 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi06 ) ) * nlay_s 123 123 !0 if no ice and 1 if yes 124 zindb = 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - ht_s(ji,jj,jl) ))124 zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - ht_s(ji,jj,jl) ) ) 125 125 !convert units ! very important that this line is here 126 126 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * unit_fac * zindb … … 284 284 CALL tab_2d_1d( nbpb, fbif_1d (1:nbpb), fbif , jpi, jpj, npb(1:nbpb) ) 285 285 CALL tab_2d_1d( nbpb, qldif_1d (1:nbpb), qldif , jpi, jpj, npb(1:nbpb) ) 286 CALL tab_2d_1d( nbpb, rdm icif_1d (1:nbpb), rdm_ice , jpi, jpj, npb(1:nbpb) )287 CALL tab_2d_1d( nbpb, rdm snif_1d (1:nbpb), rdm_snw , jpi, jpj, npb(1:nbpb) )286 CALL tab_2d_1d( nbpb, rdm_ice_1d (1:nbpb), rdm_ice , jpi, jpj, npb(1:nbpb) ) 287 CALL tab_2d_1d( nbpb, rdm_snw_1d (1:nbpb), rdm_snw , jpi, jpj, npb(1:nbpb) ) 288 288 CALL tab_2d_1d( nbpb, dmgwi_1d (1:nbpb), dmgwi , jpi, jpj, npb(1:nbpb) ) 289 289 CALL tab_2d_1d( nbpb, qlbbq_1d (1:nbpb), zqlbsbq , jpi, jpj, npb(1:nbpb) ) … … 352 352 CALL tab_1d_2d( nbpb, qldif , npb, qldif_1d (1:nbpb), jpi, jpj ) 353 353 CALL tab_1d_2d( nbpb, qfvbq , npb, qfvbq_1d (1:nbpb), jpi, jpj ) 354 CALL tab_1d_2d( nbpb, rdm_ice, npb, rdm icif_1d(1:nbpb), jpi, jpj )355 CALL tab_1d_2d( nbpb, rdm_snw, npb, rdm snif_1d(1:nbpb), jpi, jpj )354 CALL tab_1d_2d( nbpb, rdm_ice, npb, rdm_ice_1d(1:nbpb), jpi, jpj ) 355 CALL tab_1d_2d( nbpb, rdm_snw, npb, rdm_snw_1d(1:nbpb), jpi, jpj ) 356 356 CALL tab_1d_2d( nbpb, dmgwi , npb, dmgwi_1d (1:nbpb), jpi, jpj ) 357 357 CALL tab_1d_2d( nbpb, rdvosif, npb, dvsbq_1d (1:nbpb), jpi, jpj ) … … 419 419 !-------------------------------------------- 420 420 d_v_i_thd(:,:,:) = v_i (:,:,:) - old_v_i(:,:,:) ! ice volumes 421 dv_dt_thd(:,:,:) = d_v_i_thd(:,:,:) / rdt_ice * 86400.0421 dv_dt_thd(:,:,:) = d_v_i_thd(:,:,:) * r1_rdtice * rday 422 422 423 423 IF( con_i ) fbif(:,:) = fbif(:,:) + zqlbsbq(:,:) … … 488 488 ! 489 489 IF(lwp) WRITE(numout,*) ' lim_thd_glohec ' 490 IF(lwp) WRITE(numout,*) ' qt_i_in : ', eti(jiindex_1d,jl) / rdt_ice491 IF(lwp) WRITE(numout,*) ' qt_s_in : ', ets(jiindex_1d,jl) / rdt_ice492 IF(lwp) WRITE(numout,*) ' qt_in : ', ( eti(jiindex_1d,jl) + ets(jiindex_1d,jl) ) / rdt_ice490 IF(lwp) WRITE(numout,*) ' qt_i_in : ', eti(jiindex_1d,jl) * r1_rdtice 491 IF(lwp) WRITE(numout,*) ' qt_s_in : ', ets(jiindex_1d,jl) * r1_rdtice 492 IF(lwp) WRITE(numout,*) ' qt_in : ', ( eti(jiindex_1d,jl) + ets(jiindex_1d,jl) ) * r1_rdtice 493 493 ! 494 494 END SUBROUTINE lim_thd_glohec … … 538 538 !-------------------- 539 539 DO ji = kideb, kiut 540 cons_error(ji,jl) = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) )540 cons_error(ji,jl) = ABS( dq_i(ji,jl) * r1_rdtice + sum_fluxq(ji,jl) ) 541 541 END DO 542 542 … … 597 597 WRITE(numout,*) ' cons_error : ', cons_error(ji,jl) 598 598 WRITE(numout,*) ' surf_error : ', surf_error(ji,jl) 599 WRITE(numout,*) ' dq_i : ', - dq_i(ji,jl) / rdt_ice599 WRITE(numout,*) ' dq_i : ', - dq_i(ji,jl) * r1_rdtice 600 600 WRITE(numout,*) ' Fdt : ', sum_fluxq(ji,jl) 601 601 WRITE(numout,*) … … 631 631 WRITE(numout,*) 632 632 WRITE(numout,*) ' Layer by layer ... ' 633 WRITE(numout,*) ' dq_snow : ', ( qt_s_fin(ji,jl) - qt_s_in(ji,jl) ) / rdt_ice633 WRITE(numout,*) ' dq_snow : ', ( qt_s_fin(ji,jl) - qt_s_in(ji,jl) ) * r1_rdtice 634 634 WRITE(numout,*) ' dfc_snow : ', fc_s(ji,1) - fc_s(ji,0) 635 635 DO jk = 1, nlay_i 636 636 WRITE(numout,*) ' layer : ', jk 637 WRITE(numout,*) ' dq_ice : ', dq_i_layer(ji,jk) / rdt_ice637 WRITE(numout,*) ' dq_ice : ', dq_i_layer(ji,jk) * r1_rdtice 638 638 WRITE(numout,*) ' radab : ', radab(ji,jk) 639 639 WRITE(numout,*) ' dfc_i : ', fc_i(ji,jk) - fc_i(ji,jk-1) … … 681 681 fatm (ji,jl) = qnsr_ice_1d(ji) + qsr_ice_1d(ji) ! total heat flux 682 682 sum_fluxq (ji,jl) = fatm(ji,jl) + fbif_1d(ji) - ftotal_fin(ji) - fstroc(zji,zjj,jl) 683 cons_error(ji,jl) = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) )683 cons_error(ji,jl) = ABS( dq_i(ji,jl) * r1_rdtice + sum_fluxq(ji,jl) ) 684 684 END DO 685 685 … … 688 688 !-------------------- 689 689 DO ji = kideb, kiut 690 cons_error(ji,jl) = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) )690 cons_error(ji,jl) = ABS( dq_i(ji,jl) * r1_rdtice + sum_fluxq(ji,jl) ) 691 691 END DO 692 692 … … 722 722 WRITE(numout,*) ' * ' 723 723 WRITE(numout,*) ' Ftotal : ', sum_fluxq(ji,jl) 724 WRITE(numout,*) ' dq_t : ', - dq_i(ji,jl) / rdt_ice725 WRITE(numout,*) ' dq_i : ', - ( qt_i_fin(ji,jl) - qt_i_in(ji,jl) ) / rdt_ice726 WRITE(numout,*) ' dq_s : ', - ( qt_s_fin(ji,jl) - qt_s_in(ji,jl) ) / rdt_ice724 WRITE(numout,*) ' dq_t : ', - dq_i(ji,jl) * r1_rdtice 725 WRITE(numout,*) ' dq_i : ', - ( qt_i_fin(ji,jl) - qt_i_in(ji,jl) ) * r1_rdtice 726 WRITE(numout,*) ' dq_s : ', - ( qt_s_fin(ji,jl) - qt_s_in(ji,jl) ) * r1_rdtice 727 727 WRITE(numout,*) ' cons_error : ', cons_error(ji,jl) 728 728 WRITE(numout,*) ' * ' … … 734 734 WRITE(numout,*) ' * ' 735 735 WRITE(numout,*) ' Heat contents --- : ' 736 WRITE(numout,*) ' qt_s_in : ', qt_s_in(ji,jl) / rdt_ice737 WRITE(numout,*) ' qt_i_in : ', qt_i_in(ji,jl) / rdt_ice738 WRITE(numout,*) ' qt_in : ', ( qt_i_in(ji,jl) + qt_s_in(ji,jl) ) / rdt_ice739 WRITE(numout,*) ' qt_s_fin : ', qt_s_fin(ji,jl) / rdt_ice740 WRITE(numout,*) ' qt_i_fin : ', qt_i_fin(ji,jl) / rdt_ice741 WRITE(numout,*) ' qt_fin : ', ( qt_i_fin(ji,jl) + qt_s_fin(ji,jl) ) / rdt_ice736 WRITE(numout,*) ' qt_s_in : ', qt_s_in(ji,jl) * r1_rdtice 737 WRITE(numout,*) ' qt_i_in : ', qt_i_in(ji,jl) * r1_rdtice 738 WRITE(numout,*) ' qt_in : ', ( qt_i_in(ji,jl) + qt_s_in(ji,jl) ) * r1_rdtice 739 WRITE(numout,*) ' qt_s_fin : ', qt_s_fin(ji,jl) * r1_rdtice 740 WRITE(numout,*) ' qt_i_fin : ', qt_i_fin(ji,jl) * r1_rdtice 741 WRITE(numout,*) ' qt_fin : ', ( qt_i_fin(ji,jl) + qt_s_fin(ji,jl) ) * r1_rdtice 742 742 WRITE(numout,*) ' * ' 743 743 WRITE(numout,*) ' Ice variables --- : ' -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r3294 r3517 7 7 !! ! 2005-06 (M. Vancoppenolle) 3D version 8 8 !! 3.2 ! 2009-07 (M. Vancoppenolle, Y. Aksenov, G. Madec) bug correction in rdmsnif & rdmicif 9 !! 4.0 ! 2011-02 (G. Madec) dynamical allocation 9 !! 3.4 ! 2011-02 (G. Madec) dynamical allocation 10 !! 3.5 ! 2012-10 (G. Madec & co) salt flux + bug fixes 10 11 !!---------------------------------------------------------------------- 11 12 #if defined key_lim3 … … 71 72 !! 72 73 INTEGER :: ji , jk ! dummy loop indices 73 INTEGER :: zji, zjj ! 2D corresponding indices to ji74 INTEGER :: ii, ij ! 2D corresponding indices to ji 74 75 INTEGER :: isnow ! switch for presence (1) or absence (0) of snow 75 76 INTEGER :: isnowic ! snow ice formation not … … 145 146 ! 146 147 DO ji = kideb, kiut 147 isnow = INT( 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - ht_s_b(ji) ) ))148 ztfs (ji)= isnow * rtt + ( 1.0 - isnow ) * rtt149 z_f_surf (ji)= qnsr_ice_1d(ji) + ( 1.0 - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji)150 z_f_surf (ji) = MAX( zzero , z_f_surf(ji) ) * MAX( zzero , SIGN( zone , t_su_b(ji) - ztfs(ji) ))148 isnow = INT( 1.0 - MAX( 0.0 , SIGN( 1.0 , - ht_s_b(ji) ) ) ) 149 ztfs (ji) = isnow * rtt + ( 1.0 - isnow ) * rtt 150 z_f_surf (ji) = qnsr_ice_1d(ji) + ( 1.0 - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji) 151 z_f_surf (ji) = MAX( zzero , z_f_surf(ji) ) * MAX( zzero , SIGN( zone , t_su_b(ji) - ztfs(ji) ) ) 151 152 zfdt_init(ji) = ( z_f_surf(ji) + MAX( fbif_1d(ji) + qlbbq_1d(ji) + fc_bo_i(ji),0.0 ) ) * rdt_ice 152 153 END DO ! ji … … 240 241 zhsnew = ht_s_b(ji) + dh_s_tot(ji) 241 242 ! If snow is still present zhn = 1, else zhn = 0 242 zhn = 1.0 - MAX( zzero , SIGN( zone , - zhsnew ))243 zhn = 1.0 - MAX( zzero , SIGN( zone , - zhsnew ) ) 243 244 ht_s_b(ji) = MAX( zzero , zhsnew ) 244 245 ! Volume and mass variations of snow 245 dvsbq_1d (ji) = a_i_b(ji) * ( ht_s_b(ji) - zhsold(ji) - zdh_s_ mel(ji) )246 dvsbq_1d (ji) = a_i_b(ji) * ( ht_s_b(ji) - zhsold(ji) - zdh_s_pre(ji) ) 246 247 dvsbq_1d (ji) = MIN( zzero, dvsbq_1d(ji) ) 247 rdm snif_1d(ji) = rdmsnif_1d(ji) + rhosn * dvsbq_1d(ji)248 rdm_snw_1d(ji) = rdm_snw_1d(ji) + rhosn * dvsbq_1d(ji) 248 249 END DO ! ji 249 250 … … 253 254 DO ji = kideb, kiut 254 255 dh_i_surf(ji) = 0._wp 255 z_f_surf (ji) = zqfont_su(ji) / rdt_ice! heat conservation test256 z_f_surf (ji) = zqfont_su(ji) * r1_rdtice ! heat conservation test 256 257 zdq_i (ji) = 0._wp 257 258 END DO ! ji … … 262 263 zdeltah (ji,jk) = - zqfont_su(ji) / q_i_b(ji,jk) 263 264 ! ! recompute heat available 264 zqfont_su(ji )= MAX( 0.0 , - zh_i(ji) - zdeltah(ji,jk) ) * q_i_b(ji,jk)265 zqfont_su(ji ) = MAX( 0.0 , - zh_i(ji) - zdeltah(ji,jk) ) * q_i_b(ji,jk) 265 266 ! ! melt of layer jk cannot be higher than its thickness 266 267 zdeltah (ji,jk) = MAX( zdeltah(ji,jk) , - zh_i(ji) ) 267 268 ! ! update surface melt 268 dh_i_surf(ji )= dh_i_surf(ji) + zdeltah(ji,jk)269 dh_i_surf(ji ) = dh_i_surf(ji) + zdeltah(ji,jk) 269 270 ! ! for energy conservation 270 zdq_i (ji ) = zdq_i(ji) + zdeltah(ji,jk) * q_i_b(ji,jk) / rdt_ice271 zdq_i (ji ) = zdq_i(ji) + zdeltah(ji,jk) * q_i_b(ji,jk) * r1_rdtice 271 272 ! 272 ! contribution to ice-ocean salt flux 273 zji = MOD( npb(ji) - 1 , jpi ) + 1 274 zjj = ( npb(ji) - 1 ) / jpi + 1 275 zfsalt_melt(ji) = zfsalt_melt(ji) + ( sss_m(zji,zjj) - sm_i_b(ji) ) * a_i_b(ji) & 276 & * MIN( zdeltah(ji,jk) , 0.e0 ) * rhoic / rdt_ice 273 ! ! contribution to ice-ocean salt flux 274 zfsalt_melt(ji) = zfsalt_melt(ji) - sm_i_b(ji) * a_i_b(ji) * MIN( zdeltah(ji,jk) , 0._wp ) * rhoic * r1_rdtice 277 275 END DO 278 276 END DO … … 290 288 IF( z_f_surf(ji) + zdq_i(ji) .GE. 1.0e-3 ) THEN! 291 289 WRITE(numout,*) ' ALERTE heat loss for surface melt ' 292 WRITE(numout,*) ' zji, zjj, jl :', zji, zjj, jl290 WRITE(numout,*) ' ii, ij, jl :', ii, ij, jl 293 291 WRITE(numout,*) ' ht_i_b : ', ht_i_b(ji) 294 292 WRITE(numout,*) ' z_f_surf : ', z_f_surf(ji) … … 299 297 WRITE(numout,*) ' qlbbq_1d : ', qlbbq_1d(ji) 300 298 WRITE(numout,*) ' s_i_new : ', s_i_new(ji) 301 WRITE(numout,*) ' sss_m : ', sss_m( zji,zjj)299 WRITE(numout,*) ' sss_m : ', sss_m(ii,ij) 302 300 ENDIF 303 301 END DO … … 338 336 DO ji = kideb, kiut 339 337 ! In case of disparition of the snow, we have to update the snow temperatures 340 zhisn = MAX( zzero , SIGN( zone, - ht_s_b(ji) ))338 zhisn = MAX( zzero , SIGN( zone, - ht_s_b(ji) ) ) 341 339 t_s_b(ji,jk) = ( 1.0 - zhisn ) * t_s_b(ji,jk) + zhisn * rtt 342 340 q_s_b(ji,jk) = ( 1.0 - zhisn ) * q_s_b(ji,jk) … … 358 356 ! 4.1 Basal growth - (a) salinity not varying in time 359 357 !----------------------------------------------------- 360 IF( num_sal /= 2 .AND. num_sal /= 4 ) THEN361 DO ji = kideb, kiut 362 IF( ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) < 0. 0) THEN358 IF( num_sal /= 2 ) THEN ! ice salinity constant in time 359 DO ji = kideb, kiut 360 IF( ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) < 0._wp ) THEN 363 361 s_i_new(ji) = sm_i_b(ji) 364 362 ! Melting point in K … … 371 369 & - rcp * ( ztmelts - rtt ) ) 372 370 ! Basal growth rate = - F*dt / q 373 dh_i_bott(ji) = - rdt_ice *( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) / q_i_b(ji,nlay_i+1)371 dh_i_bott(ji) = - rdt_ice * ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) / q_i_b(ji,nlay_i+1) 374 372 ENDIF 375 373 END DO … … 379 377 ! 4.1 Basal growth - (b) salinity varying in time 380 378 !------------------------------------------------- 381 IF( num_sal == 2 .OR. num_sal == 4 ) THEN 382 ! the growth rate (dh_i_bott) is function of the new ice 383 ! heat content (q_i_b(nlay_i+1)). q_i_b depends on the new ice 384 ! salinity (snewice). snewice depends on dh_i_bott 385 ! it converges quickly, so, no problem 379 IF( num_sal == 2 ) THEN 380 ! the growth rate (dh_i_bott) is function of the new ice heat content (q_i_b(nlay_i+1)). 381 ! q_i_b depends on the new ice salinity (snewice). 382 ! snewice depends on dh_i_bott ; it converges quickly, so, no problem 386 383 ! See Vancoppenolle et al., OM08 for more info on this 387 384 … … 394 391 DO ji = kideb, kiut 395 392 IF( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) < 0.e0 ) THEN 396 zji = MOD( npb(ji) - 1, jpi ) + 1397 zjj = ( npb(ji) - 1 ) / jpi + 1393 ii = MOD( npb(ji) - 1, jpi ) + 1 394 ij = ( npb(ji) - 1 ) / jpi + 1 398 395 ! Melting point in K 399 396 ztmelts = - tmut * s_i_new(ji) + rtt … … 408 405 ! zswi12 (1) if dh_i_bott/rdt .LT. 3.6e-7 and .GT. 2.0e-8 409 406 ! zswi1 (1) if dh_i_bott/rdt .LT. 2.0e-8 410 zgrr = MIN( 1.0e-3, MAX ( dh_i_bott(ji) / rdt_ice , epsi13 ) )407 zgrr = MIN( 1.0e-3, MAX ( dh_i_bott(ji) * r1_rdtice , epsi13 ) ) 411 408 zswi2 = MAX( zzero , SIGN( zone , zgrr - 3.6e-7 ) ) 412 409 zswi12 = MAX( zzero , SIGN( zone , zgrr - 2.0e-8 ) ) * ( 1.0 - zswi2 ) … … 414 411 zfracs = zswi1 * 0.12 + zswi12 * ( 0.8925 + 0.0568 * LOG( 100.0 * zgrr ) ) & 415 412 & + zswi2 * 0.26 / ( 0.26 + 0.74 * EXP ( - 724300.0 * zgrr ) ) 416 zds = zfracs * sss_m( zji,zjj) - s_i_new(ji)417 s_i_new(ji) = zfracs * sss_m( zji,zjj)413 zds = zfracs * sss_m(ii,ij) - s_i_new(ji) 414 s_i_new(ji) = zfracs * sss_m(ii,ij) 418 415 ENDIF ! fc_bo_i 419 416 END DO ! ji … … 432 429 & - rcp * ( ztmelts - rtt ) ) 433 430 ! Basal growth rate = - F*dt / q 434 dh_i_bott(ji) = - rdt_ice *( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) / q_i_b(ji,nlay_i+1)431 dh_i_bott(ji) = - rdt_ice * ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) / q_i_b(ji,nlay_i+1) 435 432 ! Salinity update 436 433 ! entrapment during bottom growth … … 453 450 s_i_new(ji) = s_i_b(ji,nlay_i) 454 451 zqfont_bo(ji) = rdt_ice * ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) 455 zfbase(ji) = zqfont_bo(ji) / rdt_ice ! heat conservation test452 zfbase(ji) = zqfont_bo(ji) * r1_rdtice ! heat conservation test 456 453 zdq_i(ji) = 0._wp 457 454 dh_i_bott(ji) = 0._wp … … 461 458 DO jk = nlay_i, 1, -1 462 459 DO ji = kideb, kiut 463 IF ( ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) .GE. 0.0 ) THEN 464 ztmelts = - tmut * s_i_b(ji,jk) + rtt 465 IF( t_i_b(ji,jk) >= ztmelts ) THEN 466 zdeltah(ji,jk) = - zh_i(ji) 467 dh_i_bott(ji) = dh_i_bott(ji) + zdeltah(ji,jk) 468 zinnermelt(ji) = 1._wp 469 ELSE ! normal ablation 470 zdeltah(ji,jk) = - zqfont_bo(ji) / q_i_b(ji,jk) 471 zqfont_bo(ji) = MAX( 0.0 , - zh_i(ji) - zdeltah(ji,jk) ) * q_i_b(ji,jk) 472 zdeltah(ji,jk) = MAX(zdeltah(ji,jk), - zh_i(ji) ) 473 dh_i_bott(ji) = dh_i_bott(ji) + zdeltah(ji,jk) 474 zdq_i(ji) = zdq_i(ji) + zdeltah(ji,jk) * q_i_b(ji,jk) / rdt_ice 475 ! contribution to salt flux 476 zji = MOD( npb(ji) - 1, jpi ) + 1 477 zjj = ( npb(ji) - 1 ) / jpi + 1 478 zfsalt_melt(ji) = zfsalt_melt(ji) + ( sss_m(zji,zjj) - sm_i_b(ji) ) * a_i_b(ji) & 479 & * MIN( zdeltah(ji,jk) , 0.0 ) * rhoic / rdt_ice 460 IF( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) >= 0._wp ) THEN 461 ztmelts = - tmut * s_i_b(ji,jk) + rtt 462 IF( t_i_b(ji,jk) >= ztmelts ) THEN !!gm : a comment is needed 463 zdeltah (ji,jk) = - zh_i(ji) 464 dh_i_bott (ji ) = dh_i_bott(ji) + zdeltah(ji,jk) 465 zinnermelt(ji ) = 1._wp 466 ELSE ! normal ablation 467 zdeltah (ji,jk) = - zqfont_bo(ji) / q_i_b(ji,jk) 468 zqfont_bo(ji ) = MAX( 0.0 , - zh_i(ji) - zdeltah(ji,jk) ) * q_i_b(ji,jk) 469 zdeltah (ji,jk) = MAX(zdeltah(ji,jk), - zh_i(ji) ) 470 dh_i_bott(ji ) = dh_i_bott(ji) + zdeltah(ji,jk) 471 zdq_i (ji ) = zdq_i(ji) + zdeltah(ji,jk) * q_i_b(ji,jk) * r1_rdtice 480 472 ENDIF 473 ! contribution to salt flux 474 zfsalt_melt(ji) = zfsalt_melt(ji) - sm_i_b(ji) * a_i_b(ji) * MIN( zdeltah(ji,jk) , 0._wp ) * rhoic * r1_rdtice 481 475 ENDIF 482 476 END DO ! ji … … 493 487 ENDIF 494 488 IF ( zfbase(ji) + zdq_i(ji) .GE. 1.0e-3 ) THEN 495 WRITE(numout,*) ' ALERTE heat loss for basal melt : zji, zjj, jl :', zji, zjj, jl489 WRITE(numout,*) ' ALERTE heat loss for basal melt : ii, ij, jl :', ii, ij, jl 496 490 WRITE(numout,*) ' ht_i_b : ', ht_i_b(ji) 497 491 WRITE(numout,*) ' zfbase : ', zfbase(ji) … … 502 496 WRITE(numout,*) ' qlbbq_1d : ', qlbbq_1d(ji) 503 497 WRITE(numout,*) ' s_i_new : ', s_i_new(ji) 504 WRITE(numout,*) ' sss_m : ', sss_m( zji,zjj)498 WRITE(numout,*) ' sss_m : ', sss_m(ii,ij) 505 499 WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 506 500 WRITE(numout,*) ' innermelt : ', INT( zinnermelt(ji) ) … … 531 525 ! ! excessive energy is sent to lateral ablation 532 526 fsup (ji) = rhoic * lfus * at_i_b(ji) / MAX( 1.0 - at_i_b(ji) , epsi13 ) & 533 & * ( zdhbf - dh_i_bott(ji) ) / rdt_ice527 & * ( zdhbf - dh_i_bott(ji) ) * r1_rdtice 534 528 dh_i_bott(ji) = zdhbf 535 529 ! !since ice volume is only used for outputs, we keep it global for all categories … … 538 532 zhgnew (ji) = ht_i_b(ji) + dh_i_surf(ji) + dh_i_bott(ji) 539 533 ! ! diagnostic ( bottom ice growth ) 540 zji = MOD( npb(ji) - 1, jpi ) + 1541 zjj = ( npb(ji) - 1 ) / jpi + 1542 diag_bot_gr( zji,zjj) = diag_bot_gr(zji,zjj) + MAX(dh_i_bott(ji),0.0)*a_i_b(ji) / rdt_ice543 diag_sur_me( zji,zjj) = diag_sur_me(zji,zjj) + MIN(dh_i_surf(ji),0.0)*a_i_b(ji) / rdt_ice544 diag_bot_me( zji,zjj) = diag_bot_me(zji,zjj) + MIN(dh_i_bott(ji),0.0)*a_i_b(ji) / rdt_ice534 ii = MOD( npb(ji) - 1, jpi ) + 1 535 ij = ( npb(ji) - 1 ) / jpi + 1 536 diag_bot_gr(ii,ij) = diag_bot_gr(ii,ij) + MAX(dh_i_bott(ji),0.0)*a_i_b(ji) * r1_rdtice 537 diag_sur_me(ii,ij) = diag_sur_me(ii,ij) + MIN(dh_i_surf(ji),0.0)*a_i_b(ji) * r1_rdtice 538 diag_bot_me(ii,ij) = diag_bot_me(ii,ij) + MIN(dh_i_bott(ji),0.0)*a_i_b(ji) * r1_rdtice 545 539 END DO 546 540 … … 548 542 ! 5.2 More than available ice melts 549 543 !----------------------------------- 550 ! then heat applied minus heat content at previous time step 551 ! should equal heat remaining 544 ! then heat applied minus heat content at previous time step should equal heat remaining 552 545 ! 553 546 DO ji = kideb, kiut 554 547 ! Adapt the remaining energy if too much ice melts 555 548 !-------------------------------------------------- 556 zihgnew = 1.0 - MAX( zzero , SIGN( zone , - zhgnew(ji) ) ) !1 if ice549 zihgnew = 1.0 - MAX( zzero , SIGN( zone , - zhgnew(ji) ) ) ! =1 if ice 557 550 ! 0 if no more ice 558 551 zhgnew (ji) = zihgnew * zhgnew(ji) ! ice thickness is put to 0 … … 562 555 ! If snow remains, energy is used to melt snow 563 556 zhni = ht_s_b(ji) ! snow depth at previous time step 564 zihg = MAX( zzero , SIGN ( zone , - ht_s_b(ji) ) ) !0 if snow557 zihg = MAX( zzero , SIGN ( zone , - ht_s_b(ji) ) ) ! =0 if snow 565 558 566 559 ! energy of melting of remaining snow 567 560 zqt_s(ji) = ( 1. - zihg ) * zqt_s(ji) / MAX( zhni, epsi13 ) 568 561 zdhnm = - ( 1. - zihg ) * ( 1. - zihgnew ) * zfdt_final(ji) / MAX( zqt_s(ji) , epsi13 ) 569 zhnfi 562 zhnfi = zhni + zdhnm 570 563 zfdt_final(ji) = MAX( zfdt_final(ji) + zqt_s(ji) * zdhnm , 0.0 ) 571 564 ht_s_b(ji) = MAX( zzero , zhnfi ) … … 581 574 ! 582 575 ! ! mass variation cumulated over category 583 rdm snif_1d(ji) = rdmsnif_1d(ji) + zzfmass_s ! snow584 rdm icif_1d(ji) = rdmicif_1d(ji) + zzfmass_i ! ice576 rdm_snw_1d(ji) = rdm_snw_1d(ji) + zzfmass_s ! snow 577 rdm_ice_1d(ji) = rdm_ice_1d(ji) + zzfmass_i ! ice 585 578 586 579 ! Remaining heat to the ocean 587 580 !--------------------------------- 588 focea(ji) = - zfdt_final(ji) / rdt_ice ! focea is in W.m-2 * dt589 590 END DO 591 592 ftotal_fin (:) = zfdt_final(:) / rdt_ice581 focea(ji) = - zfdt_final(ji) * r1_rdtice ! focea is in W.m-2 * dt 582 583 END DO 584 585 ftotal_fin (:) = zfdt_final(:) * r1_rdtice 593 586 594 587 !--------------------------- … … 596 589 !--------------------------- 597 590 DO ji = kideb, kiut 598 zihgnew = 1.0 - MAX( zzero , SIGN( zone , - zhgnew(ji) ) ) ! 1 if ice599 591 zihgnew = 1.0 - MAX( zzero , SIGN( zone , - zhgnew(ji) ) ) ! =1 if ice 592 ! 600 593 ! Salt flux 601 zji = MOD( npb(ji) - 1, jpi ) + 1 602 zjj = ( npb(ji) - 1 ) / jpi + 1 603 ! new lines 604 IF( num_sal == 4 ) THEN 605 fseqv_1d(ji) = fseqv_1d(ji) + zihgnew * zfsalt_melt(ji) & 606 & + (1.0 - zihgnew) * zfmass_i(ji) * ( sss_m(zji,zjj) - bulk_sal ) / rdt_ice 607 ELSE 608 fseqv_1d(ji) = fseqv_1d(ji) + zihgnew * zfsalt_melt(ji) & 609 & + (1.0 - zihgnew) * zfmass_i(ji) * ( sss_m(zji,zjj) - sm_i_b(ji) ) / rdt_ice 610 ENDIF 594 fseqv_1d(ji) = fseqv_1d(ji) + zihgnew * zfsalt_melt(ji) & 595 & - (1.0 - zihgnew) * zfmass_i (ji) * sm_i_b(ji) ) * r1_rdtice 596 ! 611 597 ! Heat flux 612 598 ! excessive bottom ablation energy (fsup) - 0 except if jpl = 1 613 ! excessive total ablation energy (focea) sent to the ocean599 ! excessive total ablation energy (focea) sent to the ocean 614 600 qfvbq_1d(ji) = qfvbq_1d(ji) + fsup(ji) + ( 1.0 - zihgnew ) * focea(ji) * a_i_b(ji) * rdt_ice 615 601 616 zihic = 1.0 - MAX( zzero , SIGN( zone , -ht_i_b(ji) ) ) 617 ! equals 0 if ht_i = 0, 1 if ht_i gt 0 602 zihic = 1.0 - MAX( zzero , SIGN( zone , -ht_i_b(ji) ) ) ! equals 0 if ht_i = 0, 1 if ht_i gt 0 618 603 fscbq_1d(ji) = a_i_b(ji) * fstbif_1d(ji) 619 qldif_1d(ji) = qldif_1d(ji) + fsup(ji) + ( 1.0 - zihgnew ) * focea (ji)* a_i_b(ji) * rdt_ice &604 qldif_1d(ji) = qldif_1d(ji) + fsup(ji) + ( 1.0 - zihgnew ) * focea (ji) * a_i_b(ji) * rdt_ice & 620 605 & + ( 1.0 - zihic ) * fscbq_1d(ji) * rdt_ice 621 606 END DO ! ji … … 656 641 dmgwi_1d (ji) = dmgwi_1d(ji) + a_i_b(ji) * ( ht_s_b(ji) - zhnnew ) * rhosn 657 642 658 rdm icif_1d(ji) = rdmicif_1d(ji) + a_i_b(ji) * ( zhgnew(ji) - ht_i_b(ji) ) * rhoic659 rdm snif_1d(ji) = rdmsnif_1d(ji) + a_i_b(ji) * ( zhnnew - ht_s_b(ji) ) * rhosn643 rdm_ice_1d(ji) = rdm_ice_1d(ji) + a_i_b(ji) * ( zhgnew(ji) - ht_i_b(ji) ) * rhoic 644 rdm_snw_1d(ji) = rdm_snw_1d(ji) + a_i_b(ji) * ( zhnnew - ht_s_b(ji) ) * rhosn 660 645 661 646 ! Equivalent salt flux (1) Snow-ice formation component 662 647 ! ----------------------------------------------------- 663 zji = MOD( npb(ji) - 1, jpi ) + 1664 zjj = ( npb(ji) - 1 ) / jpi + 1665 666 IF( num_sal /= 2 ) THEN ; zsm_snowice = sm_i_b(ji)667 ELSE ; zsm_snowice = ( rhoic - rhosn ) / rhoic * sss_m(zji,zjj)648 ii = MOD( npb(ji) - 1, jpi ) + 1 649 ij = ( npb(ji) - 1 ) / jpi + 1 650 651 IF( num_sal == 2 ) THEN ; zsm_snowice = sss_m(ii,ij) * ( rhoic - rhosn ) / rhoic 652 ELSE ; zsm_snowice = sm_i_b(ji) 668 653 ENDIF 669 IF( num_sal == 4 ) THEN 670 fseqv_1d(ji) = fseqv_1d(ji) + ( sss_m(zji,zjj) - bulk_sal ) * a_i_b(ji) & 671 & * ( zhgnew(ji) - ht_i_b(ji) ) * rhoic / rdt_ice 672 ELSE 673 fseqv_1d(ji) = fseqv_1d(ji) + ( sss_m(zji,zjj) - zsm_snowice ) * a_i_b(ji) & 674 & * ( zhgnew(ji) - ht_i_b(ji) ) * rhoic / rdt_ice 675 ENDIF 654 fseqv_1d(ji) = fseqv_1d(ji) - zsm_snowice * a_i_b(ji) * dh_snowice(ji) * rhoic * r1_rdtice 655 ! 676 656 ! entrapment during snow ice formation 677 657 i_ice_switch = 1.0 - MAX( 0.e0 , SIGN( 1.0 , - ht_i_b(ji) + 1.0e-6 ) ) 678 658 isnowic = 1.0 - MAX( 0.e0 , SIGN( 1.0 , - dh_snowice(ji) ) ) * i_ice_switch 679 IF( num_sal == 2 .OR. num_sal == 4) &680 dsm_i_si_1d(ji) = ( zsm_snowice*dh_snowice(ji)&681 & + sm_i_b(ji) * ht_i_b(ji) / MAX( ht_i_b(ji) + dh_snowice(ji), epsi13) &682 & - sm_i_b(ji)) * isnowic659 IF( num_sal == 2 ) & 660 dsm_i_si_1d(ji) = ( zsm_snowice * dh_snowice(ji) & 661 & + sm_i_b(ji) * ht_i_b(ji) / MAX( ht_i_b(ji) + dh_snowice(ji), epsi13 ) & 662 & - sm_i_b(ji) ) * isnowic 683 663 684 664 ! Actualize new snow and ice thickness. … … 690 670 691 671 ! diagnostic ( snow ice growth ) 692 zji = MOD( npb(ji) - 1, jpi ) + 1693 zjj = ( npb(ji) - 1 ) / jpi + 1694 diag_sni_gr( zji,zjj) = diag_sni_gr(zji,zjj) + dh_snowice(ji)*a_i_b(ji) / rdt_ice672 ii = MOD( npb(ji) - 1, jpi ) + 1 673 ij = ( npb(ji) - 1 ) / jpi + 1 674 diag_sni_gr(ii,ij) = diag_sni_gr(ii,ij) + dh_snowice(ji)*a_i_b(ji) * r1_rdtice 695 675 ! 696 676 END DO !ji -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r3351 r3517 147 147 REAL(wp), DIMENSION(kiut,jkmax+2) :: zdiagbis 148 148 REAL(wp), DIMENSION(kiut,jkmax+2,3) :: ztrid ! tridiagonal system terms 149 !!------------------------------------------------------------------ 150 149 !!------------------------------------------------------------------ 151 150 ! 152 151 !------------------------------------------------------------------------------! … … 156 155 DO ji = kideb , kiut 157 156 ! is there snow or not 158 isnow(ji)= INT( 1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_b(ji) )) )157 isnow(ji)= INT( 1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_b(ji) ) ) ) 159 158 ! surface temperature of fusion 160 159 !!gm ??? ztfs(ji) = rtt !!!???? … … 201 200 DO ji = kideb , kiut 202 201 ! switches 203 isnow(ji) = INT( 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_b(ji) )) )202 isnow(ji) = INT( 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_b(ji) ) ) ) 204 203 ! hs > 0, isnow = 1 205 204 zhsu (ji) = hnzst ! threshold for the computation of i0 … … 262 261 ! just to check energy conservation 263 262 DO ji = kideb, kiut 264 ii = MOD( npb(ji) - 1, jpi ) + 1265 ij =( npb(ji) - 1 ) / jpi + 1263 ii = MOD( npb(ji) - 1 , jpi ) + 1 264 ij = ( npb(ji) - 1 ) / jpi + 1 266 265 fstroc(ii,ij,jl) = zradtr_i(ji,nlay_i) 267 266 END DO … … 273 272 END DO 274 273 END DO 275 276 274 277 275 ! … … 662 660 663 661 ! surface temperature 664 isnow(ji) = INT( 1.0-max(0.0,sign(1.0,-ht_s_b(ji))))662 isnow(ji) = INT( 1.0 - MAX( 0.0 , SIGN( 1.0 , -ht_s_b(ji) ) ) ) 665 663 ztsuoldit(ji) = t_su_b(ji) 666 IF (t_su_b(ji) .LT. ztfs(ji))&664 IF( t_su_b(ji) < ztfs(ji) ) & 667 665 t_su_b(ji) = ( zindtbis(ji,numeqmin(ji)) - ztrid(ji,numeqmin(ji),3)* ( isnow(ji)*t_s_b(ji,1) & 668 666 & + (1.0-isnow(ji))*t_i_b(ji,1) ) ) / zdiagbis(ji,numeqmin(ji)) -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90
r3294 r3517 408 408 IF ( con_i ) THEN 409 409 DO ji = kideb, kiut 410 IF ( ABS ( zqts_in(ji) - zqts_fin(ji) ) / rdt_ice .GT.1.0e-6 ) THEN410 IF ( ABS ( zqts_in(ji) - zqts_fin(ji) ) * r1_rdtice > 1.0e-6 ) THEN 411 411 zji = MOD( npb(ji) - 1, jpi ) + 1 412 412 zjj = ( npb(ji) - 1 ) / jpi + 1 413 413 WRITE(numout,*) ' violation of heat conservation : ', & 414 ABS ( zqts_in(ji) - zqts_fin(ji) ) / rdt_ice414 ABS ( zqts_in(ji) - zqts_fin(ji) ) * r1_rdtice 415 415 WRITE(numout,*) ' ji, jj : ', zji, zjj 416 416 WRITE(numout,*) ' ht_s_b : ', ht_s_b(ji) 417 WRITE(numout,*) ' zqts_in : ', zqts_in (ji) / rdt_ice418 WRITE(numout,*) ' zqts_fin : ', zqts_fin(ji) / rdt_ice417 WRITE(numout,*) ' zqts_in : ', zqts_in (ji) * r1_rdtice 418 WRITE(numout,*) ' zqts_fin : ', zqts_fin(ji) * r1_rdtice 419 419 WRITE(numout,*) ' dh_snowice : ', dh_snowice(ji) 420 420 WRITE(numout,*) ' dh_s_tot : ', dh_s_tot(ji) … … 526 526 ! bottom formation temperature 527 527 ztform = t_i_b(ji,nlay_i) 528 IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) )ztform = t_bo_b(ji)528 IF( num_sal == 2 ) ztform = t_bo_b(ji) 529 529 qm0(ji,nbot0(ji)) = ( 1.0 - icboswi(ji) )*qm0(ji,nbot0(ji)) & ! case of melting ice 530 530 & + icboswi(ji) * rhoic * ( cpic*(ztmelts-ztform) & ! case of forming ice … … 622 622 ! 623 623 DO ji = kideb, kiut 624 IF ( ABS ( zqti_in(ji) - zqti_fin(ji) ) / rdt_ice .GT.1.0e-6 ) THEN624 IF ( ABS ( zqti_in(ji) - zqti_fin(ji) ) * r1_rdtice > 1.0e-6 ) THEN 625 625 zji = MOD( npb(ji) - 1, jpi ) + 1 626 626 zjj = ( npb(ji) - 1 ) / jpi + 1 627 WRITE(numout,*) ' violation of heat conservation : ', ABS ( zqti_in(ji) - zqti_fin(ji) ) / rdt_ice627 WRITE(numout,*) ' violation of heat conservation : ', ABS ( zqti_in(ji) - zqti_fin(ji) ) * r1_rdtice 628 628 WRITE(numout,*) ' ji, jj : ', zji, zjj 629 629 WRITE(numout,*) ' ht_i_b : ', ht_i_b(ji) 630 WRITE(numout,*) ' zqti_in : ', zqti_in (ji) / rdt_ice631 WRITE(numout,*) ' zqti_fin : ', zqti_fin(ji) / rdt_ice630 WRITE(numout,*) ' zqti_in : ', zqti_in (ji) * r1_rdtice 631 WRITE(numout,*) ' zqti_fin : ', zqti_fin(ji) * r1_rdtice 632 632 WRITE(numout,*) ' dh_i_bott: ', dh_i_bott(ji) 633 633 WRITE(numout,*) ' dh_i_surf: ', dh_i_surf(ji) -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r3294 r3517 143 143 ! 1) Conservation check and changes in each ice category 144 144 !------------------------------------------------------------------------------! 145 IF 146 CALL lim_column_sum (jpl, v_i, vt_i_init)147 CALL lim_column_sum (jpl, v_s, vt_s_init)148 CALL lim_column_sum_energy ( jpl, nlay_i, e_i, et_i_init)149 CALL lim_column_sum (jpl,e_s(:,:,1,:) , et_s_init)145 IF( con_i ) THEN 146 CALL lim_column_sum ( jpl, v_i , vt_i_init) 147 CALL lim_column_sum ( jpl, v_s , vt_s_init) 148 CALL lim_column_sum_energy ( jpl, nlay_i , e_i , et_i_init) 149 CALL lim_column_sum ( jpl, e_s(:,:,1,:) , et_s_init) 150 150 ENDIF 151 151 … … 158 158 DO ji = 1, jpi 159 159 !Energy of melting q(S,T) [J.m-3] 160 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / & 161 MAX( area(ji,jj) * v_i(ji,jj,jl) , epsi10 ) * & 162 nlay_i 163 zindb = 1.0-MAX(0.0,SIGN(1.0,-v_i(ji,jj,jl))) !0 if no ice and 1 if yes 164 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl)*unit_fac*zindb 160 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / MAX( area(ji,jj) * v_i(ji,jj,jl) , epsi10 ) * nlay_i 161 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , -v_i(ji,jj,jl) ) ) !0 if no ice and 1 if yes 162 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac * zindb 165 163 END DO 166 164 END DO … … 182 180 ! 183 181 184 zvrel(:,:) = 0. 0182 zvrel(:,:) = 0._wp 185 183 186 184 ! Default new ice thickness 187 DO jj = 1, jpj 188 DO ji = 1, jpi 189 hicol(ji,jj) = hiccrit(1) 190 END DO 191 END DO 192 193 IF (fraz_swi.eq.1.0) THEN 185 hicol(:,:) = hiccrit(1) 186 187 IF( fraz_swi == 1._wp ) THEN 194 188 195 189 !-------------------- 196 190 ! Physical constants 197 191 !-------------------- 198 hicol(:,:) = 0. 0192 hicol(:,:) = 0._wp 199 193 200 194 zhicrit = 0.04 ! frazil ice thickness … … 306 300 IF ( nbpac > 0 ) THEN 307 301 308 CALL tab_2d_1d( nbpac, zat_i_ac (1:nbpac) , at_i , & 309 jpi, jpj, npac(1:nbpac) ) 302 CALL tab_2d_1d( nbpac, zat_i_ac (1:nbpac) , at_i , jpi, jpj, npac(1:nbpac) ) 310 303 DO jl = 1, jpl 311 CALL tab_2d_1d( nbpac, za_i_ac(1:nbpac,jl) , a_i(:,:,jl) , & 312 jpi, jpj, npac(1:nbpac) ) 313 CALL tab_2d_1d( nbpac, zv_i_ac(1:nbpac,jl) , v_i(:,:,jl) , & 314 jpi, jpj, npac(1:nbpac) ) 315 CALL tab_2d_1d( nbpac, zoa_i_ac(1:nbpac,jl) , oa_i(:,:,jl) , & 316 jpi, jpj, npac(1:nbpac) ) 317 CALL tab_2d_1d( nbpac, zsmv_i_ac(1:nbpac,jl), smv_i(:,:,jl), & 318 jpi, jpj, npac(1:nbpac) ) 304 CALL tab_2d_1d( nbpac, za_i_ac(1:nbpac,jl) , a_i(:,:,jl) , jpi, jpj, npac(1:nbpac) ) 305 CALL tab_2d_1d( nbpac, zv_i_ac(1:nbpac,jl) , v_i(:,:,jl) , jpi, jpj, npac(1:nbpac) ) 306 CALL tab_2d_1d( nbpac, zoa_i_ac(1:nbpac,jl) , oa_i(:,:,jl) , jpi, jpj, npac(1:nbpac) ) 307 CALL tab_2d_1d( nbpac, zsmv_i_ac(1:nbpac,jl), smv_i(:,:,jl), jpi, jpj, npac(1:nbpac) ) 319 308 DO jk = 1, nlay_i 320 CALL tab_2d_1d( nbpac, ze_i_ac(1:nbpac,jk,jl), e_i(:,:,jk,jl) , & 321 jpi, jpj, npac(1:nbpac) ) 309 CALL tab_2d_1d( nbpac, ze_i_ac(1:nbpac,jk,jl), e_i(:,:,jk,jl) , jpi, jpj, npac(1:nbpac) ) 322 310 END DO ! jk 323 311 END DO ! jl 324 312 325 CALL tab_2d_1d( nbpac, qldif_1d (1:nbpac) , qldif , & 326 jpi, jpj, npac(1:nbpac) ) 327 CALL tab_2d_1d( nbpac, qcmif_1d (1:nbpac) , qcmif , & 328 jpi, jpj, npac(1:nbpac) ) 329 CALL tab_2d_1d( nbpac, t_bo_b (1:nbpac) , t_bo , & 330 jpi, jpj, npac(1:nbpac) ) 331 CALL tab_2d_1d( nbpac, fseqv_1d (1:nbpac) , fseqv , & 332 jpi, jpj, npac(1:nbpac) ) 333 CALL tab_2d_1d( nbpac, hicol_b (1:nbpac) , hicol , & 334 jpi, jpj, npac(1:nbpac) ) 335 CALL tab_2d_1d( nbpac, zvrel_ac (1:nbpac) , zvrel , & 336 jpi, jpj, npac(1:nbpac) ) 313 CALL tab_2d_1d( nbpac, qldif_1d (1:nbpac) , qldif , jpi, jpj, npac(1:nbpac) ) 314 CALL tab_2d_1d( nbpac, qcmif_1d (1:nbpac) , qcmif , jpi, jpj, npac(1:nbpac) ) 315 CALL tab_2d_1d( nbpac, t_bo_b (1:nbpac) , t_bo , jpi, jpj, npac(1:nbpac) ) 316 CALL tab_2d_1d( nbpac, fseqv_1d (1:nbpac) , fseqv , jpi, jpj, npac(1:nbpac) ) 317 CALL tab_2d_1d( nbpac, hicol_b (1:nbpac) , hicol , jpi, jpj, npac(1:nbpac) ) 318 CALL tab_2d_1d( nbpac, zvrel_ac (1:nbpac) , zvrel , jpi, jpj, npac(1:nbpac) ) 337 319 338 320 !------------------------------------------------------------------------------! … … 344 326 !---------------------- 345 327 DO ji = 1, nbpac 346 zh_newice(ji) 347 END DO 348 IF ( fraz_swi .EQ. 1.0 )zh_newice(:) = hicol_b(:)328 zh_newice(ji) = hiccrit(1) 329 END DO 330 IF( fraz_swi == 1.0 ) zh_newice(:) = hicol_b(:) 349 331 350 332 !---------------------- … … 352 334 !---------------------- 353 335 354 IF ( num_sal .EQ. 1 ) THEN 355 zs_newice(:) = bulk_sal 356 ENDIF ! num_sal 357 358 IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) ) THEN 359 360 DO ji = 1, nbpac 361 zs_newice(ji) = MIN( 4.606 + 0.91 / zh_newice(ji) , s_i_max ) 362 zji = MOD( npac(ji) - 1, jpi ) + 1 363 zjj = ( npac(ji) - 1 ) / jpi + 1 364 zs_newice(ji) = MIN( 0.5*sss_m(zji,zjj) , zs_newice(ji) ) 365 END DO ! jl 366 367 ENDIF ! num_sal 368 369 IF ( num_sal .EQ. 3 ) THEN 370 zs_newice(:) = 2.3 371 ENDIF ! num_sal 336 SELECT CASE ( num_sal ) 337 CASE ( 1 ) ! Sice = constant 338 zs_newice(:) = bulk_sal 339 CASE ( 2 ) ! Sice = F(z,t) [Vancoppenolle et al (2005)] 340 DO ji = 1, nbpac 341 zji = MOD( npac(ji) - 1 , jpi ) + 1 342 zjj = ( npac(ji) - 1 ) / jpi + 1 343 zs_newice(ji) = MIN( 4.606 + 0.91 / zh_newice(ji) , s_i_max , 0.5 * sss_m(zji,zjj) ) 344 END DO 345 CASE ( 3 ) ! Sice = F(z) [multiyear ice] 346 zs_newice(:) = 2.3 347 END SELECT 348 372 349 373 350 !------------------------- … … 376 353 ! We assume that new ice is formed at the seawater freezing point 377 354 DO ji = 1, nbpac 378 ztmelts = - tmut * zs_newice(ji) + rtt ! Melting point (K) 379 ze_newice(ji) = rhoic * ( cpic * ( ztmelts - t_bo_b(ji) ) & 380 + lfus * ( 1.0 - ( ztmelts - rtt ) & 381 / ( t_bo_b(ji) - rtt ) ) & 382 - rcp * ( ztmelts-rtt ) ) 383 ze_newice(ji) = MAX( ze_newice(ji) , 0.0 ) + & 384 MAX( 0.0 , SIGN( 1.0 , - ze_newice(ji) ) ) & 385 * rhoic * lfus 355 ztmelts = - tmut * zs_newice(ji) + rtt ! Melting point (K) 356 ze_newice(ji) = rhoic * ( cpic * ( ztmelts - t_bo_b(ji) ) & 357 & + lfus * ( 1.0 - ( ztmelts - rtt ) / ( t_bo_b(ji) - rtt ) ) & 358 & - rcp * ( ztmelts - rtt ) ) 359 ze_newice(ji) = MAX( ze_newice(ji) , 0._wp ) & 360 & + MAX( 0.0 , SIGN( 1.0 , - ze_newice(ji) ) ) * rhoic * lfus 386 361 END DO ! ji 387 362 !---------------- … … 389 364 !---------------- 390 365 DO ji = 1, nbpac 391 zo_newice(ji) = 0.0366 zo_newice(ji) = 0._wp 392 367 END DO ! ji 393 368 … … 396 371 !-------------------------- 397 372 DO ji = 1, nbpac 398 zqbgow(ji) = qldif_1d(ji) - qcmif_1d(ji)!<0373 zqbgow(ji) = qldif_1d(ji) - qcmif_1d(ji) !<0 399 374 END DO ! ji 400 375 … … 403 378 !------------------- 404 379 DO ji = 1, nbpac 405 zv_newice(ji) 380 zv_newice(ji) = - zqbgow(ji) / ze_newice(ji) 406 381 407 382 ! A fraction zfrazb of frazil ice is accreted at the ice bottom 408 zfrazb = ( TANH ( Cfrazb * ( zvrel_ac(ji) - vfrazb ) ) & 409 + 1.0 ) / 2.0 * maxfrazb 410 zdh_frazb(ji) = zfrazb*zv_newice(ji) 383 zfrazb = ( TANH ( Cfrazb * ( zvrel_ac(ji) - vfrazb ) ) + 1.0 ) * 0.5 * maxfrazb 384 zdh_frazb(ji) = zfrazb * zv_newice(ji) 411 385 zv_newice(ji) = ( 1.0 - zfrazb ) * zv_newice(ji) 412 386 END DO … … 415 389 ! Salt flux due to new ice growth 416 390 !--------------------------------- 417 IF ( ( num_sal .EQ. 4 ) ) THEN 418 DO ji = 1, nbpac 419 zji = MOD( npac(ji) - 1, jpi ) + 1 420 zjj = ( npac(ji) - 1 ) / jpi + 1 421 fseqv_1d(ji) = fseqv_1d(ji) + & 422 ( sss_m(zji,zjj) - bulk_sal ) * rhoic * & 423 zv_newice(ji) / rdt_ice 424 END DO 425 ELSE 426 DO ji = 1, nbpac 427 zji = MOD( npac(ji) - 1, jpi ) + 1 428 zjj = ( npac(ji) - 1 ) / jpi + 1 429 fseqv_1d(ji) = fseqv_1d(ji) + & 430 ( sss_m(zji,zjj) - zs_newice(ji) ) * rhoic * & 431 zv_newice(ji) / rdt_ice 432 END DO ! ji 433 ENDIF 391 ! note that for constant salinity zs_newice() = bulk_sal (see top of the subroutine) 392 DO ji = 1, nbpac 393 fseqv_1d(ji) = fseqv_1d(ji) - zs_newice(ji) * rhoic * zv_newice(ji) * r1_rdtice 394 END DO ! ji 434 395 435 396 !------------------------------------ … … 448 409 449 410 ! keep new ice volume in memory 450 CALL tab_1d_2d( nbpac, v_newice , npac(1:nbpac), zv_newice(1:nbpac) , & 451 jpi, jpj ) 411 CALL tab_1d_2d( nbpac, v_newice , npac(1:nbpac), zv_newice(1:nbpac) , jpi, jpj ) 452 412 453 413 !----------------- … … 459 419 zji = MOD( npac(ji) - 1, jpi ) + 1 460 420 zjj = ( npac(ji) - 1 ) / jpi + 1 461 diag_lat_gr(zji,zjj) = zv_newice(ji) / rdt_ice421 diag_lat_gr(zji,zjj) = zv_newice(ji) * r1_rdtice 462 422 END DO !ji 463 423 … … 628 588 ! Update salinity 629 589 !----------------- 630 IF( num_sal == 2 .OR. num_sal == 4 ) THEN590 IF( num_sal == 2 ) THEN ! Sice = F(z,t) 631 591 DO jl = 1, jpl 632 592 DO ji = 1, nbpac 633 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zv_i_ac(ji,jl) ) ) ! 0 if no ice and 1 if yes593 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zv_i_ac(ji,jl) ) ) ! 0 if no ice and 1 if yes 634 594 zdv = zv_i_ac(ji,jl) - zv_old(ji,jl) 635 595 zsmv_i_ac(ji,jl) = ( zsmv_i_ac(ji,jl) + zdv * zs_newice(ji) ) * zindb … … 645 605 CALL tab_1d_2d( nbpac, v_i (:,:,jl), npac(1:nbpac), zv_i_ac (1:nbpac,jl), jpi, jpj ) 646 606 CALL tab_1d_2d( nbpac, oa_i(:,:,jl), npac(1:nbpac), zoa_i_ac(1:nbpac,jl), jpi, jpj ) 647 IF ( num_sal == 2 .OR. num_sal == 4) &607 IF ( num_sal == 2 ) & 648 608 CALL tab_1d_2d( nbpac, smv_i (:,:,jl), npac(1:nbpac), zsmv_i_ac(1:nbpac,jl) , jpi, jpj ) 649 609 DO jk = 1, nlay_i -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90
r3294 r3517 44 44 !! ** Purpose : computes new salinities in the ice 45 45 !! 46 !! ** Method : 4 possibilities 47 !! -> num_sal = 1 -> constant salinity for z,t 48 !! -> num_sal = 2 -> S = S(z,t) [simple Vancoppenolle et al 2005] 49 !! -> num_sal = 3 -> S = S(z) [multiyear ice] 50 !! -> num_sal = 4 -> S = S(h) [Cox and Weeks 74] 46 !! ** Method : 3 possibilities 47 !! -> num_sal = 1 -> Sice = cst [ice salinity constant in both time & space] 48 !! -> num_sal = 2 -> Sice = S(z,t) [Vancoppenolle et al. 2005] 49 !! -> num_sal = 3 -> Sice = S(z) [multiyear ice] 51 50 !!--------------------------------------------------------------------- 52 INTEGER, INTENT(in) :: kideb, kiut ! thickness category index51 INTEGER, INTENT(in) :: kideb, kiut ! thickness category index 53 52 ! 54 53 INTEGER :: ji, jk ! dummy loop indices 55 INTEGER :: zji, zjj ! local integers56 54 REAL(wp) :: zsold, iflush, iaccrbo, igravdr, isnowic, i_ice_switch, ztmelts ! local scalars 57 55 REAL(wp) :: zaaa, zbbb, zccc, zdiscrim ! local scalars … … 64 62 ! 1) Constant salinity, constant in time | 65 63 !------------------------------------------------------------------------------| 66 !!gm comment: if num_sal = 1 s_i_b and sm_i_b can be set to bulk_sal one for all in the initialisation phase !! 67 IF( num_sal == 1 ) THEN 68 ! 69 DO jk = 1, nlay_i 70 DO ji = kideb, kiut 71 s_i_b(ji,jk) = bulk_sal 72 END DO ! ji 73 END DO ! jk 74 ! 75 DO ji = kideb, kiut 76 sm_i_b(ji) = bulk_sal 77 END DO ! ji 78 ! 64 !!gm comment: if num_sal = 1 s_i_new, s_i_b and sm_i_b can be set to bulk_sal one for all in the initialisation phase !! 65 !!gm ===>>> simplification of almost all test on num_sal value 66 IF( num_sal == 1 ) THEN 67 s_i_b (kideb:kiut,1:nlay_i) = bulk_sal 68 sm_i_b (kideb:kiut) = bulk_sal 69 s_i_new(kideb:kiut) = bulk_sal 79 70 ENDIF 80 71 … … 83 74 !------------------------------------------------------------------------------| 84 75 85 IF( num_sal == 2 .OR. num_sal == 4) THEN76 IF( num_sal == 2 ) THEN 86 77 87 78 !--------------------------------- … … 118 109 dsm_i_gd_1d(ji) = - igravdr * MAX( sm_i_b(ji) - sal_G , 0._wp ) / time_G * rdt_ice 119 110 ! ! drainage by flushing 120 dsm_i_fl_1d(ji) = - iflush * MAX( sm_i_b(ji) - sal_F , 0._wp ) / time_F * rdt_ice111 dsm_i_fl_1d(ji) = - iflush * MAX( sm_i_b(ji) - sal_F , 0._wp ) / time_F * rdt_ice 121 112 122 113 !----------------- … … 133 124 END DO ! ji 134 125 135 ! Salinity profile136 CALL lim_var_salprof1d( kideb, kiut ) 126 CALL lim_var_salprof1d( kideb, kiut ) ! Salinity profile 127 137 128 138 129 !---------------------------- … … 143 134 !!gm useless 144 135 ! iflush : 1 if summer 145 iflush = MAX( 0._wp , SIGN ( 1._wp , t_su_b(ji) - rtt ))136 iflush = MAX( 0._wp , SIGN( 1._wp , t_su_b(ji) - rtt ) ) 146 137 ! igravdr : 1 if t_su lt t_bo 147 igravdr = MAX( 0._wp , SIGN ( 1._wp , t_bo_b(ji) - t_su_b(ji) ))138 igravdr = MAX( 0._wp , SIGN( 1._wp , t_bo_b(ji) - t_su_b(ji) ) ) 148 139 ! iaccrbo : 1 if bottom accretion 149 iaccrbo = MAX( 0._wp , SIGN ( 1._wp , dh_i_bott(ji) ))140 iaccrbo = MAX( 0._wp , SIGN( 1._wp , dh_i_bott(ji) ) ) 150 141 !!gm end useless 151 142 ! … … 157 148 !---------------------------- 158 149 DO ji = kideb, kiut 159 i_ice_switch = 1._wp - MAX ( 0._wp, SIGN( 1._wp , - ht_i_b(ji) ))150 i_ice_switch = 1._wp - MAX( 0._wp, SIGN( 1._wp , - ht_i_b(ji) ) ) 160 151 fsbri_1d(ji) = fsbri_1d(ji) - i_ice_switch * rhoic * a_i_b(ji) * ht_i_b(ji) & 161 & * ( MAX(dsm_i_gd_1d(ji) + dsm_i_fl_1d(ji), sm_i_b(ji) - zsiold(ji) ) ) / rdt_ice 162 IF( num_sal == 4 ) fsbri_1d(ji) = 0._wp 152 & * ( MAX(dsm_i_gd_1d(ji) + dsm_i_fl_1d(ji), sm_i_b(ji) - zsiold(ji) ) ) * r1_rdtice 163 153 END DO ! ji 164 154 … … 179 169 END DO 180 170 ! 181 ENDIF ! num_sal .EQ. 2171 ENDIF 182 172 183 173 !------------------------------------------------------------------------------| … … 185 175 !------------------------------------------------------------------------------| 186 176 187 IF( num_sal == 3 ) CALL lim_var_salprof1d( kideb, kiut ) 188 189 !------------------------------------------------------------------------------| 190 ! Module 4 : Constant salinity varying in time | 191 !------------------------------------------------------------------------------| 192 193 IF( num_sal == 5 ) THEN ! Cox and Weeks, 1974 194 ! 195 DO ji = kideb, kiut 196 zsold = sm_i_b(ji) 197 IF( ht_i_b(ji) < 0.4 ) THEN 198 sm_i_b(ji) = 14.24 - 19.39 * ht_i_b(ji) 199 ELSE 200 sm_i_b(ji) = 7.88 - 1.59 * ht_i_b(ji) 201 sm_i_b(ji) = MIN( sm_i_b(ji) , zsold ) 202 ENDIF 203 IF( ht_i_b(ji) > 3.06918239 ) THEN 204 sm_i_b(ji) = 3._wp 205 ENDIF 206 DO jk = 1, nlay_i 207 s_i_b(ji,jk) = sm_i_b(ji) 208 END DO 209 END DO 210 ! 211 ENDIF ! num_sal 177 IF( num_sal == 3 ) CALL lim_var_salprof1d( kideb, kiut ) 178 212 179 213 180 !------------------------------------------------------------------------------| 214 181 ! 5) Computation of salt flux due to Bottom growth 215 182 !------------------------------------------------------------------------------| 216 217 IF ( num_sal == 4 ) THEN 218 DO ji = kideb, kiut 219 zji = MOD( npb(ji) - 1 , jpi ) + 1 220 zjj = ( npb(ji) - 1 ) / jpi + 1 221 fseqv_1d(ji) = fseqv_1d(ji) + ( sss_m(zji,zjj) - bulk_sal ) & 222 & * rhoic * a_i_b(ji) * MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice 223 END DO 224 ELSE 225 DO ji = kideb, kiut 226 zji = MOD( npb(ji) - 1 , jpi ) + 1 227 zjj = ( npb(ji) - 1 ) / jpi + 1 228 fseqv_1d(ji) = fseqv_1d(ji) + ( sss_m(zji,zjj) - s_i_new(ji) ) & 229 & * rhoic * a_i_b(ji) * MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice 230 END DO 231 ENDIF 183 ! note: s_i_new = bulk_sal in constant salinity case 184 DO ji = kideb, kiut 185 fseqv_1d(ji) = fseqv_1d(ji) - s_i_new(ji) * rhoic * a_i_b(ji) * MAX( dh_i_bott(ji) , 0._wp ) * r1_rdtice 186 END DO 232 187 ! 233 188 CALL wrk_dealloc( jpij, ze_init, zhiold, zsiold ) -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r3419 r3517 392 392 393 393 ! Ice salinity and age 394 zsal = MAX( MIN( (rhoic-rhosn)/rhoic*sss_m(ji,jj) , & 395 zusvoic * zs0sm(ji,jj,jl) ), s_i_min ) * v_i(ji,jj,jl) 396 IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) ) & 397 smv_i(ji,jj,jl) = zindic*zsal + (1.0-zindic)*0.0 398 399 zage = MAX( MIN( zbigval, zs0oi(ji,jj,jl) / & 400 MAX( a_i(ji,jj,jl), epsi16 ) ), 0.0 ) * a_i(ji,jj,jl) 401 oa_i (ji,jj,jl) = zindic*zage 394 zsal = MAX( MIN( (rhoic-rhosn)/rhoic*sss_m(ji,jj) , & 395 & zusvoic * zs0sm(ji,jj,jl) ) , s_i_min ) * v_i(ji,jj,jl) 396 IF( num_sal == 2 ) smv_i(ji,jj,jl) = zindic * zsal + (1.0-zindic) * 0._wp 397 398 zage = MAX( MIN( zbigval, zs0oi(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi16 ) ), 0._wp ) * a_i(ji,jj,jl) 399 oa_i (ji,jj,jl) = zindic * zage 402 400 403 401 ! Snow heat content -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limupdate.F90
r3419 r3517 190 190 191 191 ! is there any ice left ? 192 zindic = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi10 ) )192 zindic = MAX( rzero , SIGN( rone, v_i(ji,jj,jl) - epsi10 ) ) 193 193 !=1 if hi > 1e-3 and 0 if not 194 zdvres = MAX(0.0,-v_i(ji,jj,jl)) !residual volume if too much ice was molten194 zdvres = MAX( 0.0 , -v_i(ji,jj,jl) ) !residual volume if too much ice was molten 195 195 !this quantity is positive 196 v_i(ji,jj,jl) = zindic *v_i(ji,jj,jl) !ice volume cannot be negative196 v_i(ji,jj,jl) = zindic * v_i(ji,jj,jl) !ice volume cannot be negative 197 197 !correct thermodynamic ablation 198 d_v_i_thd(ji,jj,jl) 198 d_v_i_thd(ji,jj,jl) = zindic * d_v_i_thd(ji,jj,jl) + (1.0-zindic) * (-zviold - d_v_i_trp(ji,jj,jl)) 199 199 ! THIS IS NEW 200 d_a_i_thd(ji,jj,jl) = zindic * d_a_i_thd(ji,jj,jl) + & 201 (1.0-zindic) * (-old_a_i(ji,jj,jl)) 200 d_a_i_thd(ji,jj,jl) = zindic * d_a_i_thd(ji,jj,jl) + (1.0-zindic) * (-old_a_i(ji,jj,jl)) 202 201 203 202 !residual salt flux if ice is over-molten 204 fsalt_res(ji,jj) = fsalt_res(ji,jj) + ( sss_m(ji,jj) - sm_i(ji,jj,jl) ) * & 205 ( rhoic * zdvres / rdt_ice ) 206 ! fheat_res(ji,jj) = fheat_res(ji,jj) + rhoic * lfus * zdvres / rdt_ice 203 fsalt_res(ji,jj) = fsalt_res(ji,jj) - sm_i(ji,jj,jl) * ( rhoic * zdvres * r1_rdtice ) 204 ! fheat_res(ji,jj) = fheat_res(ji,jj) + rhoic * lfus * zdvres * r1_rdtice 207 205 208 206 ! is there any snow left ? 209 zindsn = MAX( rzero, SIGN( rone, v_s(ji,jj,jl) - epsi10 ))210 zvsold 211 zdvres = MAX(0.0,-v_s(ji,jj,jl))!residual volume if too much ice was molten207 zindsn = MAX( rzero, SIGN( rone , v_s(ji,jj,jl) - epsi10 ) ) 208 zvsold = v_s(ji,jj,jl) 209 zdvres = MAX( 0.0 , -v_s(ji,jj,jl) ) !residual volume if too much ice was molten 212 210 !this quantity is positive 213 211 v_s(ji,jj,jl) = zindsn*v_s(ji,jj,jl) !snow volume cannot be negative … … 215 213 d_v_s_thd(ji,jj,jl) = zindsn * d_v_s_thd(ji,jj,jl) + & 216 214 (1.0-zindsn) * (-zvsold - d_v_s_trp(ji,jj,jl)) 217 !unsure correction on salt flux.... maybe future will tell it was not that right 218 219 !residual salt flux if snow is over-molten 220 fsalt_res(ji,jj) = fsalt_res(ji,jj) + sss_m(ji,jj) * ( rhosn * zdvres / rdt_ice ) 221 !this flux will be positive if snow was over-molten 222 ! fheat_res(ji,jj) = fheat_res(ji,jj) + rhosn * lfus * zdvres / rdt_ice 215 216 !no salt flux when snow is over-molten 217 ! fheat_res(ji,jj) = fheat_res(ji,jj) + rhosn * lfus * zdvres * r1_rdtice 223 218 ENDIF 224 219 END DO !ji … … 306 301 !-------------- 307 302 308 IF( num_sal == 2 .OR. num_sal == 4 ) THEN ! general case303 IF( num_sal == 2 ) THEN ! Prognostic salinity [Sice=F(z,t)] 309 304 ! 310 305 IF( ln_nicep ) THEN … … 317 312 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 318 313 ENDIF 319 314 ! 320 315 smv_i(:,:,:) = smv_i(:,:,:) + d_smv_i_thd(:,:,:) + d_smv_i_trp(:,:,:) 321 316 ! … … 616 611 DO ji = 1, jpi 617 612 IF ( internal_melt(ji,jj,jl) == 1 ) THEN 618 v_s(ji,jj,jl) = 0. 0619 e_s(ji,jj,1,jl) = 0. 0613 v_s(ji,jj,jl) = 0._wp 614 e_s(ji,jj,1,jl) = 0._wp 620 615 ! ! release heat 621 fheat_res(ji,jj) = fheat_res(ji,jj) & 622 + ze_s * v_s(ji,jj,jl) / rdt_ice 616 fheat_res(ji,jj) = fheat_res(ji,jj) + ze_s * v_s(ji,jj,jl) * r1_rdtice 623 617 ! release mass 624 rdm_snw (ji,jj) = rdm_snw(ji,jj) + rhosn * v_s(ji,jj,jl)618 rdm_snw (ji,jj) = rdm_snw (ji,jj) + rhosn * v_s(ji,jj,jl) 625 619 ENDIF 626 620 END DO … … 648 642 ! ENDIF 649 643 IF ((oa_i(ji,jj,jl)-1.0)*86400.0.gt.(rdt_ice*numit*a_i(ji,jj,jl))) THEN 650 oa_i(ji,jj,jl) = rdt_ice *numit/86400.0*a_i(ji,jj,jl)644 oa_i(ji,jj,jl) = rdt_ice * numit / 86400.0 * a_i(ji,jj,jl) 651 645 ENDIF 652 646 oa_i(ji,jj,jl) = zindb*zindic*oa_i(ji,jj,jl) … … 657 651 ! v_s(ji,jj,jl) = MAX( zindb * v_s(ji,jj,jl), 0.0) 658 652 ! snow thickness cannot be smaller than 1e-6 659 v_s(ji,jj,jl) = zindsn *v_s(ji,jj,jl)*zindb653 v_s(ji,jj,jl) = zindsn * v_s(ji,jj,jl) * zindb 660 654 v_s(ji,jj,jl) = v_s(ji,jj,jl) * MAX( 0.0 , SIGN( 1.0 , v_s(ji,jj,jl) - epsi06 ) ) 661 655 … … 737 731 !--------------------- 738 732 739 IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) ) THEN ! general case740 733 IF( num_sal == 2 ) THEN ! Prognostic salinity [Sice=F(z,t)] 734 ! 741 735 DO jl = 1, jpl 742 736 DO jk = 1, nlay_i 743 737 DO jj = 1, jpj 744 DO ji = 1, jpi 745 ! salinity stays in bounds 746 smv_i(ji,jj,jl) = MAX(MIN((rhoic-rhosn)/rhoic*sss_m(ji,jj),smv_i(ji,jj,jl)), & 747 0.1 * v_i(ji,jj,jl) ) 738 DO ji = 1, jpi ! salinity stays in bounds 739 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) ) 748 740 i_ice_switch = 1.0-MAX(0.0,SIGN(1.0,-v_i(ji,jj,jl))) 749 smv_i(ji,jj,jl) = i_ice_switch*smv_i(ji,jj,jl) + & 750 0.1*(1.0-i_ice_switch)*v_i(ji,jj,jl) 741 smv_i(ji,jj,jl) = i_ice_switch*smv_i(ji,jj,jl) + 0.1*(1.0-i_ice_switch)*v_i(ji,jj,jl) 751 742 END DO ! ji 752 743 END DO ! jj 753 744 END DO !jk 754 745 END DO !jl 755 746 ! 756 747 ENDIF 757 748 … … 819 810 ! 1) Count the number of existing categories 820 811 DO jl = 1, jpl 812 !!cr : comment the second line of zindb definition, and use epsi04 in the 1st one 821 813 zindb = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - epsi03 ) ) 822 814 zindb = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) ) ) -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r3294 r3517 182 182 END DO 183 183 184 IF( num_sal == 2 .OR. num_sal == 4)THEN184 IF( num_sal == 2 )THEN 185 185 DO jl = 1, jpl 186 186 DO jj = 1, jpj … … 309 309 ! Vertically constant, constant in time 310 310 !--------------------------------------- 311 IF( num_sal == 1) s_i(:,:,:,:) = bulk_sal311 IF( num_sal == 1 ) s_i(:,:,:,:) = bulk_sal 312 312 313 313 !----------------------------------- 314 314 ! Salinity profile, varying in time 315 315 !----------------------------------- 316 317 IF( num_sal == 2 .OR. num_sal == 4 ) THEN 316 IF( num_sal == 2 ) THEN 318 317 ! 319 318 DO jk = 1, nlay_i … … 331 330 dummy_fac0 = 1._wp / ( s_i_0 - s_i_1 ) ! Weighting factor between zs_zero and zs_inf 332 331 dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 ) 333 332 ! 334 333 zalpha(:,:,:) = 0._wp 335 334 DO jl = 1, jpl … … 347 346 END DO 348 347 END DO 349 348 ! 350 349 dummy_fac = 1._wp / nlay_i ! Computation of the profile 351 350 DO jl = 1, jpl … … 361 360 END DO ! jk 362 361 END DO ! jl 363 362 ! 364 363 ENDIF ! num_sal 365 364 … … 368 367 !------------------------------------------------------- 369 368 370 IF( num_sal == 3) THEN ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30)369 IF( num_sal == 3 ) THEN ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) 371 370 ! 372 371 sm_i(:,:,:) = 2.30_wp … … 380 379 END DO 381 380 END DO 382 381 ! 383 382 ENDIF ! num_sal 384 383 ! … … 447 446 !------------------------------------------------------ 448 447 449 IF( num_sal == 2 .OR. num_sal == 4) THEN448 IF( num_sal == 2 ) THEN 450 449 ! 451 450 DO ji = kideb, kiut ! Slope of the linear profile zs_zero -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/limwri_dimg.h90
r3402 r3517 111 111 zcmo(ji,jj,13) = qns(ji,jj) 112 112 ! See thersf for the coefficient 113 zcmo(ji,jj,14) = - sfx (ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce113 zcmo(ji,jj,14) = - sfx (ji,jj) * rday ! converted in Kg/m2/day = mm/day 114 114 zcmo(ji,jj,15) = utau_ice(ji,jj) 115 115 zcmo(ji,jj,16) = vtau_ice(ji,jj) … … 154 154 rcmoy(ji,jj,13) = qns(ji,jj) 155 155 ! See thersf for the coefficient 156 rcmoy(ji,jj,14) = - sfx (ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce156 rcmoy(ji,jj,14) = - sfx (ji,jj) * rday ! converted in mm/day 157 157 rcmoy(ji,jj,15) = utau_ice(ji,jj) 158 158 rcmoy(ji,jj,16) = vtau_ice(ji,jj) -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r2715 r3517 66 66 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: at_i_b !: <==> the 2D frld 67 67 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fbif_1d !: <==> the 2D fbif 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: rdm icif_1d !: <==> the 2D rdmicif69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: rdm snif_1d !: <==> the 2D rdmsnif68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: rdm_ice_1d !: <==> the 2D rdm_ice 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: rdm_snw_1d !: <==> the 2D rdm_snw 70 70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qlbbq_1d !: <==> the 2D qlbsbq 71 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dmgwi_1d !: <==> the 2D dmgwi … … 160 160 ! 161 161 ALLOCATE( sprecip_1d (jpij) , frld_1d (jpij) , at_i_b (jpij) , & 162 & fbif_1d (jpij) , rdm icif_1d (jpij) , rdmsnif_1d (jpij) , &162 & fbif_1d (jpij) , rdm_ice_1d (jpij) , rdm_snw_1d (jpij) , & 163 163 & qlbbq_1d (jpij) , dmgwi_1d (jpij) , dvsbq_1d (jpij) , & 164 164 & dvbbq_1d (jpij) , dvlbq_1d (jpij) , dvnbq_1d (jpij) , & -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_clio.F90
r3402 r3517 175 175 IF( ierr3 > 0 ) CALL ctl_stop( 'STOP', 'sbc_blk_clio: unable to allocate arrays' ) 176 176 ! 177 sfx(:,:) = 0. 0_wp! salt flux; zero unless ice is present (computed in limsbc(_2).F90)177 sfx(:,:) = 0._wp ! salt flux; zero unless ice is present (computed in limsbc(_2).F90) 178 178 ! 179 179 ENDIF -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r3489 r3517 179 179 CALL fld_fill( sf, slf_i, cn_dir, 'sbc_blk_core', 'flux formulation for ocean surface boundary condition', 'namsbc_core' ) 180 180 ! 181 sfx(:,:) = 0. 0_wp! salt flux; zero unless ice is present (computed in limsbc(_2).F90)181 sfx(:,:) = 0._wp ! salt flux; zero unless ice is present (computed in limsbc(_2).F90) 182 182 ! 183 183 ENDIF -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r3488 r3517 779 779 ! Stress module can be negative when received (interpolation problem) 780 780 IF( llnewtau ) THEN 781 frcv(jpr_taum)%z3(:,:,1) = MAX( 0. 0e0, frcv(jpr_taum)%z3(:,:,1) )781 frcv(jpr_taum)%z3(:,:,1) = MAX( 0._wp, frcv(jpr_taum)%z3(:,:,1) ) 782 782 ENDIF 783 783 ENDIF … … 823 823 ! ! ========================= ! 824 824 ! 825 ! ! total freshwater fluxes over the ocean (emp , sfx)825 ! ! total freshwater fluxes over the ocean (emp) 826 826 SELECT CASE( TRIM( sn_rcv_emp%cldes ) ) ! evaporation - precipitation 827 827 CASE( 'conservative' ) … … 1261 1261 ! ! ========================= ! 1262 1262 CASE( 'oce only' ) 1263 qsr_tot(:,: ) = MAX( 0.0,frcv(jpr_qsroce)%z3(:,:,1))1263 qsr_tot(:,: ) = MAX( 0._wp , frcv(jpr_qsroce)%z3(:,:,1) ) 1264 1264 CASE( 'conservative' ) 1265 1265 qsr_tot(:,: ) = frcv(jpr_qsrmix)%z3(:,:,1) … … 1364 1364 ztmp3(:,:,1:jpl) = tn_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 1365 1365 CASE( 'no' ) 1366 ztmp3(:,:,:) = 0. 01366 ztmp3(:,:,:) = 0._wp 1367 1367 DO jl=1,jpl 1368 1368 ztmp3(:,:,1) = ztmp3(:,:,1) + tn_ice(:,:,jl) * a_i(:,:,jl) … … 1416 1416 ztmp4(:,:,1:jpl) = ht_s(:,:,1:jpl) * a_i(:,:,1:jpl) 1417 1417 CASE( 'no' ) 1418 ztmp3(:,:,:) = 0. 0 ; ztmp4(:,:,:) = 0.01418 ztmp3(:,:,:) = 0._wp ; ztmp4(:,:,:) = 0._wp 1419 1419 DO jl=1,jpl 1420 1420 ztmp3(:,:,1) = ztmp3(:,:,1) + ht_i(:,:,jl) * a_i(:,:,jl) -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r3402 r3517 10 10 !! - ! 2008-04 (G. Madec) sltyle and lim_ctl routine 11 11 !! 3.3 ! 2010-11 (G. Madec) ice-ocean stress always computed at each ocean time-step 12 !! 4.0! 2011-01 (A Porter) dynamical allocation12 !! 3.4 ! 2011-01 (A Porter) dynamical allocation 13 13 !!---------------------------------------------------------------------- 14 14 #if defined key_lim3 … … 170 170 171 171 ! ! intialisation to zero !!gm is it truly necessary ??? 172 d_a_i_thd (:,:,:) = 0. e0 ; d_a_i_trp (:,:,:) = 0.e0173 d_v_i_thd (:,:,:) = 0. e0 ; d_v_i_trp (:,:,:) = 0.e0174 d_e_i_thd (:,:,:,:) = 0. e0 ; d_e_i_trp (:,:,:,:) = 0.e0175 d_v_s_thd (:,:,:) = 0. e0 ; d_v_s_trp (:,:,:) = 0.e0176 d_e_s_thd (:,:,:,:) = 0. e0 ; d_e_s_trp (:,:,:,:) = 0.e0177 d_smv_i_thd(:,:,:) = 0. e0 ; d_smv_i_trp(:,:,:) = 0.e0178 d_oa_i_thd (:,:,:) = 0. e0 ; d_oa_i_trp (:,:,:) = 0.e0179 ! 180 fseqv (:,:) = 0. e0181 fsbri (:,:) = 0. e0 ; fsalt_res(:,:) = 0.e0182 fsalt_rpo(:,:) = 0. e0183 fhmec (:,:) = 0. e0 ; fhbri (:,:) = 0.e0184 fmmec (:,:) = 0. e0 ; fheat_res(:,:) = 0.e0185 fheat_rpo(:,:) = 0. e0 ; focea2D (:,:) = 0.e0186 fsup2D (:,:) = 0. e0172 d_a_i_thd (:,:,:) = 0._wp ; d_a_i_trp (:,:,:) = 0._wp 173 d_v_i_thd (:,:,:) = 0._wp ; d_v_i_trp (:,:,:) = 0._wp 174 d_e_i_thd (:,:,:,:) = 0._wp ; d_e_i_trp (:,:,:,:) = 0._wp 175 d_v_s_thd (:,:,:) = 0._wp ; d_v_s_trp (:,:,:) = 0._wp 176 d_e_s_thd (:,:,:,:) = 0._wp ; d_e_s_trp (:,:,:,:) = 0._wp 177 d_smv_i_thd(:,:,:) = 0._wp ; d_smv_i_trp(:,:,:) = 0._wp 178 d_oa_i_thd (:,:,:) = 0._wp ; d_oa_i_trp (:,:,:) = 0._wp 179 ! 180 fseqv (:,:) = 0._wp 181 fsbri (:,:) = 0._wp ; fsalt_res(:,:) = 0._wp 182 fsalt_rpo(:,:) = 0._wp 183 fhmec (:,:) = 0._wp ; fhbri (:,:) = 0._wp 184 fmmec (:,:) = 0._wp ; fheat_res(:,:) = 0._wp 185 fheat_rpo(:,:) = 0._wp ; focea2D (:,:) = 0._wp 186 fsup2D (:,:) = 0._wp 187 187 ! 188 diag_sni_gr(:,:) = 0. e0 ; diag_lat_gr(:,:) = 0.e0189 diag_bot_gr(:,:) = 0. e0 ; diag_dyn_gr(:,:) = 0.e0190 diag_bot_me(:,:) = 0. e0 ; diag_sur_me(:,:) = 0.e0188 diag_sni_gr(:,:) = 0._wp ; diag_lat_gr(:,:) = 0._wp 189 diag_bot_gr(:,:) = 0._wp ; diag_dyn_gr(:,:) = 0._wp 190 diag_bot_me(:,:) = 0._wp ; diag_sur_me(:,:) = 0._wp 191 191 ! dynamical invariants 192 delta_i(:,:) = 0. e0 ; divu_i(:,:) = 0.e0 ; shear_i(:,:) = 0.e0192 delta_i(:,:) = 0._wp ; divu_i(:,:) = 0._wp ; shear_i(:,:) = 0._wp 193 193 194 194 CALL lim_rst_opn( kt ) ! Open Ice restart file … … 196 196 IF( ln_nicep ) CALL lim_prt_state( jiindx, jjindx, 1, ' - Beginning the time step - ' ) ! control print 197 197 ! 198 IF( .NOT. lk_c1d ) THEN 199 ! Ice dynamics & transport (not in 1D case) 198 IF( .NOT. lk_c1d ) THEN ! Ice dynamics & transport (except in 1D case) 200 199 CALL lim_dyn( kt ) ! Ice dynamics ( rheology/dynamics ) 201 200 CALL lim_trp( kt ) ! Ice transport ( Advection/diffusion ) … … 210 209 CALL lim_var_bv ! bulk brine volume (diag) 211 210 CALL lim_thd( kt ) ! Ice thermodynamics 212 zcoef = rdt_ice / 86400.e0! Ice natural aging211 zcoef = rdt_ice /rday ! Ice natural aging 213 212 oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * zcoef 214 213 CALL lim_var_glo2eqv ! this CALL is maybe not necessary (Martin) … … 268 267 269 268 inb_altests = 10 270 inb_alp(:) = 0269 inb_alp(:) = 0 271 270 272 271 ! Alert if incompatible volume and concentration … … 277 276 DO jj = 1, jpj 278 277 DO ji = 1, jpi 279 IF( v_i(ji,jj,jl) /= 0. e0 .AND. a_i(ji,jj,jl) == 0.e0) THEN278 IF( v_i(ji,jj,jl) /= 0._wp .AND. a_i(ji,jj,jl) == 0._wp ) THEN 280 279 WRITE(numout,*) ' ALERTE 2 : Incompatible volume and concentration ' 281 280 WRITE(numout,*) ' at_i ', at_i(ji,jj) … … 297 296 DO jj = 1, jpj 298 297 DO ji = 1, jpi 299 IF( ht_i(ji,jj,jl) .GT. 50.0) THEN298 IF( ht_i(ji,jj,jl) > 50._wp ) THEN 300 299 CALL lim_prt_state( ji, jj, 2, ' ALERTE 3 : Very thick ice ' ) 301 300 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 … … 309 308 DO jj = 1, jpj 310 309 DO ji = 1, jpi 311 IF( MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) .GT.0.5 .AND. &312 & at_i(ji,jj) .GT. 0.e0) THEN310 IF( MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) > 0.5 .AND. & 311 & at_i(ji,jj) > 0._wp ) THEN 313 312 CALL lim_prt_state( ji, jj, 1, ' ALERTE 4 : Very fast ice ' ) 314 313 WRITE(numout,*) ' ice strength : ', strength(ji,jj) … … 332 331 DO jj = 1, jpj 333 332 DO ji = 1, jpi 334 IF( tms(ji,jj) .LE. 0.0 .AND. at_i(ji,jj) .GT. 0.e0) THEN333 IF( tms(ji,jj) <= 0._wp .AND. at_i(ji,jj) > 0._wp ) THEN 335 334 CALL lim_prt_state( ji, jj, 1, ' ALERTE 6 : Ice on continents ' ) 336 335 WRITE(numout,*) ' masks s, u, v : ', tms(ji,jj), tmu(ji,jj), tmv(ji,jj) … … 356 355 DO ji = 1, jpi 357 356 !!gm test twice sm_i ... ???? bug? 358 IF( ( ( ABS( sm_i(ji,jj,jl) ) .LT. 0.50) .OR.&359 ( ABS( sm_i(ji,jj,jl) ) .LT. 0.50) ) .AND. &360 ( a_i(ji,jj,jl) .GT. 0.e0) ) THEN357 IF( ( ( ABS( sm_i(ji,jj,jl) ) < 0.5 ) .OR. & 358 ( ABS( sm_i(ji,jj,jl) ) < 0.5 ) ) .AND. & 359 ( a_i(ji,jj,jl) > 0._wp ) ) THEN 361 360 ! CALL lim_prt_state(ji,jj,1, ' ALERTE 7 : Very fresh ice ' ) 362 361 ! WRITE(numout,*) ' sst : ', sst_m(ji,jj) … … 377 376 DO jj = 1, jpj 378 377 DO ji = 1, jpi 379 IF ( ( ( ABS( o_i(ji,jj,jl) ) .GT.rdt_ice ) .OR. &380 ( ABS( o_i(ji,jj,jl) ) .LT. 0.00) ) .AND. &381 ( a_i(ji,jj,jl) .GT. 0.0) ) THEN378 IF ( ( ( ABS( o_i(ji,jj,jl) ) > rdt_ice ) .OR. & 379 ( ABS( o_i(ji,jj,jl) ) < 0._wp) ) .AND. & 380 ( a_i(ji,jj,jl) > 0._wp ) ) THEN 382 381 CALL lim_prt_state( ji, jj, 1, ' ALERTE 9 : Wrong ice age ') 383 382 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 … … 412 411 DO jj = 1, jpj 413 412 DO ji = 1, jpi 414 IF( ABS( qns(ji,jj) ) .GT. 1500.0 .AND. ( at_i(ji,jj) .GT. 0.0 )) THEN413 IF( ABS( qns(ji,jj) ) > 1500._wp .AND. at_i(ji,jj) > 0._wp ) THEN 415 414 ! 416 415 WRITE(numout,*) ' ALERTE 8 : Very high non-solar heat flux' … … 450 449 DO ji = 1, jpi 451 450 ztmelts = -tmut * s_i(ji,jj,jk,jl) + rtt 452 IF( t_i(ji,jj,jk,jl) .GE. ztmelts .AND. v_i(ji,jj,jl) .GT.1.e-6 &453 & .AND. a_i(ji,jj,jl) .GT. 0.e0) THEN451 IF( t_i(ji,jj,jk,jl) >= ztmelts .AND. v_i(ji,jj,jl) > 1.e-6 & 452 & .AND. a_i(ji,jj,jl) > 0._wp ) THEN 454 453 WRITE(numout,*) ' ALERTE 10 : Very warm ice' 455 454 WRITE(numout,*) ' ji, jj, jk, jl : ', ji, jj, jk, jl -
branches/2012/dev_r3385_NOCS04_HAMF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r3396 r3517 82 82 END FUNCTION sbc_rnf_alloc 83 83 84 84 85 SUBROUTINE sbc_rnf( kt ) 85 86 !!---------------------------------------------------------------------- … … 95 96 !!---------------------------------------------------------------------- 96 97 INTEGER, INTENT(in) :: kt ! ocean time step 97 ! !98 ! 98 99 INTEGER :: ji, jj ! dummy loop indices 99 100 !!---------------------------------------------------------------------- … … 126 127 ! 127 128 IF( MOD( kt - 1, nn_fsbc ) == 0 ) THEN 128 rnf(:,:) = rn_rfact * ( sf_rnf(1)%fnow(:,:,1) ) 129 ! 130 rnf(:,:) = rn_rfact * ( sf_rnf(1)%fnow(:,:,1) ) ! updated runoff value at time step kt 129 131 ! 130 132 ! ! set temperature & salinity content of runoffs … … 248 250 INTEGER :: ji, jj, jk ! dummy loop indices 249 251 INTEGER :: ierror, inum ! temporary integer 250 ! !252 ! 251 253 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, ln_rnf_depth, ln_rnf_tem, ln_rnf_sal, & 252 254 & sn_rnf, sn_cnf , sn_s_rnf , sn_t_rnf , sn_dep_rnf, & 253 255 & ln_rnf_mouth , rn_hrnf , rn_avt_rnf, rn_rfact 254 256 !!---------------------------------------------------------------------- 255 257 ! 256 258 ! ! ============ 257 259 ! ! Namelist … … 269 271 REWIND ( numnam ) ! Read Namelist namsbc_rnf 270 272 READ ( numnam, namsbc_rnf ) 271 273 ! 272 274 ! ! Control print 273 275 IF(lwp) THEN … … 282 284 WRITE(numout,*) ' multiplicative factor for runoff rn_rfact = ', rn_rfact 283 285 ENDIF 284 286 ! 285 287 ! ! ================== 286 288 ! ! Type of runoff … … 391 393 nkrnf = 2 392 394 DO WHILE( nkrnf /= jpkm1 .AND. gdepw_0(nkrnf+1) < rn_hrnf ) ; nkrnf = nkrnf + 1 ; END DO 393 IF( ln_sco ) & 394 CALL ctl_warn( 'sbc_rnf: number of levels over which Kz is increased is computed for zco...' ) 395 IF( ln_sco ) CALL ctl_warn( 'sbc_rnf: number of levels over which Kz is increased is computed for zco...' ) 395 396 ENDIF 396 397 IF(lwp) WRITE(numout,*) … … 410 411 nkrnf = 0 411 412 ENDIF 412 413 ! 413 414 END SUBROUTINE sbc_rnf_init 414 415 … … 434 435 !! rnfmsk_z vertical structure 435 436 !!---------------------------------------------------------------------- 436 !437 437 INTEGER :: inum ! temporary integers 438 438 CHARACTER(len=140) :: cl_rnfile ! runoff file name … … 442 442 IF(lwp) WRITE(numout,*) 'rnf_mouth : river mouth mask' 443 443 IF(lwp) WRITE(numout,*) '~~~~~~~~~ ' 444 444 ! 445 445 cl_rnfile = TRIM( cn_dir )//TRIM( sn_cnf%clname ) 446 446 IF( .NOT. sn_cnf%ln_clim ) THEN ; WRITE(cl_rnfile, '(a,"_y",i4)' ) TRIM( cl_rnfile ), nyear ! add year 447 447 IF( sn_cnf%cltype == 'monthly' ) WRITE(cl_rnfile, '(a,"m",i2)' ) TRIM( cl_rnfile ), nmonth ! add month 448 448 ENDIF 449 449 ! 450 450 ! horizontal mask (read in NetCDF file) 451 451 CALL iom_open ( cl_rnfile, inum ) ! open file 452 452 CALL iom_get ( inum, jpdom_data, sn_cnf%clvar, rnfmsk ) ! read the river mouth array 453 453 CALL iom_close( inum ) ! close file 454 454 ! 455 455 IF( nclosea == 1 ) CALL clo_rnf( rnfmsk ) ! closed sea inflow set as ruver mouth 456 456 ! 457 457 rnfmsk_z(:) = 0._wp ! vertical structure 458 458 rnfmsk_z(1) = 1.0
Note: See TracChangeset
for help on using the changeset viewer.