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 )
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)