7 pta1,pta2,pqa1,pqa2,pwind1,pwind2, &
8 pdir_sw1,pdir_sw2,psca_sw1,psca_sw2, &
9 plw1,plw2,psnow2,prain2, &
10 pps1,pps2,pco21,pco22,pdir1,pdir2 )
65 USE yomhook
,ONLY : lhook, dr_hook
66 USE parkind1
,ONLY : jprb
80 INTEGER,
INTENT(IN) :: ksurf_step, knb_atm
81 INTEGER,
DIMENSION(:),
INTENT(IN) :: ksize_omp
82 REAL,
DIMENSION(:),
INTENT(IN) :: pta1,pta2,pqa1,pqa2,pwind1,pwind2
83 REAL,
DIMENSION(:),
INTENT(IN) :: pdir_sw1,pdir_sw2,psca_sw1,psca_sw2,plw1,plw2
84 REAL,
DIMENSION(:),
INTENT(IN) :: psnow2,prain2,pps1,pps2,pco21,pco22,pdir1,pdir2
87 REAL :: zdta, zdqa, zddir_sw, zdsca_sw, zdlw, &
88 zdps, zdco2, zdu, zdv, zu1, zv1, zu2, zv2
89 REAL :: zpi, znb_atm, zsurf_step, zcoef
90 INTEGER :: j, inkproma
92 REAL(KIND=JPRB) :: zhook_handle
95 IF (lhook) CALL dr_hook(
'OL_TIME_INTERP_ATM',0,zhook_handle)
101 zsurf_step = ksurf_step*1.-1.
102 zcoef = zsurf_step / znb_atm
109 IF (nblock==nblocktot)
THEN
110 CALL
init_dim(ksize_omp,0,inkproma,nindx1sfx,nindx2sfx)
112 CALL
init_dim(ksize_omp,nblock,inkproma,nindx1sfx,nindx2sfx)
115 DO j = nindx1sfx,nindx2sfx
117 IF (pta1(j)/=xundef)
THEN
122 zu1 = pwind1(j) * sin(pdir1(j)*zpi)
123 zu2 = pwind2(j) * sin(pdir2(j)*zpi)
124 zdu = (zu2-zu1)*zcoef
127 zv1 = pwind1(j) * cos(pdir1(j)*zpi)
128 zv2 = pwind2(j) * cos(pdir2(j)*zpi)
129 zdv = (zv2-zv1)*zcoef
134 zdta = (pta2(j)-pta1(j))*zcoef
135 xta(j) = pta1(j) + zdta
137 zdqa = (pqa2(j)-pqa1(j))*zcoef
138 xqa(j) = pqa1(j) + zdqa
140 zdlw = (plw2(j)-plw1(j))*zcoef
141 xlw(j) = plw1(j) + zdlw
143 zdps = (pps2(j)-pps1(j))*zcoef
144 xps(j) = pps1(j) + zdps
146 zdco2 = (pco22(j)-pco21(j))*zcoef
147 xco2(j) = pco21(j) + zdco2
149 zddir_sw = (pdir_sw2(j)-pdir_sw1(j))*zcoef
150 xdir_sw(j,1) = pdir_sw1(j)+zddir_sw
152 zdsca_sw = (psca_sw2(j)-psca_sw1(j))*zcoef
153 xsca_sw(j,1) = psca_sw1(j)+zdsca_sw
160 xrhoa(j) = xps(j) / ( xta(j)*xrd * ( 1.+((xrv/xrd)-1.)*xqa(j) ) + xzref(j)*xg )
163 xqa(j) = xqa(j) * xrhoa(j)
169 CALL
reset_dim(
SIZE(pta1),inkproma,nindx1sfx,nindx2sfx)
180 IF ((minval(xta) .EQ.xundef).OR.(minval(xqa).EQ.xundef).OR.&
181 (minval(xu).EQ.xundef).OR.(minval(xrain).EQ.xundef).OR.&
182 (minval(xsnow).EQ.xundef))
THEN
183 WRITE(iluout,*)
'MINVAL(XTA),MINVAL(XQA),MINVAL(XU),MINVAL(XRAIN),MINVAL(XSNOW)'
184 WRITE(iluout,*)minval(xta),minval(xqa),minval(xu),minval(xrain),minval(xsnow)
185 CALL
abor1_sfx(
'OL_TIME_INTERP_ATM: UNDEFINED VALUE IN ATMOSPHERIC FORCING')
188 IF ((minval(xdir_sw).EQ.xundef).AND.(minval(xsca_sw).EQ.xundef))
THEN
189 WRITE(iluout,*)
'MINVAL(XSCA_SW),MINVAL(XDIR_SW)'
190 WRITE(iluout,*)minval(xsca_sw),minval(xdir_sw)
191 CALL
abor1_sfx(
'OL_TIME_INTERP_ATM: UNDEFINED VALUE IN ATMOSPHERIC FORCING')
194 IF ((minval(xps).EQ.xundef).AND.(minval(xzs).EQ.xundef))
THEN
195 WRITE(iluout,*)
'MINVAL(XPS),MINVAL(XZS)'
196 WRITE(iluout,*)minval(xps),minval(xzs)
197 CALL
abor1_sfx(
'OL_TIME_INTERP_ATM: UNDEFINED VALUE IN ATMOSPHERIC FORCING')
200 IF (minval(xdir_sw).EQ.xundef) xdir_sw(:,:)=0.
201 IF (minval(xsca_sw).EQ.xundef) xsca_sw(:,:)=0.
202 IF (minval(xps) .EQ.xundef)
THEN
203 WRITE(iluout,*)
' OL_TIME_INTERP_ATM: SURFACE PRESSURE COMPUTED FROM ZS'
204 xps(:) = 101325*(1-0.0065 * xzs(:)/288.15)**5.31
208 WHERE(xps(:)/=xundef)
209 xpa(:) = xps(:) - xrhoa(:) * xzref(:) * xg
212 IF (lhook) CALL dr_hook(
'OL_TIME_INTERP_ATM',1,zhook_handle)
subroutine abor1_sfx(YTEXT)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine init_dim(KSIZE_OMP, KBLOCK, KKPROMA, KINDX1, KINDX2)
subroutine reset_dim(KNI, KKPROMA, KINDX1, KINDX2)
subroutine ol_time_interp_atm(KSURF_STEP, KNB_ATM, KSIZE_OMP, PTA1, PTA2, PQA1, PQA2, PWIND1, PWIND2, PDIR_SW1, PDIR_SW2, PSCA_SW1, PSCA_SW2, PLW1, PLW2, PSNOW2, PRAIN2, PPS1, PPS2, PCO21, PCO22, PDIR1, PDIR2)