16 subroutine sfc_diag_post_run (im, lsm, lsm_noahmp, opt_diag, dry, lssav, dtf, con_eps, con_epsm1, pgr,&
17 t2mmp,q2mp, t2m, q2m, u10m, v10m, tmpmin, tmpmax, spfhmin, spfhmax, &
18 wind10mmax, u10mmax, v10mmax, dpt2m, errmsg, errflg)
20 use machine,
only: kind_phys, kind_dbl_prec
24 integer,
intent(in) :: im, lsm, lsm_noahmp,opt_diag
25 logical,
intent(in) :: lssav
26 real(kind=kind_phys),
intent(in) :: dtf, con_eps, con_epsm1
27 logical ,
dimension(:),
intent(in) :: dry
28 real(kind=kind_phys),
dimension(:),
intent(in) :: pgr, u10m, v10m
29 real(kind=kind_phys),
dimension(:),
intent(inout) :: t2m, q2m, tmpmin, tmpmax, spfhmin, spfhmax
30 real(kind=kind_phys),
dimension(:),
intent(in),
optional :: t2mmp, q2mp
31 real(kind=kind_phys),
dimension(:),
intent(inout) :: wind10mmax, u10mmax, v10mmax, dpt2m
33 character(len=*),
intent(out) :: errmsg
34 integer,
intent(out) :: errflg
37 real(kind=kind_dbl_prec) :: tem
43 if (lsm == lsm_noahmp)
then
44 if (opt_diag == 2 .or. opt_diag == 3)
then
56 tmpmax(i) = max(tmpmax(i),t2m(i))
57 tmpmin(i) = min(tmpmin(i),t2m(i))
58 spfhmax(i) = max(spfhmax(i),q2m(i))
59 spfhmin(i) = min(spfhmin(i),q2m(i))
63 tem = sqrt(u10m(i)*u10m(i) + v10m(i)*v10m(i))
64 if (tem > wind10mmax(i))
then
70 tem = max(pgr(i) * q2m(i) / ( con_eps - con_epsm1 *q2m(i)), 1.d-8)
71 dpt2m(i) = 243.5_kind_dbl_prec / &
72 ( ( 17.67_kind_dbl_prec / log(tem/611.2_kind_dbl_prec) ) - 1.) + 273.14
subroutine sfc_diag_post_run(im, lsm, lsm_noahmp, opt_diag, dry, lssav, dtf, con_eps, con_epsm1, pgr, t2mmp, q2mp, t2m, q2m, u10m, v10m, tmpmin, tmpmax, spfhmin, spfhmax, wind10mmax, u10mmax, v10mmax, dpt2m, errmsg, errflg)
This module contains code related to the surface diagnostic scheme.