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, &
82 INTEGER,
INTENT(IN) :: KSURF_STEP, KNB_ATM
83 REAL,
DIMENSION(:),
INTENT(IN) :: PTA1,PTA2,PQA1,PQA2,PWIND1,PWIND2
84 REAL,
DIMENSION(:),
INTENT(IN) :: PDIR_SW1,PDIR_SW2,PSCA_SW1,PSCA_SW2,PLW1,PLW2
85 REAL,
DIMENSION(:),
INTENT(IN) :: PSNOW2,PRAIN2,PPS1,PPS2,PCO21,PCO22,PDIR1,PDIR2
86 REAL,
DIMENSION(:),
INTENT(IN) :: PZEN,PSUMZEN
89 REAL :: ZDTA, ZDQA, ZDDIR_SW, ZDSCA_SW, ZDLW, &
90 ZDPS, ZDCO2, ZDU, ZDV, ZU1, ZV1, ZU2, ZV2
91 REAL :: ZPI, ZNB_ATM, ZSURF_STEP, ZCOEF, ZCOEF2
94 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
97 IF (
lhook)
CALL dr_hook(
'OL_TIME_INTERP_ATM_1',0,zhook_handle)
103 zsurf_step = ksurf_step*1.-1.
104 zcoef = zsurf_step / znb_atm
106 IF (
lhook)
CALL dr_hook(
'OL_TIME_INTERP_ATM_1',1,zhook_handle)
109 IF (
lhook)
CALL dr_hook(
'OL_TIME_INTERP_ATM_2',0,zhook_handle_omp)
119 zu1 = pwind1(j) * sin(pdir1(j)*zpi)
120 zu2 = pwind2(j) * sin(pdir2(j)*zpi)
121 zdu = (zu2-zu1)*zcoef
124 zv1 = pwind1(j) * cos(pdir1(j)*zpi)
125 zv2 = pwind2(j) * cos(pdir2(j)*zpi)
126 zdv = (zv2-zv1)*zcoef
131 zdta = (pta2(j)-pta1(j))*zcoef
132 xta(j) = pta1(j) + zdta
134 zdqa = (pqa2(j)-pqa1(j))*zcoef
135 xqa(j) = pqa1(j) + zdqa
137 zdlw = (plw2(j)-plw1(j))*zcoef
138 xlw(j) = plw1(j) + zdlw
140 zdps = (pps2(j)-pps1(j))*zcoef
141 xps(j) = pps1(j) + zdps
143 zdco2 = (pco22(j)-pco21(j))*zcoef
144 xco2(j) = pco21(j) + zdco2
149 IF (psumzen(j)>0.) zcoef2=max((cos(pzen(j))/psumzen(j)),0.)
151 xdir_sw(j,1) = min(pdir_sw2(j)*zcoef2,1300.0*max(cos(pzen(j)),0.))
153 xsca_sw(j,1) = min(psca_sw2(j)*zcoef2,1300.0*max(cos(pzen(j)),0.))
157 zddir_sw = (pdir_sw2(j)-pdir_sw1(j))*zcoef
158 xdir_sw(j,1) = pdir_sw1(j)+zddir_sw
160 zdsca_sw = (psca_sw2(j)-psca_sw1(j))*zcoef
161 xsca_sw(j,1) = psca_sw1(j)+zdsca_sw
170 xrhoa(j) = xps(j) / (
xta(j)*
xrd * ( 1.+((
xrv/
xrd)-1.)*xqa(j) ) + xzref(j)*
xg )
173 xqa(j) = xqa(j) * xrhoa(j)
179 IF (
lhook)
CALL dr_hook(
'OL_TIME_INTERP_ATM_2',1,zhook_handle_omp)
182 IF (
lhook)
CALL dr_hook(
'OL_TIME_INTERP_ATM_3',0,zhook_handle)
190 (minval(xu).EQ.
xundef).OR.(minval(xrain).EQ.
xundef).OR.&
191 (minval(xsnow).EQ.
xundef))
THEN 192 WRITE(iluout,*)
'MINVAL(XTA),MINVAL(XQA),MINVAL(XU),MINVAL(XRAIN),MINVAL(XSNOW)' 193 WRITE(iluout,*)minval(
xta),minval(xqa),minval(xu),minval(xrain),minval(xsnow)
194 CALL abor1_sfx(
'OL_TIME_INTERP_ATM: UNDEFINED VALUE IN ATMOSPHERIC FORCING')
197 IF ((minval(xdir_sw).EQ.
xundef).AND.(minval(xsca_sw).EQ.
xundef))
THEN 198 WRITE(iluout,*)
'MINVAL(XSCA_SW),MINVAL(XDIR_SW)' 199 WRITE(iluout,*)minval(xsca_sw),minval(xdir_sw)
200 CALL abor1_sfx(
'OL_TIME_INTERP_ATM: UNDEFINED VALUE IN ATMOSPHERIC FORCING')
203 IF ((minval(xps).EQ.
xundef).AND.(minval(xzs).EQ.
xundef))
THEN 204 WRITE(iluout,*)
'MINVAL(XPS),MINVAL(XZS)' 205 WRITE(iluout,*)minval(xps),minval(xzs)
206 CALL abor1_sfx(
'OL_TIME_INTERP_ATM: UNDEFINED VALUE IN ATMOSPHERIC FORCING')
209 IF (minval(xdir_sw).EQ.
xundef) xdir_sw(:,:)=0.
210 IF (minval(xsca_sw).EQ.
xundef) xsca_sw(:,:)=0.
211 IF (minval(xps) .EQ.
xundef)
THEN 212 WRITE(iluout,*)
' OL_TIME_INTERP_ATM: SURFACE PRESSURE COMPUTED FROM ZS' 213 xps(:) = 101325*(1-0.0065 * xzs(:)/288.15)**5.31
218 xpa(:) = xps(:) - xrhoa(:) * xzref(:) *
xg 221 IF (
lhook)
CALL dr_hook(
'OL_TIME_INTERP_ATM_3',1,zhook_handle)
real, dimension(:), allocatable xta
subroutine abor1_sfx(YTEXT)
subroutine ol_time_interp_atm(KSURF_STEP, KNB_ATM, PTA1, PTA2, PQA1, PQA2, PWIND1, PWIND2, PDIR_SW1, PDIR_SW2, PSCA_SW1, PSCA_SW2, PLW1, PLW2, PSNOW2, PRAIN2, PPS1, PPS2, PCO21, PCO22, PDIR1, PDIR2, PZEN, PSUMZEN)
subroutine get_luout(HPROGRAM, KLUOUT)