25 & neutral, stable_option,new_mo_option,rich_crit, zeta_trans, &
26 & ni, nj, nk, z, u_star, b_star, k_m, k_h, ier)
28 real(kind=fms_mo_kind_),
intent(in) :: vonkarm
29 real(kind=fms_mo_kind_),
intent(in) :: ustar_min
30 logical,
intent(in) :: neutral
31 integer,
intent(in) :: stable_option
32 logical,
intent(in) :: new_mo_option
33 real(kind=fms_mo_kind_),
intent(in) :: rich_crit, zeta_trans
34 integer,
intent(in) :: ni, nj, nk
35 real(kind=fms_mo_kind_),
intent(in),
dimension(ni, nj, nk) :: z
36 real(kind=fms_mo_kind_),
intent(in),
dimension(ni, nj) :: u_star, b_star
37 real(kind=fms_mo_kind_),
intent(out),
dimension(ni, nj, nk) :: k_m, k_h
38 integer,
intent(out) :: ier
40 real(kind=fms_mo_kind_),
dimension(ni, nj) :: phi_m, phi_h, zeta, uss
42 logical,
dimension(ni) :: mask
47 uss = max(u_star, ustar_min)
51 k_m(:,:,k) = vonkarm *uss*z(:,:,k)
52 k_h(:,:,k) = k_m(:,:,k)
56 zeta = - vonkarm * b_star*z(:,:,k)/(uss*uss)
58 call monin_obukhov_derivative_m(stable_option, rich_crit, zeta_trans, &
59 & ni, phi_m(:,j), zeta(:,j), mask, ier)
60 call monin_obukhov_derivative_t(stable_option, new_mo_option,rich_crit, zeta_trans, &
61 & ni, phi_h(:,j), zeta(:,j), mask, ier)
63 k_m(:,:,k) = vonkarm * uss*z(:,:,k)/phi_m
64 k_h(:,:,k) = vonkarm * uss*z(:,:,k)/phi_h
72 & error, zeta_min, max_iter, small, &
73 & neutral, stable_option, new_mo_option, rich_crit, zeta_trans,&
74 & drag_min_heat, drag_min_moist, drag_min_mom, &
75 & n, pt, pt0, z, z0, zt, zq, speed, drag_m, drag_t, &
76 & drag_q, u_star, b_star, lavail, avail, ier)
78 real(kind=fms_mo_kind_),
intent(in) :: grav
79 real(kind=fms_mo_kind_),
intent(in) :: vonkarm
80 real(kind=fms_mo_kind_),
intent(in) :: error
81 real(kind=fms_mo_kind_),
intent(in) :: zeta_min
82 integer,
intent(in) :: max_iter
83 real(kind=fms_mo_kind_),
intent(in) :: small
84 logical,
intent(in) :: neutral
85 integer,
intent(in) :: stable_option
86 logical,
intent(in) :: new_mo_option
87 real(kind=fms_mo_kind_),
intent(in) :: rich_crit, zeta_trans
88 real(kind=fms_mo_kind_),
intent(in) :: drag_min_heat, drag_min_moist, drag_min_mom
89 integer,
intent(in) :: n
90 real(kind=fms_mo_kind_),
intent(in),
dimension(n) :: pt, pt0, z, z0, zt, zq, speed
91 real(kind=fms_mo_kind_),
intent(inout),
dimension(n) :: drag_m, drag_t, drag_q, u_star, b_star
92 logical,
intent(in) :: lavail
93 logical,
intent(in),
dimension(n) :: avail
94 integer,
intent(out) :: ier
96 real(kind=fms_mo_kind_),
dimension(n) :: rich, fm, ft, fq, zz
97 logical,
dimension(n) :: mask, mask_1, mask_2
98 real(kind=fms_mo_kind_),
dimension(n) :: delta_b
99 real(kind=fms_mo_kind_) :: r_crit, sqrt_drag_min_heat
100 real(kind=fms_mo_kind_) :: sqrt_drag_min_moist, sqrt_drag_min_mom
101 real(kind=fms_mo_kind_) :: us, bs, qs
103 integer,
parameter :: lkind = fms_mo_kind_
106 r_crit = 0.95_lkind*rich_crit
108 sqrt_drag_min_heat = 0.0_lkind
109 if(drag_min_heat.ne.0.0_lkind) sqrt_drag_min_heat = sqrt(drag_min_heat)
110 sqrt_drag_min_moist = 0.0_lkind
111 if(drag_min_moist.ne.0.0_lkind) sqrt_drag_min_moist = sqrt(drag_min_moist)
112 sqrt_drag_min_mom = 0.0_lkind
113 if(drag_min_mom.ne.0.0_lkind) sqrt_drag_min_mom = sqrt(drag_min_mom)
116 if(lavail) mask = avail
119 delta_b = grav*(pt0 - pt)/pt0
120 rich = - z*delta_b/(speed*speed + small)
130 fm(i) = log(zz(i)/z0(i))
131 ft(i) = log(zz(i)/zt(i))
132 fq(i) = log(zz(i)/zq(i))
139 u_star(i) = us*speed(i)
140 b_star(i) = bs*delta_b(i)
146 mask_1 = mask .and. rich < r_crit
147 mask_2 = mask .and. rich >= r_crit
151 drag_m(i) = drag_min_mom
152 drag_t(i) = drag_min_heat
153 drag_q(i) = drag_min_moist
154 us = sqrt_drag_min_mom
155 bs = sqrt_drag_min_heat
156 u_star(i) = us*speed(i)
157 b_star(i) = bs*delta_b(i)
161 call monin_obukhov_solve_zeta (error, zeta_min, max_iter, small, &
162 & stable_option, new_mo_option, rich_crit, zeta_trans, &
163 & n, rich, zz, z0, zt, zq, fm, ft, fq, mask_1, ier)
167 us = max(vonkarm/fm(i), sqrt_drag_min_mom)
168 bs = max(vonkarm/ft(i), sqrt_drag_min_heat)
169 qs = max(vonkarm/fq(i), sqrt_drag_min_moist)
173 u_star(i) = us*speed(i)
174 b_star(i) = bs*delta_b(i)
184 & stable_option, new_mo_option, rich_crit, zeta_trans, & !miz
185 & n, rich, z, z0, zt, zq, f_m, f_t, f_q, mask, ier)
187 real(kind=fms_mo_kind_),
intent(in) :: error
188 real(kind=fms_mo_kind_),
intent(in) :: zeta_min
189 integer,
intent(in) :: max_iter
190 real(kind=fms_mo_kind_),
intent(in) :: small
191 integer,
intent(in) :: stable_option
192 logical,
intent(in) :: new_mo_option
193 real(kind=fms_mo_kind_),
intent(in) :: rich_crit, zeta_trans
194 integer,
intent(in) :: n
195 real(kind=fms_mo_kind_),
intent(in),
dimension(n) :: rich, z, z0, zt, zq
196 logical,
intent(in),
dimension(n) :: mask
197 real(kind=fms_mo_kind_),
intent(out),
dimension(n) :: f_m, f_t, f_q
198 integer,
intent(out) :: ier
200 real(kind=fms_mo_kind_) :: max_cor
202 real(kind=fms_mo_kind_),
dimension(n) :: &
203 d_rich, rich_1, correction, corr, z_z0, z_zt, z_zq, &
204 ln_z_z0, ln_z_zt, ln_z_zq, zeta, &
205 phi_m, phi_m_0, phi_t, phi_t_0, rzeta, &
206 zeta_0, zeta_t, zeta_q, df_m, df_t
207 logical,
dimension(n) :: mask_1
208 integer,
parameter :: lkind = fms_mo_kind_
226 zeta = rich*ln_z_z0*ln_z_z0/ln_z_zt
229 where (mask_1 .and. rich >= 0.0_lkind)
230 zeta = zeta/(1.0_lkind - rich/rich_crit)
233 iter_loop:
do iter = 1, max_iter
235 where (mask_1 .and. abs(zeta).lt.zeta_min)
248 rzeta = 1.0_lkind/zeta
254 call monin_obukhov_derivative_m(stable_option, rich_crit, zeta_trans, &
255 & n, phi_m , zeta , mask_1, ier)
256 call monin_obukhov_derivative_m(stable_option, rich_crit, zeta_trans, &
257 & n, phi_m_0, zeta_0, mask_1, ier)
258 call monin_obukhov_derivative_t(stable_option, new_mo_option,rich_crit, zeta_trans, &
259 & n, phi_t , zeta , mask_1, ier)
260 call monin_obukhov_derivative_t(stable_option, new_mo_option,rich_crit, zeta_trans, &
261 & n, phi_t_0, zeta_t, mask_1, ier)
263 call monin_obukhov_integral_m(stable_option, rich_crit, zeta_trans, &
264 & n, f_m, zeta, zeta_0, ln_z_z0, mask_1, ier)
265 call monin_obukhov_integral_tq(stable_option, new_mo_option, rich_crit, zeta_trans, &
266 & n, f_t, f_q, zeta, zeta_t, zeta_q, ln_z_zt, ln_z_zq, mask_1, ier)
269 df_m = (phi_m - phi_m_0)*rzeta
270 df_t = (phi_t - phi_t_0)*rzeta
271 rich_1 = zeta*f_t/(f_m*f_m)
272 d_rich = rich_1*( rzeta + df_t/f_t - 2.0_lkind *df_m/f_m)
273 correction = (rich - rich_1)/d_rich
274 corr = min(abs(correction),abs(correction/zeta))
279 max_cor = maxval(corr)
281 if(max_cor > error)
then
282 mask_1 = mask_1 .and. (corr > error)
285 zeta = zeta + correction
302 & n, phi_t, zeta, mask, ier)
304 integer,
intent(in) :: stable_option
305 logical,
intent(in) :: new_mo_option
306 real(kind=fms_mo_kind_),
intent(in) :: rich_crit, zeta_trans
307 integer,
intent(in) :: n
308 real(kind=fms_mo_kind_),
intent(out),
dimension(n) :: phi_t
309 real(kind=fms_mo_kind_),
intent(in),
dimension(n) :: zeta
310 logical,
intent(in),
dimension(n) :: mask
311 integer,
intent(out) :: ier
313 logical,
dimension(n) :: stable, unstable
314 real(kind=fms_mo_kind_) :: b_stab, lambda
315 integer,
parameter :: lkind = fms_mo_kind_
318 b_stab = 1.0_lkind/rich_crit
320 stable = mask .and. zeta >= 0.0_lkind
321 unstable = mask .and. zeta < 0.0_lkind
324 if (new_mo_option)
then
326 phi_t = (1.0_lkind - 16.0_lkind*zeta)**(-1.0_lkind/3.0_lkind)
330 phi_t = (1.0_lkind - 16.0_lkind*zeta)**(-0.5_lkind)
335 if(stable_option == 1)
then
338 phi_t = 1.0_lkind + zeta*(5.0_lkind + b_stab*zeta)/(1.0_lkind + zeta)
341 else if(stable_option == 2)
then
343 lambda = 1.0_lkind + (5.0_lkind - b_stab)*zeta_trans
345 where (stable .and. zeta < zeta_trans)
346 phi_t = 1.0_lkind + 5.0_lkind*zeta
348 where (stable .and. zeta >= zeta_trans)
349 phi_t = lambda + b_stab*zeta
358 pure subroutine monin_obukhov_derivative_m_(stable_option, rich_crit, zeta_trans, &
359 & n, phi_m, zeta, mask, ier)
361 integer,
intent(in) :: stable_option
362 real(kind=fms_mo_kind_),
intent(in) :: rich_crit, zeta_trans
363 integer,
intent(in) :: n
364 real(kind=fms_mo_kind_),
intent(out),
dimension(n) :: phi_m
365 real(kind=fms_mo_kind_),
intent(in),
dimension(n) :: zeta
366 logical,
intent(in),
dimension(n) :: mask
367 integer,
intent(out) :: ier
369 logical,
dimension(n) :: stable, unstable
370 real(kind=fms_mo_kind_),
dimension(n) :: x
371 real(kind=fms_mo_kind_) :: b_stab, lambda
372 integer,
parameter :: lkind = fms_mo_kind_
375 b_stab = 1.0_lkind/rich_crit
377 stable = mask .and. zeta >= 0.0_lkind
378 unstable = mask .and. zeta < 0.0_lkind
381 x = (1.0_lkind - 16.0_lkind*zeta )**(-0.5_lkind)
385 if(stable_option == 1)
then
388 phi_m = 1.0_lkind + zeta *(5.0_lkind + b_stab*zeta)/(1.0_lkind + zeta)
391 else if(stable_option == 2)
then
393 lambda = 1.0_lkind + (5.0_lkind - b_stab)*zeta_trans
395 where (stable .and. zeta < zeta_trans)
396 phi_m = 1.0_lkind + 5.0_lkind*zeta
398 where (stable .and. zeta >= zeta_trans)
399 phi_m = lambda + b_stab*zeta
404 end subroutine monin_obukhov_derivative_m_
408 & neutral, stable_option, new_mo_option, rich_crit, zeta_trans, &
409 & n, zref, zref_t, z, z0, zt, zq, u_star, b_star, q_star, &
410 & del_m, del_t, del_q, lavail, avail, ier)
412 real(kind=fms_mo_kind_),
intent(in) :: vonkarm
413 logical,
intent(in) :: neutral
414 integer,
intent(in) :: stable_option
415 logical,
intent(in) :: new_mo_option
416 real(kind=fms_mo_kind_),
intent(in) :: rich_crit, zeta_trans
417 integer,
intent(in) :: n
418 real(kind=fms_mo_kind_),
intent(in) :: zref, zref_t
419 real(kind=fms_mo_kind_),
intent(in),
dimension(n) :: z, z0, zt, zq, u_star, b_star, q_star
420 real(kind=fms_mo_kind_),
intent(out),
dimension(n) :: del_m, del_t, del_q
421 logical,
intent(in) :: lavail
422 logical,
intent(in),
dimension(n) :: avail
423 integer,
intent(out) :: ier
425 real(kind=fms_mo_kind_),
dimension(n) :: zeta, zeta_0, zeta_t, zeta_q, zeta_ref, zeta_ref_t, &
426 ln_z_z0, ln_z_zt, ln_z_zq, ln_z_zref, ln_z_zref_t, &
427 f_m_ref, f_m, f_t_ref, f_t, f_q_ref, f_q, &
429 logical,
dimension(n) :: mask
430 integer,
parameter :: lkind = fms_mo_kind_
435 if(lavail) mask = avail
445 ln_z_zref = log(z/zref)
446 ln_z_zref_t = log(z/zref_t)
452 del_m = 1.0_lkind - ln_z_zref /ln_z_z0
453 del_t = 1.0_lkind - ln_z_zref_t/ln_z_zt
454 del_q = 1.0_lkind - ln_z_zref_t/ln_z_zq
459 where(mask .and. u_star > 0.0_lkind)
460 mo_length_inv = - vonkarm * b_star/(u_star*u_star)
461 zeta = z *mo_length_inv
462 zeta_0 = z0 *mo_length_inv
463 zeta_t = zt *mo_length_inv
464 zeta_q = zq *mo_length_inv
465 zeta_ref = zref *mo_length_inv
466 zeta_ref_t = zref_t*mo_length_inv
469 call monin_obukhov_integral_m(stable_option, rich_crit, zeta_trans, &
470 & n, f_m, zeta, zeta_0, ln_z_z0, mask, ier)
471 call monin_obukhov_integral_m(stable_option, rich_crit, zeta_trans, &
472 & n, f_m_ref, zeta, zeta_ref, ln_z_zref, mask, ier)
474 call monin_obukhov_integral_tq(stable_option, new_mo_option, rich_crit, zeta_trans, &
475 & n, f_t, f_q, zeta, zeta_t, zeta_q, ln_z_zt, ln_z_zq, mask, ier)
476 call monin_obukhov_integral_tq(stable_option, new_mo_option, rich_crit, zeta_trans, &
477 & n, f_t_ref, f_q_ref, zeta, zeta_ref_t, zeta_ref_t, ln_z_zref_t, ln_z_zref_t, mask, ier)
480 del_m = 1.0_lkind - f_m_ref/f_m
481 del_t = 1.0_lkind - f_t_ref/f_t
482 del_q = 1.0_lkind - f_q_ref/f_q
493 & n, psi_m, zeta, zeta_0, ln_z_z0, mask, ier)
495 integer,
intent(in) :: stable_option
496 real(kind=fms_mo_kind_),
intent(in) :: rich_crit, zeta_trans
497 integer,
intent(in) :: n
498 real(kind=fms_mo_kind_),
intent(inout),
dimension(n) :: psi_m
499 real(kind=fms_mo_kind_),
intent(in) ,
dimension(n) :: zeta, zeta_0, ln_z_z0
500 logical,
intent(in) ,
dimension(n) :: mask
501 integer,
intent(out) :: ier
503 real(kind=fms_mo_kind_) :: b_stab, lambda
504 real(kind=fms_mo_kind_),
dimension(n) :: x, x_0, x1, x1_0, num, denom, y
505 logical,
dimension(n) :: stable, unstable, &
506 weakly_stable, strongly_stable
507 integer,
parameter :: lkind = fms_mo_kind_
511 b_stab = 1.0_lkind/rich_crit
513 stable = mask .and. zeta >= 0.0_lkind
514 unstable = mask .and. zeta < 0.0_lkind
518 x = sqrt(1.0_lkind - 16.0_lkind*zeta)
519 x_0 = sqrt(1.0_lkind - 16.0_lkind*zeta_0)
525 x1_0 = 1.0_lkind + x_0
527 num = x1*x1*(1.0_lkind + x*x)
528 denom = x1_0*x1_0*(1.0_lkind + x_0*x_0)
529 y = atan(x) - atan(x_0)
530 psi_m = ln_z_z0 - log(num/denom) + 2.0_lkind*y
534 if( stable_option == 1)
then
537 psi_m = ln_z_z0 + (5.0_lkind - b_stab)*log((1.0_lkind + zeta)/(1.0_lkind + zeta_0)) &
538 + b_stab*(zeta - zeta_0)
541 else if (stable_option == 2)
then
543 lambda = 1.0_lkind + (5.0_lkind - b_stab)*zeta_trans
545 weakly_stable = stable .and. zeta <= zeta_trans
546 strongly_stable = stable .and. zeta > zeta_trans
548 where (weakly_stable)
549 psi_m = ln_z_z0 + 5.0_lkind*(zeta - zeta_0)
552 where(strongly_stable)
553 x = (lambda - 1.0_lkind)*log(zeta/zeta_trans) + b_stab*(zeta - zeta_trans)
556 where (strongly_stable .and. zeta_0 <= zeta_trans)
557 psi_m = ln_z_z0 + x + 5.0_lkind*(zeta_trans - zeta_0)
559 where (strongly_stable .and. zeta_0 > zeta_trans)
560 psi_m = lambda*ln_z_z0 + b_stab*(zeta - zeta_0)
570 & n, psi_t, psi_q, zeta, zeta_t, zeta_q, &
571 & ln_z_zt, ln_z_zq, mask, ier)
573 integer,
intent(in) :: stable_option
574 logical,
intent(in) :: new_mo_option
575 real(kind=fms_mo_kind_),
intent(in) :: rich_crit, zeta_trans
576 integer,
intent(in) :: n
577 real(kind=fms_mo_kind_),
intent(inout),
dimension(n) :: psi_t, psi_q
578 real(kind=fms_mo_kind_),
intent(in) ,
dimension(n) :: zeta, zeta_t, zeta_q, ln_z_zt, ln_z_zq
579 logical,
intent(in) ,
dimension(n) :: mask
580 integer,
intent(out) :: ier
582 real(kind=fms_mo_kind_),
dimension(n) :: x, x_t, x_q
583 logical,
dimension(n) :: stable, unstable, &
584 weakly_stable, strongly_stable
585 real(kind=fms_mo_kind_) :: b_stab, lambda
586 real(kind=fms_mo_kind_) :: s3
587 integer,
parameter :: lkind = fms_mo_kind_
591 b_stab = 1.0_lkind/rich_crit
593 stable = mask .and. zeta >= 0.0_lkind
594 unstable = mask .and. zeta < 0.0_lkind
597 if (new_mo_option)
then
600 x = (1.0_lkind - 16.0_lkind*zeta)**(1.0_lkind/3.0_lkind)
601 x_t = (1.0_lkind - 16.0_lkind*zeta_t)**(1.0_lkind/3.0_lkind)
602 x_q = (1.0_lkind - 16.0_lkind*zeta_q)**(1.0_lkind/3.0_lkind)
604 psi_t = ln_z_zt - 1.5_lkind*log((x**2+x+1.0_lkind)/(x_t**2 + x_t + 1.0_lkind)) + s3 * &
605 (atan((2.0_lkind*x+1.0_lkind)/s3) - atan((2.0_lkind*x_t + 1.0_lkind)/s3))
606 psi_q = ln_z_zq - 1.5_lkind*log((x**2+x+1.0_lkind)/(x_q**2 + x_q + 1.0_lkind)) + s3 * &
607 (atan((2.0_lkind*x+1.0_lkind)/s3) - atan((2.0_lkind*x_q + 1.0_lkind)/s3))
613 x = sqrt(1.0_lkind - 16.0_lkind*zeta)
614 x_t = sqrt(1.0_lkind - 16.0_lkind*zeta_t)
615 x_q = sqrt(1.0_lkind - 16.0_lkind*zeta_q)
617 psi_t = ln_z_zt - 2.0_lkind*log( (1.0_lkind + x)/(1.0_lkind + x_t) )
618 psi_q = ln_z_zq - 2.0_lkind*log( (1.0_lkind + x)/(1.0_lkind + x_q) )
624 if( stable_option == 1)
then
628 psi_t = ln_z_zt + (5.0_lkind - b_stab)*log((1.0_lkind + zeta)/(1.0_lkind + zeta_t)) &
629 + b_stab*(zeta - zeta_t)
630 psi_q = ln_z_zq + (5.0_lkind - b_stab)*log((1.0_lkind + zeta)/(1.0_lkind + zeta_q)) &
631 + b_stab*(zeta - zeta_q)
635 else if (stable_option == 2)
then
637 lambda = 1.0_lkind + (5.0_lkind - b_stab)*zeta_trans
639 weakly_stable = stable .and. zeta <= zeta_trans
640 strongly_stable = stable .and. zeta > zeta_trans
642 where (weakly_stable)
643 psi_t = ln_z_zt + 5.0_lkind*(zeta - zeta_t)
644 psi_q = ln_z_zq + 5.0_lkind*(zeta - zeta_q)
647 where(strongly_stable)
648 x = (lambda - 1.0_lkind)*log(zeta/zeta_trans) + b_stab*(zeta - zeta_trans)
651 where (strongly_stable .and. zeta_t <= zeta_trans)
652 psi_t = ln_z_zt + x + 5.0_lkind*(zeta_trans - zeta_t)
654 where (strongly_stable .and. zeta_t > zeta_trans)
655 psi_t = lambda*ln_z_zt + b_stab*(zeta - zeta_t)
658 where (strongly_stable .and. zeta_q <= zeta_trans)
659 psi_q = ln_z_zq + x + 5.0_lkind*(zeta_trans - zeta_q)
661 where (strongly_stable .and. zeta_q > zeta_trans)
662 psi_q = lambda*ln_z_zq + b_stab*(zeta - zeta_q)
670 pure subroutine monin_obukhov_stable_mix_(stable_option, rich_crit, zeta_trans, &
673 integer,
intent(in) :: stable_option
674 real(kind=fms_mo_kind_),
intent(in) :: rich_crit, zeta_trans
675 integer,
intent(in) :: n
676 real(kind=fms_mo_kind_),
intent(in),
dimension(n) :: rich
677 real(kind=fms_mo_kind_),
intent(out),
dimension(n) :: mix
678 integer,
intent(out) :: ier
680 real(kind=fms_mo_kind_) :: r, a, b, c, zeta, phi
681 real(kind=fms_mo_kind_) :: b_stab, rich_trans, lambda
683 integer,
parameter :: lkind = fms_mo_kind_
688 b_stab = 1.0_lkind/rich_crit
689 rich_trans = zeta_trans/(1.0_lkind + 5.0_lkind*zeta_trans)
691 if(stable_option == 1)
then
695 if(rich(i) > 0.0_lkind .and. rich(i) < rich_crit)
then
696 r = 1.0_lkind/rich(i)
698 b = r - (1.0_lkind + 5.0_lkind)
699 zeta = (-b + sqrt(b*b - 4.0_lkind*a*c))/(2.0_lkind*a)
700 phi = 1.0_lkind + b_stab*zeta + (5.0_lkind - b_stab)*zeta/(1.0_lkind + zeta)
701 mix(i) = 1.0_lkind/(phi*phi)
705 else if(stable_option == 2)
then
707 lambda = 1.0_lkind + (5.0_lkind - b_stab)*zeta_trans
709 where(rich > 0.0_lkind .and. rich <= rich_trans)
710 mix = (1.0_lkind - 5.0_lkind*rich)**2
712 where(rich > rich_trans .and. rich < rich_crit)
713 mix = ((1.0_lkind - b_stab*rich)/lambda)**2
718 end subroutine monin_obukhov_stable_mix_
pure subroutine monin_obukhov_solve_zeta_(error, zeta_min, max_iter, small, stable_option, new_mo_option, rich_crit, zeta_trans, n, rich, z, z0, zt, zq, f_m, f_t, f_q, mask, ier)
pure subroutine monin_obukhov_integral_m_(stable_option, rich_crit, zeta_trans, n, psi_m, zeta, zeta_0, ln_z_z0, mask, ier)
The integral similarity function for momentum.
pure subroutine monin_obukhov_integral_tq_(stable_option, new_mo_option, rich_crit, zeta_trans, n, psi_t, psi_q, zeta, zeta_t, zeta_q, ln_z_zt, ln_z_zq, mask, ier)
The integral similarity function for moisture and tracers.
pure subroutine monin_obukhov_diff_(vonkarm, ustar_min, neutral, stable_option, new_mo_option, rich_crit, zeta_trans, ni, nj, nk, z, u_star, b_star, k_m, k_h, ier)
pure subroutine monin_obukhov_drag_1d_(grav, vonkarm, error, zeta_min, max_iter, small, neutral, stable_option, new_mo_option, rich_crit, zeta_trans, drag_min_heat, drag_min_moist, drag_min_mom, n, pt, pt0, z, z0, zt, zq, speed, drag_m, drag_t, drag_q, u_star, b_star, lavail, avail, ier)
pure subroutine monin_obukhov_profile_1d_(vonkarm, neutral, stable_option, new_mo_option, rich_crit, zeta_trans, n, zref, zref_t, z, z0, zt, zq, u_star, b_star, q_star, del_m, del_t, del_q, lavail, avail, ier)
pure subroutine monin_obukhov_derivative_t_(stable_option, new_mo_option, rich_crit, zeta_trans, n, phi_t, zeta, mask, ier)
The differential similarity function for buoyancy and tracers.