110 USE yomhook
,ONLY : lhook, dr_hook
111 USE parkind1
,ONLY : jprb
130 REAL,
PARAMETER,
PRIVATE :: Z_=-HUGE(0.0)
133 REAL :: T_mnw_p_flk=Z_, T_mnw_n_flk=Z_
135 REAL :: T_snow_p_flk=Z_, T_snow_n_flk=Z_
137 REAL :: T_ice_p_flk=Z_, T_ice_n_flk=Z_
139 REAL :: T_wML_p_flk=Z_, T_wML_n_flk=Z_
141 REAL :: T_bot_p_flk=Z_, T_bot_n_flk=Z_
143 REAL :: T_B1_p_flk=Z_, T_B1_n_flk=Z_
147 REAL :: h_snow_p_flk=Z_, h_snow_n_flk=Z_
149 REAL :: h_ice_p_flk=Z_, h_ice_n_flk=Z_
151 REAL :: h_ML_p_flk=Z_, h_ML_n_flk=Z_
153 REAL :: H_B1_p_flk=Z_, H_B1_n_flk=Z_
157 REAL :: C_T_p_flk=Z_, C_T_n_flk=Z_
169 REAL :: Phi_T_pr0_flk=Z_
171 REAL :: Phi_I_pr0_flk=Z_
173 REAL :: Phi_I_pr1_flk=Z_
175 REAL :: Phi_S_pr0_flk=Z_
179 REAL :: Q_snow_flk=Z_
190 REAL :: I_snow_flk=Z_
200 REAL :: I_intm_0_h_flk=Z_
202 REAL :: I_intm_h_D_flk=Z_
204 REAL :: Q_star_flk=Z_
208 REAL :: u_star_w_flk=Z_
210 REAL :: w_star_sfc_flk=Z_
215 REAL :: dMsnowdt_flk=Z_
237 SUBROUTINE flake_radflux(depth_w,albedo,opticpar_water,opticpar_ice,opticpar_snow)
295 REAL,
INTENT(IN) :: &
308 REAL(KIND=JPRB) :: zhook_handle
314 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_RADFLUX',0,zhook_handle)
315 IF(h_ice_p_flk.GE.h_ice_min_flk)
THEN
316 IF(h_snow_p_flk.GE.h_snow_min_flk)
THEN
317 i_snow_flk = i_atm_flk*(1.-albedo)
319 DO i=1, opticpar_snow%nband_optic
320 i_bot_flk = i_bot_flk + &
321 opticpar_snow%frac_optic(i)*exp(-opticpar_snow%extincoef_optic(i)*h_snow_p_flk)
323 i_ice_flk = i_snow_flk*i_bot_flk
325 i_snow_flk = i_atm_flk
326 i_ice_flk = i_atm_flk*(1.-albedo)
329 DO i=1, opticpar_ice%nband_optic
330 i_bot_flk = i_bot_flk + &
331 opticpar_ice%frac_optic(i)*exp(-opticpar_ice%extincoef_optic(i)*h_ice_p_flk)
333 i_w_flk = i_ice_flk*i_bot_flk
335 i_snow_flk = i_atm_flk
336 i_ice_flk = i_atm_flk
337 i_w_flk = i_atm_flk*(1.-albedo)
340 IF(h_ml_p_flk.GE.h_ml_min_flk)
THEN
342 DO i=1, opticpar_water%nband_optic
343 i_bot_flk = i_bot_flk + &
344 opticpar_water%frac_optic(i)*exp(-opticpar_water%extincoef_optic(i)*h_ml_p_flk)
346 i_h_flk = i_w_flk*i_bot_flk
352 DO i=1, opticpar_water%nband_optic
353 i_bot_flk = i_bot_flk + &
354 opticpar_water%frac_optic(i)*exp(-opticpar_water%extincoef_optic(i)*depth_w)
356 i_bot_flk = i_w_flk*i_bot_flk
358 IF(h_ml_p_flk.GE.h_ml_min_flk)
THEN
360 DO i=1, opticpar_water%nband_optic
361 i_intm_0_h_flk = i_intm_0_h_flk + &
362 opticpar_water%frac_optic(i)/opticpar_water%extincoef_optic(i)* &
363 (1. - exp(-opticpar_water%extincoef_optic(i)*h_ml_p_flk))
365 i_intm_0_h_flk = i_w_flk*i_intm_0_h_flk/h_ml_p_flk
367 i_intm_0_h_flk = i_h_flk
370 IF(h_ml_p_flk.LE.depth_w-h_ml_min_flk)
THEN
372 DO i=1, opticpar_water%nband_optic
373 i_intm_h_d_flk = i_intm_h_d_flk + &
374 opticpar_water%frac_optic(i)/opticpar_water%extincoef_optic(i)* &
375 ( exp(-opticpar_water%extincoef_optic(i)*h_ml_p_flk) &
376 - exp(-opticpar_water%extincoef_optic(i)*depth_w) )
378 i_intm_h_d_flk = i_w_flk*i_intm_h_d_flk/(depth_w-h_ml_p_flk)
380 i_intm_h_d_flk = i_h_flk
382 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_RADFLUX',1,zhook_handle)
400 extincoef_water_typ, &
401 del_time, t_sfc_p, t_sfc_n )
464 REAL,
INTENT(IN) :: &
470 extincoef_water_typ , &
478 REAL,
INTENT(OUT) :: &
520 REAL(KIND=JPRB) :: zhook_handle
538 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_DRIVER',0,zhook_handle)
548 t_snow_n_flk = t_snow_p_flk
549 t_ice_n_flk = t_ice_p_flk
550 t_wml_n_flk = t_wml_p_flk
551 t_mnw_n_flk = t_mnw_p_flk
552 t_bot_n_flk = t_bot_p_flk
553 t_b1_n_flk = t_b1_p_flk
554 h_snow_n_flk = h_snow_p_flk
555 h_ice_n_flk = h_ice_p_flk
556 h_ml_n_flk = h_ml_p_flk
557 h_b1_n_flk = h_b1_p_flk
558 c_t_n_flk = c_t_p_flk
578 IF(h_ice_p_flk.GE.h_ice_min_flk)
THEN
579 IF(h_ml_p_flk.LE.h_ml_min_flk)
THEN
580 q_w_flk = -tpl_kappa_w*(t_bot_p_flk-t_wml_p_flk)/depth_w
581 phi_t_pr0_flk = phi_t_pr0_1*c_t_p_flk-phi_t_pr0_2
582 q_w_flk = q_w_flk*max(phi_t_pr0_flk, 1.)
589 q_star_flk = q_w_flk + i_w_flk + i_h_flk - 2.*i_intm_0_h_flk
592 IF(lflk_botsed_use)
THEN
593 q_bot_flk = -tpl_kappa_w*(t_b1_p_flk-t_bot_p_flk)/max(h_b1_p_flk, h_b1_min_flk)*phi_b1_pr0
624 l_ice_create = .false.
625 l_ice_meltabove = .false.
627 ice_exist:
IF(h_ice_p_flk.LT.h_ice_min_flk)
THEN
629 l_ice_create = t_wml_p_flk.LE.(tpl_t_f+c_small_flk).AND.q_w_flk.LT.0.
630 IF(l_ice_create)
THEN
631 d_h_ice_dt = -q_w_flk/tpl_rho_i/tpl_l_f
632 h_ice_n_flk = h_ice_p_flk + d_h_ice_dt*del_time
633 t_ice_n_flk = tpl_t_f + h_ice_n_flk*q_w_flk/tpl_kappa_i/phi_i_pr0_lin
634 d_h_snow_dt = dmsnowdt_flk/tpl_rho_s_min
635 h_snow_n_flk = h_snow_p_flk + d_h_snow_dt*del_time
636 phi_i_pr1_flk = phi_i_pr1_lin &
637 + phi_i_ast_mr*min(1., h_ice_n_flk/h_ice_max)
639 * h_snow_n_flk/max(h_ice_n_flk, h_ice_min_flk)
640 t_snow_n_flk = t_ice_n_flk + r_h_icesnow*(t_ice_n_flk-tpl_t_f)
642 h_ice_n_flk = h_ice_p_flk
643 h_snow_n_flk = h_snow_p_flk
644 t_ice_n_flk = t_ice_p_flk
645 t_snow_n_flk = t_snow_p_flk
650 l_snow_exists = h_snow_p_flk.GE.h_snow_min_flk
652 melting:
IF(t_snow_p_flk.GE.(tpl_t_f-c_small_flk))
THEN
654 IF(l_snow_exists)
THEN
655 flk_str_1 = q_snow_flk + i_snow_flk - i_ice_flk
656 IF(flk_str_1.GE.0.)
THEN
657 l_ice_meltabove = .true.
659 d_h_ice_dt = -(i_ice_flk - i_w_flk - q_w_flk)/tpl_l_f/tpl_rho_i
662 flk_str_1 = q_ice_flk + i_ice_flk - i_w_flk - q_w_flk
663 IF(flk_str_1.GE.0.)
THEN
664 l_ice_meltabove = .true.
665 d_h_ice_dt = -flk_str_1/tpl_l_f/tpl_rho_i
666 d_h_snow_dt = dmsnowdt_flk/tpl_rho_s_min
669 IF(l_ice_meltabove)
THEN
670 h_ice_n_flk = h_ice_p_flk + d_h_ice_dt *del_time
671 h_snow_n_flk = h_snow_p_flk + d_h_snow_dt*del_time
672 t_ice_n_flk = tpl_t_f
673 t_snow_n_flk = tpl_t_f
678 no_melting:
IF(.NOT.l_ice_meltabove)
THEN
681 IF(d_h_snow_dt.LT.tpl_rho_s_max)
THEN
682 flk_str_1 = h_snow_p_flk*tpl_gamma_rho_s/tpl_rho_w_r
683 flk_str_1 = flk_str_1/(1.-flk_str_1)
687 d_h_snow_dt = dmsnowdt_flk/d_h_snow_dt/(1.+flk_str_1)
688 h_snow_n_flk = h_snow_p_flk + d_h_snow_dt*del_time
690 phi_i_pr0_flk = h_ice_p_flk/h_ice_max
691 c_i_flk = c_i_lin - c_i_mr*(1.+phi_i_ast_mr)*phi_i_pr0_flk
692 phi_i_pr1_flk = phi_i_pr1_lin + phi_i_ast_mr*phi_i_pr0_flk
693 phi_i_pr0_flk = phi_i_pr0_lin - phi_i_pr0_flk
695 h_ice_threshold = max(1., 2.*c_i_flk*tpl_c_i*(tpl_t_f-t_ice_p_flk)/tpl_l_f)
696 h_ice_threshold = phi_i_pr0_flk/c_i_flk*tpl_kappa_i/tpl_rho_i/tpl_c_i*h_ice_threshold
697 h_ice_threshold = sqrt(h_ice_threshold*del_time)
698 h_ice_threshold = min(0.9*h_ice_max, max(h_ice_threshold, h_ice_min_flk))
701 IF(h_ice_p_flk.LT.h_ice_threshold)
THEN
703 IF(l_snow_exists)
THEN
704 flk_str_1 = q_snow_flk + i_snow_flk - i_w_flk
706 flk_str_1 = q_ice_flk + i_ice_flk - i_w_flk
708 d_h_ice_dt = -(flk_str_1-q_w_flk)/tpl_l_f/tpl_rho_i
709 h_ice_n_flk = h_ice_p_flk + d_h_ice_dt *del_time
710 t_ice_n_flk = tpl_t_f + h_ice_n_flk*flk_str_1/tpl_kappa_i/phi_i_pr0_flk
714 d_h_ice_dt = tpl_kappa_i*(tpl_t_f-t_ice_p_flk)/h_ice_p_flk*phi_i_pr0_flk
715 d_h_ice_dt = (q_w_flk+d_h_ice_dt)/tpl_l_f/tpl_rho_i
716 h_ice_n_flk = h_ice_p_flk + d_h_ice_dt*del_time
718 r_ti_icesnow = tpl_c_i*(tpl_t_f-t_ice_p_flk)/tpl_l_f
719 r_tstar_icesnow = 1. - c_i_flk
720 IF(l_snow_exists)
THEN
722 * h_snow_p_flk/h_ice_p_flk
733 r_tstar_icesnow = r_tstar_icesnow*r_ti_icesnow
739 flk_str_2 = q_snow_flk+i_snow_flk-i_w_flk
740 flk_str_1 = c_i_flk*h_ice_p_flk + (1.+c_s_lin*r_h_icesnow)*r_rho_c_icesnow*h_snow_p_flk
741 d_t_ice_dt = -(1.-2.*c_s_lin)*r_h_icesnow*(tpl_t_f-t_ice_p_flk) &
742 * tpl_c_s*dmsnowdt_flk
744 r_tstar_icesnow = r_tstar_icesnow*r_ti_icesnow
745 flk_str_2 = q_ice_flk+i_ice_flk-i_w_flk
746 flk_str_1 = c_i_flk*h_ice_p_flk
749 d_t_ice_dt = d_t_ice_dt + tpl_kappa_i*(tpl_t_f-t_ice_p_flk)/h_ice_p_flk*phi_i_pr0_flk &
750 * (1.-r_tstar_icesnow)
751 d_t_ice_dt = d_t_ice_dt - r_tstar_icesnow*q_w_flk
752 d_t_ice_dt = d_t_ice_dt + flk_str_2
753 d_t_ice_dt = d_t_ice_dt/tpl_rho_i/tpl_c_i
754 d_t_ice_dt = d_t_ice_dt/flk_str_1
755 t_ice_n_flk = t_ice_p_flk + d_t_ice_dt*del_time
758 phi_i_pr1_flk = min(1., h_ice_n_flk/h_ice_max)
759 phi_i_pr1_flk = phi_i_pr1_lin + phi_i_ast_mr*phi_i_pr1_flk
761 *h_snow_n_flk/max(h_ice_n_flk, h_ice_min_flk)
762 t_snow_n_flk = t_ice_n_flk + r_h_icesnow*(t_ice_n_flk-tpl_t_f)
769 h_ice_n_flk = min(h_ice_n_flk, h_ice_max)
772 t_snow_n_flk = min(t_snow_n_flk, tpl_t_f)
773 t_ice_n_flk = min(t_ice_n_flk, tpl_t_f)
780 t_snow_n_flk = max(t_snow_n_flk, 200.15)
781 t_ice_n_flk = max(t_ice_n_flk, 200.15)
785 IF(h_ice_n_flk.LT.h_ice_min_flk)
THEN
787 t_ice_n_flk = tpl_t_f
789 t_snow_n_flk = tpl_t_f
790 l_ice_create = .false.
791 ELSE IF(h_snow_n_flk.LT.h_snow_min_flk)
THEN
793 t_snow_n_flk = t_ice_n_flk
801 IF(l_ice_create) q_w_flk = 0.
802 d_t_mnw_dt = (q_w_flk - q_bot_flk + i_w_flk - i_bot_flk)/tpl_rho_w_r/tpl_c_w/depth_w
803 t_mnw_n_flk = t_mnw_p_flk + d_t_mnw_dt*del_time
804 t_mnw_n_flk = max(t_mnw_n_flk, tpl_t_f)
814 htc_water:
IF(h_ice_n_flk.GE.h_ice_min_flk)
THEN
816 t_mnw_n_flk = min(t_mnw_n_flk, tpl_t_r)
817 t_wml_n_flk = tpl_t_f
819 IF(l_ice_create)
THEN
820 IF(h_ml_p_flk.GE.depth_w-h_ml_min_flk)
THEN
824 h_ml_n_flk = h_ml_p_flk
825 c_t_n_flk = c_t_p_flk
827 t_bot_n_flk = t_wml_n_flk - (t_wml_n_flk-t_mnw_n_flk)/c_t_n_flk/(1.-h_ml_n_flk/depth_w)
830 ELSE IF(t_bot_p_flk.LT.tpl_t_r)
THEN
831 h_ml_n_flk = h_ml_p_flk
832 c_t_n_flk = c_t_p_flk
833 t_bot_n_flk = t_wml_n_flk - (t_wml_n_flk-t_mnw_n_flk)/c_t_n_flk/(1.-h_ml_n_flk/depth_w)
837 t_bot_n_flk = tpl_t_r
838 IF(h_ml_p_flk.GE.c_small_flk)
THEN
839 c_t_n_flk = c_t_p_flk
840 h_ml_n_flk = depth_w*(1.-(t_wml_n_flk-t_mnw_n_flk)/(t_wml_n_flk-t_bot_n_flk)/c_t_n_flk)
841 h_ml_n_flk = max(h_ml_n_flk, 0.)
843 h_ml_n_flk = h_ml_p_flk
844 c_t_n_flk = (t_wml_n_flk-t_mnw_n_flk)/(t_wml_n_flk-t_bot_n_flk)
845 c_t_n_flk = min(c_t_max, max(c_t_n_flk, c_t_min))
849 t_bot_n_flk = min(t_bot_n_flk, tpl_t_r)
854 flk_str_1 =
flake_buoypar(t_wml_p_flk)*q_star_flk/tpl_rho_w_r/tpl_c_w
855 IF(flk_str_1.LT.0.)
THEN
856 w_star_sfc_flk = (-flk_str_1*h_ml_p_flk)**(1./3.)
867 conv_equil_h_scale = -q_w_flk/max(i_w_flk, c_small_flk)
868 IF(conv_equil_h_scale.GT.0. .AND. conv_equil_h_scale.LT.1. &
869 .AND. t_wml_p_flk.GT.tpl_t_r)
THEN
870 conv_equil_h_scale = sqrt(6.*conv_equil_h_scale) &
871 + 2.*conv_equil_h_scale/(1.-conv_equil_h_scale)
872 conv_equil_h_scale = min(depth_w, conv_equil_h_scale/extincoef_water_typ)
874 conv_equil_h_scale = 0.
878 n_t_mean =
flake_buoypar(0.5*(t_wml_p_flk+t_bot_p_flk))*max(0.,(t_wml_p_flk-t_bot_p_flk))
879 IF(h_ml_p_flk.LE.depth_w-h_ml_min_flk)
THEN
880 n_t_mean = sqrt(n_t_mean/(depth_w-h_ml_p_flk))
886 d_c_t_dt = max(w_star_sfc_flk, u_star_w_flk, u_star_min_flk)**2
887 d_c_t_dt = n_t_mean*(depth_w-h_ml_p_flk)**2 &
889 d_c_t_dt = (c_t_max-c_t_min)/max(d_c_t_dt, c_small_flk)
891 d_c_t_dt = min(d_c_t_dt,0.01/del_time)
896 c_tt_flk = c_tt_1*c_t_p_flk-c_tt_2
897 c_q_flk = 2.*c_tt_flk/c_t_p_flk
899 mixing_regime:
IF(flk_str_1.LT.0.)
THEN
901 c_t_n_flk = c_t_p_flk + d_c_t_dt*del_time
902 c_t_n_flk = min(c_t_max, max(c_t_n_flk, c_t_min))
903 d_c_t_dt = (c_t_n_flk-c_t_p_flk)/del_time
905 IF(h_ml_p_flk.LE.depth_w-h_ml_min_flk)
THEN
906 IF(h_ml_p_flk.LE.h_ml_min_flk)
THEN
907 d_h_ml_dt = c_cbl_1/c_cbl_2*max(w_star_sfc_flk, c_small_flk)
916 r_h_icesnow = depth_w/h_ml_p_flk
917 r_rho_c_icesnow = r_h_icesnow-1.
918 r_ti_icesnow = c_t_p_flk/c_tt_flk
919 r_tstar_icesnow = (r_ti_icesnow/2.-1.)*r_rho_c_icesnow + 1.
920 d_h_ml_dt = -q_star_flk*(r_tstar_icesnow*(1.+c_cbl_1)-1.) - q_bot_flk
921 d_h_ml_dt = d_h_ml_dt/tpl_rho_w_r/tpl_c_w
922 flk_str_2 = (depth_w-h_ml_p_flk)*(t_wml_p_flk-t_bot_p_flk)*c_tt_2/c_tt_flk*d_c_t_dt
923 d_h_ml_dt = d_h_ml_dt + flk_str_2
924 flk_str_2 = i_bot_flk + (r_ti_icesnow-1.)*i_h_flk - r_ti_icesnow*i_intm_h_d_flk
925 flk_str_2 = flk_str_2 + (r_ti_icesnow-2.)*r_rho_c_icesnow*(i_h_flk-i_intm_0_h_flk)
926 flk_str_2 = flk_str_2/tpl_rho_w_r/tpl_c_w
927 d_h_ml_dt = d_h_ml_dt + flk_str_2
928 flk_str_2 = -c_cbl_2*r_tstar_icesnow*q_star_flk/tpl_rho_w_r/tpl_c_w/max(w_star_sfc_flk, c_small_flk)
929 flk_str_2 = flk_str_2 + c_t_p_flk*(t_wml_p_flk-t_bot_p_flk)
930 d_h_ml_dt = d_h_ml_dt/flk_str_2
952 d_h_ml_dt = max(d_h_ml_dt, c_small_flk)
953 h_ml_n_flk = h_ml_p_flk + d_h_ml_dt*del_time
954 h_ml_n_flk = max(h_ml_min_flk, min(h_ml_n_flk, depth_w))
961 d_h_ml_dt = max(u_star_w_flk, u_star_min_flk)
962 zm_h_scale = (abs(par_coriolis)/c_sbl_zm_n + n_t_mean/c_sbl_zm_i)*d_h_ml_dt**2
963 zm_h_scale = zm_h_scale + flk_str_1/c_sbl_zm_s
964 zm_h_scale = max(zm_h_scale, c_small_flk)
965 zm_h_scale = d_h_ml_dt**3/zm_h_scale
966 zm_h_scale = max(h_ml_min_flk, min(zm_h_scale, h_ml_max_flk))
967 zm_h_scale = max(zm_h_scale, conv_equil_h_scale)
977 d_h_ml_dt = c_relax_h*d_h_ml_dt/zm_h_scale*del_time
978 h_ml_n_flk = zm_h_scale - (zm_h_scale-h_ml_p_flk)*exp(-d_h_ml_dt)
979 h_ml_n_flk = max(h_ml_min_flk, min(h_ml_n_flk, depth_w))
980 d_h_ml_dt = (h_ml_n_flk-h_ml_p_flk)/del_time
982 IF(h_ml_n_flk.LE.h_ml_p_flk) &
984 c_t_n_flk = c_t_p_flk + d_c_t_dt*del_time
985 c_t_n_flk = min(c_t_max, max(c_t_n_flk, c_t_min))
986 d_c_t_dt = (c_t_n_flk-c_t_p_flk)/del_time
995 IF(h_ml_n_flk.LE.depth_w-h_ml_min_flk)
THEN
997 IF(h_ml_n_flk.GT.h_ml_p_flk)
THEN
998 r_h_icesnow = h_ml_p_flk/depth_w
999 r_rho_c_icesnow = 1.-r_h_icesnow
1000 r_ti_icesnow = 0.5*c_t_p_flk*r_rho_c_icesnow+c_tt_flk*(2.*r_h_icesnow-1.)
1001 r_tstar_icesnow = (0.5+c_tt_flk-c_q_flk)/r_ti_icesnow
1002 r_ti_icesnow = (1.-c_t_p_flk*r_rho_c_icesnow)/r_ti_icesnow
1004 d_t_bot_dt = (q_w_flk-q_bot_flk+i_w_flk-i_bot_flk)/tpl_rho_w_r/tpl_c_w
1005 d_t_bot_dt = d_t_bot_dt - c_t_p_flk*(t_wml_p_flk-t_bot_p_flk)*d_h_ml_dt
1006 d_t_bot_dt = d_t_bot_dt*r_tstar_icesnow/depth_w
1008 flk_str_2 = i_intm_h_d_flk - (1.-c_q_flk)*i_h_flk - c_q_flk*i_bot_flk
1009 flk_str_2 = flk_str_2*r_ti_icesnow/(depth_w-h_ml_p_flk)/tpl_rho_w_r/tpl_c_w
1010 d_t_bot_dt = d_t_bot_dt + flk_str_2
1012 flk_str_2 = (1.-c_tt_2*r_ti_icesnow)/c_t_p_flk
1013 flk_str_2 = flk_str_2*(t_wml_p_flk-t_bot_p_flk)*d_c_t_dt
1014 d_t_bot_dt = d_t_bot_dt + flk_str_2
1020 t_bot_n_flk = t_bot_p_flk + d_t_bot_dt*del_time
1021 t_bot_n_flk = max(t_bot_n_flk, tpl_t_f)
1022 flk_str_2 = (t_bot_n_flk-tpl_t_r)*
flake_buoypar(t_mnw_n_flk)
1023 IF(flk_str_2.LT.0.) t_bot_n_flk = tpl_t_r
1024 t_wml_n_flk = c_t_n_flk*(1.-h_ml_n_flk/depth_w)
1025 t_wml_n_flk = (t_mnw_n_flk-t_bot_n_flk*t_wml_n_flk)/(1.-t_wml_n_flk)
1026 t_wml_n_flk = max(t_wml_n_flk, tpl_t_f)
1030 h_ml_n_flk = depth_w
1031 t_wml_n_flk = t_mnw_n_flk
1032 t_bot_n_flk = t_mnw_n_flk
1048 sediment:
IF(lflk_botsed_use)
THEN
1050 IF(h_b1_p_flk.GE.depth_bs-h_b1_min_flk)
THEN
1052 t_b1_p_flk = t_bot_p_flk
1055 flk_str_1 = 2.*phi_b1_pr0/(1.-c_b1)*tpl_kappa_w/tpl_rho_w_r/tpl_c_w*del_time
1056 h_ice_threshold = sqrt(flk_str_1)
1057 h_ice_threshold = min(0.9*depth_bs, h_ice_threshold)
1058 flk_str_2 = c_b2/(1.-c_b2)*(t_bs-t_b1_p_flk)/(depth_bs-h_b1_p_flk)
1060 IF(h_b1_p_flk.LT.h_ice_threshold)
THEN
1061 h_b1_n_flk = sqrt(h_b1_p_flk**2+flk_str_1)
1062 d_h_b1_dt = (h_b1_n_flk-h_b1_p_flk)/del_time
1064 flk_str_1 = (q_bot_flk+i_bot_flk)/h_b1_p_flk/tpl_rho_w_r/tpl_c_w
1065 flk_str_1 = flk_str_1 - (1.-c_b1)*(t_bot_n_flk-t_bot_p_flk)/del_time
1066 d_h_b1_dt = (1.-c_b1)*(t_bot_p_flk-t_b1_p_flk)/h_b1_p_flk + c_b1*flk_str_2
1067 d_h_b1_dt = flk_str_1/d_h_b1_dt
1068 h_b1_n_flk = h_b1_p_flk + d_h_b1_dt*del_time
1070 d_t_b1_dt = flk_str_2*d_h_b1_dt
1071 t_b1_n_flk = t_b1_p_flk + d_t_b1_dt*del_time
1079 l_snow_exists = h_b1_n_flk.GE.depth_bs-h_b1_min_flk &
1080 .OR. h_b1_n_flk.LT.h_b1_min_flk &
1081 .OR.(t_bot_n_flk-t_b1_n_flk)*(t_bs-t_b1_n_flk).LE.0.
1082 IF(l_snow_exists)
THEN
1083 h_b1_n_flk = depth_bs
1089 h_b1_n_flk = rflk_depth_bs_ref
1090 t_b1_n_flk = tpl_t_r
1100 flk_str_2 = (t_wml_n_flk-t_bot_n_flk)*
flake_buoypar(t_mnw_n_flk)
1101 IF(flk_str_2.LT.0.)
THEN
1103 h_ml_n_flk = depth_w
1104 t_wml_n_flk = t_mnw_n_flk
1105 t_bot_n_flk = t_mnw_n_flk
1117 IF(h_snow_n_flk.GE.h_snow_min_flk)
THEN
1118 t_sfc_n = t_snow_n_flk
1119 ELSE IF(h_ice_n_flk.GE.h_ice_min_flk)
THEN
1120 t_sfc_n = t_ice_n_flk
1122 t_sfc_n = t_wml_n_flk
1124 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_DRIVER',1,zhook_handle)
1194 REAL ,
INTENT(IN) :: &
1200 REAL(KIND=JPRB) :: zhook_handle
1208 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_BUOYPAR',0,zhook_handle)
1210 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_BUOYPAR',1,zhook_handle)
1280 REAL ,
INTENT(IN) :: &
1286 REAL(KIND=JPRB) :: zhook_handle
1295 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_SNOWDENSITY',0,zhook_handle)
1296 flake_snowdensity = max( c_small_flk, (1. - h_snow*tpl_gamma_rho_s/tpl_rho_w_r) )
1298 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_SNOWDENSITY',1,zhook_handle)
1367 REAL ,
INTENT(IN) :: &
1373 REAL(KIND=JPRB) :: zhook_handle
1381 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_SNOWHEATCONDUCT',0,zhook_handle)
1385 IF (lhook) CALL dr_hook(
'FLAKE:FLAKE_SNOWHEATCONDUCT',1,zhook_handle)
subroutine flake_radflux(depth_w, albedo, opticpar_water, opticpar_ice, opticpar_snow)
real function flake_snowdensity(h_snow)
real function flake_buoypar(T_water)
real function flake_snowheatconduct(h_snow)
subroutine flake_driver(depth_w, depth_bs, T_bs, par_Coriolis, extincoef_water_typ, del_time, T_sfc_p, T_sfc_n)