7 prhoa_atm,plw_atm,prain_atm,psnow_atm, &
8 pta_surf,pqa_surf,ppa_surf,prhoa_surf, &
9 plw_surf,prain_surf,psnow_surf )
52 USE yomhook
,ONLY : lhook, dr_hook
53 USE parkind1
,ONLY : jprb
60 REAL,
DIMENSION(:),
INTENT(IN) :: pzs_atm
61 REAL,
DIMENSION(:),
INTENT(IN) :: pzs_surf
62 REAL,
DIMENSION(:),
INTENT(IN) :: pta_atm
63 REAL,
DIMENSION(:),
INTENT(IN) :: pqa_atm
64 REAL,
DIMENSION(:),
INTENT(IN) :: ppa_atm
65 REAL,
DIMENSION(:),
INTENT(IN) :: prhoa_atm
66 REAL,
DIMENSION(:),
INTENT(IN) :: plw_atm
67 REAL,
DIMENSION(:),
INTENT(IN) :: prain_atm
68 REAL,
DIMENSION(:),
INTENT(IN) :: psnow_atm
70 REAL,
DIMENSION(:),
INTENT(OUT) :: pta_surf
71 REAL,
DIMENSION(:),
INTENT(OUT) :: pqa_surf
72 REAL,
DIMENSION(:),
INTENT(OUT) :: ppa_surf
73 REAL,
DIMENSION(:),
INTENT(OUT) :: prhoa_surf
74 REAL,
DIMENSION(:),
INTENT(OUT) :: plw_surf
75 REAL,
DIMENSION(:),
INTENT(OUT) :: prain_surf
76 REAL,
DIMENSION(:),
INTENT(OUT) :: psnow_surf
80 REAL,
PARAMETER :: zvapcoef = 0.622
81 REAL,
PARAMETER :: zemiscoef = 1.08
82 REAL,
PARAMETER :: ztempcoef = 2016.0
84 REAL,
DIMENSION(SIZE(PQA_ATM )) :: zqa_atm
85 REAL,
DIMENSION(SIZE(PQA_ATM )) :: zqa_surf
86 REAL,
DIMENSION(SIZE(PQA_ATM )) :: zqsat_atm
87 REAL,
DIMENSION(SIZE(PQA_ATM )) :: zqsat_surf
88 REAL,
DIMENSION(SIZE(PRHOA_ATM)) :: zrhoa_atm
89 REAL,
DIMENSION(SIZE(PRHOA_ATM)) :: zrhoa_surf
91 REAL,
DIMENSION(SIZE(PLW_ATM )) :: zvap_atm
92 REAL,
DIMENSION(SIZE(PLW_ATM )) :: zvap_surf
93 REAL,
DIMENSION(SIZE(PLW_ATM )) :: zemis_atm
94 REAL,
DIMENSION(SIZE(PLW_ATM )) :: zemis_surf
96 REAL(KIND=JPRB) :: zhook_handle
100 IF (lhook) CALL dr_hook(
'FORCING_VERT_SHIFT',0,zhook_handle)
105 pta_surf(:) = pta_atm(:) + xclim_t_grad * (pzs_surf(:) - pzs_atm(:))
112 zqsat_atm(:) =
qsat(pta_atm(:),ppa_atm(:))
114 zqa_atm(:) = min(pqa_atm(:)/prhoa_atm(:),zqsat_atm(:))
116 ppa_surf(:) = ppa_atm(:) * exp( - xg/xrd/(0.5*(pta_atm(:)+pta_surf(:))*(1.+((xrv/xrd)-1.)*zqa_atm(:))) &
117 * (pzs_surf(:)-pzs_atm(:)) )
125 zqsat_surf(:) =
qsat(pta_surf(:),ppa_surf(:))
127 zqa_surf(:) = min(zqa_atm(:)*zqsat_surf(:)/zqsat_atm(:),zqsat_surf(:))
134 zrhoa_atm(:) = ppa_atm(:) / xrd / pta_atm(:) / ( 1.+((xrv/xrd)-1.)*zqa_atm(:) )
135 zrhoa_surf(:) = ppa_surf(:) / xrd / pta_surf(:) / ( 1.+((xrv/xrd)-1.)*zqa_surf(:) )
137 prhoa_surf(:) = prhoa_atm(:) * zrhoa_surf(:) / zrhoa_atm(:)
144 pqa_surf(:) = zqa_surf(:) * prhoa_surf(:)
155 zvap_atm(:) = zqa_atm(:) * ppa_atm(:) / zvapcoef
156 zvap_surf(:) = zqa_surf(:) * ppa_surf(:) / zvapcoef
158 zvap_atm(:) = exp(log(zvap_atm(:))*(pta_atm(:)/ztempcoef))
159 zvap_surf(:) = exp(log(zvap_surf(:))*(pta_surf(:)/ztempcoef))
161 zemis_atm(:) = (1.0-exp(zvap_atm(:)))
162 zemis_surf(:) = (1.0-exp(zvap_surf(:)))
166 plw_surf(:) = plw_atm(:) * (zemis_surf(:)/zemis_atm(:)) * (pta_surf(:)/pta_atm(:))**4
170 plw_surf(:) = plw_atm(:)
181 WHERE(pta_surf(:)>=xtt+1.0)
182 prain_surf(:) = prain_atm(:) + psnow_atm(:)
186 psnow_surf(:) = prain_atm(:) + psnow_atm(:)
191 prain_surf(:) = prain_atm(:)
192 psnow_surf(:) = psnow_atm(:)
196 IF (lhook) CALL dr_hook(
'FORCING_VERT_SHIFT',1,zhook_handle)
subroutine forcing_vert_shift(PZS_ATM, PZS_SURF, PTA_ATM, PQA_ATM, PPA_ATM, PRHOA_ATM, PLW_ATM, PRAIN_ATM, PSNOW_ATM, PTA_SURF, PQA_SURF, PPA_SURF, PRHOA_SURF, PLW_SURF, PRAIN_SURF, PSNOW_SURF)