7 & p__surftemperature, &
8 & p__surfprec_eau_con, &
9 & p__surfprec_eau_gec, &
10 & p__surfprec_nei_con, &
11 & p__surfprec_nei_gec, &
12 & p__atmonebul_basse, &
13 & p__surfxevapotransp, &
14 & p__surfflu_lat_meva, &
17 & p__surfaccgraupel, &
18 & p__clstemperature, &
19 & p__clshumi_relative, &
21 & p__clsvent_meridien, &
22 & p__surfind_terremer, &
23 & p__surfreserv_neige, &
57 USE modd_csts, ONLY : xday, xpi, xrholw, xlvtt, ndaysec
63 USE modd_surfex_omp, ONLY : nindx2sfx, nwork, nwork2, xwork, xwork2, xwork3, &
64 nwork_full, nwork2_full, xwork_full, xwork2_full
70 USE modd_io_surf_lfi,ONLY : cfilein_lfi, cfileout_lfi, cfilepgd_lfi, cfilein_lfi_save
74 ndgux, ndlux, perpk, pelon0, pelat0, &
75 pedelx, pedely, pelon1, pelat1, pebeta
78 USE modd_io_surf_aro
,ONLY : ngptot, ngptot_cap, nproma, nindx1, nindx2, nblock, nkproma, &
80 surfex_field_buf_prealloc, surfex_field_buf_set_record
81 USE modd_surfex_aro
, ONLY : ysurfex_aro_all, ysurfex_aro_cur
86 USE modi_open_namelist
87 USE modi_close_namelist
88 USE modi_read_all_namelists
89 USE modi_ini_data_cover
90 USE modi_init_io_surf_n
92 USE modi_set_surfex_filein
93 USE modi_get_size_full_n
95 USE modi_convert_cover_frac
97 USE modi_end_io_surf_n
98 USE modi_io_buff_clean
99 USE modi_oi_bc_soil_moisture
100 USE modi_oi_latlon_conf_proj
102 USE modi_oi_hor_extrapol_surf
106 USE yomhook
,ONLY : lhook, dr_hook
107 USE parkind1
,ONLY : jprb
111 TYPE(surfex_t),
INTENT(INOUT) :: ysc
113 LOGICAL,
INTENT (IN) :: ldinline
114 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surftemperature
115 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfprec_eau_con
116 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfprec_eau_gec
117 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfprec_nei_con
118 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfprec_nei_gec
119 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__atmonebul_basse
120 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfxevapotransp
121 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfflu_lat_meva
122 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfaccpluie
123 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfaccneige
124 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfaccgraupel
125 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__clstemperature
126 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__clshumi_relative
127 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__clsvent_zonal
128 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__clsvent_meridien
129 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfind_terremer
130 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__surfreserv_neige
131 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__lon
132 REAL(KIND=JPRB),
OPTIONAL,
DIMENSION (:) :: p__lat
133 LOGICAL,
OPTIONAL,
DIMENSION (:) :: ld_maskext
138 CHARACTER(LEN=28) :: ynamelist =
'OPTIONS.nam '
142 CHARACTER(LEN=6) :: yprogram
143 CHARACTER(LEN=6),
PARAMETER :: yprogram2 =
'FA '
144 CHARACTER(LEN=2) :: cmonth
153 LOGICAL :: llkeepextzone
156 REAL,
DIMENSION (:,:),
ALLOCATABLE :: pws, pwp, pts, ptp, ptl, psns, prsmin, pd2, plai, pveg
157 REAL,
DIMENSION (:),
ALLOCATABLE :: psst, psab, parg, plat, plon, ptcls, phcls, pucls, pvcls, &
158 & PEVAP, PEVAPTR, PT2M_O, PHU2M_O, PTS_O, ZT2INC, ZH2INC, &
159 & ZWS, ZWP, ZTL, ZTS, ZTP, ZTCLS, ZHCLS, ZUCLS, ZVCLS, &
160 & PSSTC, PWPINC1, PWPINC2, PWPINC3, PT2MBIAS, PH2MBIAS, &
161 & PRRCN, PRRCL, PRRSN, PRRSL, PATMNEB, PITM, PALBF, PEMISF, &
162 & PZ0F, PIVEG, PZ0H, PTSC, PTPC, PWSC, PWPC, PSNC, ZEVAP, &
163 & ZEVAPTR, PGELAT, PGELAM, PGEMU, ZWSINC, ZWPINC, ZTSINC, &
164 & ZTPINC, ZTLINC, ZSNINC, ZSNS, ZPX, ZPY, PSM_O, PSIG_SMO, &
165 & PLSM_O, PWS_O, ZWGINC, PLST, PTRD3, ZSST, ZLST, ZALT
166 REAL,
DIMENSION (:),
ALLOCATABLE :: zsst1, zlst1, psst1, plst1, plat1, plon1, zalt1
168 INTEGER :: iversion, ibugfix
170 CHARACTER(LEN=10) :: yvar
171 CHARACTER(LEN=100) :: yprefix
177 REAL :: plat0,plon0,prpk,plator,plonor,delx,dely,pbeta,zthres
178 REAL(KIND=JPRB) :: z1s2pi, zpis180
180 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: ointerp_lst, ointerp_sst
181 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: ointerp_lst1, ointerp_sst1
183 REAL(KIND=JPRB) :: zhook_handle
185 IF (lhook) CALL dr_hook(
'OI_CONTROL', 0, zhook_handle)
187 print *,
'--------------------------------------------------------------------------'
189 print *,
'| ENTER OI_ASSIM |'
191 print *,
'--------------------------------------------------------------------------'
194 CALL
posnam(ilunam,
'NAM_IO_OFFLINE',gfound)
195 IF (gfound)
READ (unit=ilunam,nml=nam_io_offline)
205 igpcomp = min(ngptot, ngptot_cap)
208 nindx1 = 1 + (nblock - 1) * nproma
209 nindx2 = min(nblock * nproma, igpcomp)
210 nkproma = nindx2 - nindx1 + 1
211 ysurfex_aro_cur => ysurfex_aro_all(nblock)
223 llkeepextzone = .false.
225 z1s2pi=1.0_jprb/(2.0_jprb*xpi)
226 zpis180=xpi/180.0_jprb
231 xrscaldw =
REAL(nechgu)/6.0_jprb
239 IF (.NOT. ldinline)
THEN
243 cfilein_lfi_save = cfilein_lfi
250 yprogram,
'FULL ',
'SURF ',
'READ ')
255 yprogram,
'DTCUR',ttime,iresp)
259 iyear = ttime%TDATE%YEAR
260 imonth = ttime%TDATE%MONTH
261 iday = ttime%TDATE%DAY
263 IF (nsssss > ndaysec) nsssss = nsssss - ndaysec
270 yprogram,
'FULL ',
'SURF ',
'READ ')
273 yprogram,
'SEA ',ysc%U%CSEA ,iresp)
275 yprogram,
'WATER ',ysc%U%CWATER ,iresp)
277 yprogram,
'NATURE',ysc%U%CNATURE,iresp)
279 yprogram,
'TOWN ',ysc%U%CTOWN ,iresp)
282 yprogram,
'DIM_FULL ',ysc%U%NDIM_FULL, iresp)
283 nindx2sfx = ysc%U%NDIM_FULL
286 yprogram,
'FULL ',
'SURF ',
'READ ')
289 yprogram,
'DIM_SEA ',ysc%U%NDIM_SEA, iresp)
291 yprogram,
'DIM_NATURE',ysc%U%NDIM_NATURE,iresp)
293 yprogram,
'DIM_WATER ',ysc%U%NDIM_WATER, iresp)
295 yprogram,
'DIM_TOWN ',ysc%U%NDIM_TOWN, iresp)
297 ALLOCATE(nwork(ysc%U%NDIM_FULL))
298 ALLOCATE(xwork(ysc%U%NDIM_FULL))
299 ALLOCATE(nwork2(ysc%U%NDIM_FULL,10))
300 ALLOCATE(xwork2(ysc%U%NDIM_FULL,10))
301 ALLOCATE(xwork3(ysc%U%NDIM_FULL,10,10))
302 IF (nrank==npio)
THEN
303 ALLOCATE(nwork_full(ysc%U%NDIM_FULL))
304 ALLOCATE(xwork_full(ysc%U%NDIM_FULL))
305 ALLOCATE(nwork2_full(ysc%U%NDIM_FULL,10))
306 ALLOCATE(xwork2_full(ysc%U%NDIM_FULL,10))
308 ALLOCATE(nwork_full(0))
309 ALLOCATE(xwork_full(0))
310 ALLOCATE(nwork2_full(0,0))
311 ALLOCATE(xwork2_full(0,0))
317 yprogram,ysc%U%NDIM_FULL,ysc%U%NSIZE_FULL)
320 isize = ysc%U%NSIZE_FULL
322 isize = ysc%U%NDIM_FULL
325 ALLOCATE (psab(isize))
326 ALLOCATE (parg(isize))
327 ALLOCATE (zalt(isize))
330 yprogram,
'SAND', psab, iresp)
332 yprogram,
'CLAY', parg, iresp)
334 yprogram,
'ZS', zalt, iresp)
341 ALLOCATE(ysc%U%XSEA (isize))
342 ALLOCATE(ysc%U%XNATURE(isize))
343 ALLOCATE(ysc%U%XWATER (isize))
344 ALLOCATE(ysc%U%XTOWN (isize))
347 ysc%U%XCOVER,ysc%U%LCOVER,ysc%U%XSEA,ysc%U%XNATURE,ysc%U%XTOWN,ysc%U%XWATER)
349 ysc%U%NSIZE_NATURE = count(ysc%U%XNATURE(:) > 0.0)
350 ysc%U%NSIZE_TOWN = count(ysc%U%XTOWN(:) > 0.0)
351 ysc%U%NSIZE_WATER = count(ysc%U%XWATER(:) > 0.0)
352 ysc%U%NSIZE_SEA = count(ysc%U%XSEA(:) > 0.0)
354 ALLOCATE(ysc%U%NR_NATURE (ysc%U%NSIZE_NATURE))
355 ALLOCATE(ysc%U%NR_TOWN (ysc%U%NSIZE_TOWN ))
356 ALLOCATE(ysc%U%NR_WATER (ysc%U%NSIZE_WATER ))
357 ALLOCATE(ysc%U%NR_SEA (ysc%U%NSIZE_SEA ))
359 CALL
get_1d_mask( ysc%U%NSIZE_SEA, isize, ysc%U%XSEA , ysc%U%NR_SEA )
360 CALL
get_1d_mask( ysc%U%NSIZE_WATER, isize, ysc%U%XWATER , ysc%U%NR_WATER )
361 CALL
get_1d_mask( ysc%U%NSIZE_TOWN, isize, ysc%U%XTOWN , ysc%U%NR_TOWN )
362 CALL
get_1d_mask( ysc%U%NSIZE_NATURE, isize, ysc%U%XNATURE, ysc%U%NR_NATURE)
368 ALLOCATE (pws(isize,1))
369 ALLOCATE (pwp(isize,1))
370 ALLOCATE (pts(isize,1))
371 ALLOCATE (ptp(isize,1))
372 ALLOCATE (ptl(isize,1))
373 ALLOCATE (psst(isize))
374 ALLOCATE (psns(isize,1))
375 ALLOCATE (plai(isize,1))
376 ALLOCATE (pveg(isize,1))
377 ALLOCATE (prsmin(isize,1))
378 ALLOCATE (pd2(isize,1))
379 ALLOCATE (ptcls(isize))
380 ALLOCATE (phcls(isize))
381 ALLOCATE (pucls(isize))
382 ALLOCATE (pvcls(isize))
383 ALLOCATE (pevap(isize))
384 ALLOCATE (plst(isize))
385 ALLOCATE (ptrd3(isize))
387 ALLOCATE (ointerp_lst(isize))
388 ALLOCATE (ointerp_sst(isize))
389 ALLOCATE (zlst(isize))
390 ALLOCATE (zsst(isize))
397 yprogram,
'FULL ',
'SURF ',
'READ ')
399 IF (ysc%U%NSIZE_NATURE>0 .AND. ysc%U%CNATURE/=
'NONE')
THEN
401 yprogram,
'WG1', pws, iresp)
403 yprogram,
'WG2', pwp, iresp)
405 yprogram,
'TG1', pts, iresp)
407 yprogram,
'TG2', ptp, iresp)
409 yprogram,
'WGI2', ptl, iresp)
412 yprogram,
'VERSION',iversion,iresp)
414 yprogram,
'BUG',ibugfix,iresp)
415 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3)
THEN
417 yprogram,
'WSN_VEG1',psns, iresp)
420 yprogram,
'WSNOW_VEG1',psns, iresp)
424 IF (ysc%U%NSIZE_SEA>0 .AND. ysc%U%CSEA/=
'NONE')
THEN
426 yprogram,
'SST', psst, iresp)
429 IF (ysc%U%NSIZE_WATER>0 .AND. ysc%U%CWATER/=
'NONE')
THEN
431 yprogram,
'TS_WATER', plst, iresp)
434 IF (ysc%U%NSIZE_TOWN>0 .AND. ysc%U%CTOWN/=
'NONE' .AND. larome)
THEN
436 yprogram,
'VERSION',iversion,iresp)
438 yprogram,
'BUG',ibugfix,iresp)
439 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3)
THEN
441 yprogram,
'TROAD3', ptrd3, iresp)
444 yprogram,
'T_ROAD3', ptrd3, iresp)
451 yprogram,
'T2M', ptcls, iresp)
453 yprogram,
'HU2M', phcls, iresp)
458 yprogram,
'RSMIN', prsmin,iresp)
460 yprogram,
'DG2', pd2, iresp)
462 yprogram,
'LAI', plai, iresp)
464 yprogram,
'VEG', pveg, iresp)
466 IF (nprintlev>0)
THEN
467 jj = ysc%U%NR_NATURE(1)
468 print *,
'value in PREP file => WG1 ',pws(jj,1)
469 print *,
'value in PREP file => WG2 ',pwp(jj,1)
470 print *,
'value in PREP file => TG1 ',pts(jj,1)
471 print *,
'value in PREP file => TG2 ',ptp(jj,1)
472 print *,
'value in PREP file => WGI2 ',ptl(jj,1)
473 print *,
'value in PREP file => WSNOW_VEG1',psns(jj,1)
474 print *,
'value in PREP file => SST ',psst(jj)
475 print *,
'value in PREP file => LAI ',plai(jj,1)
476 print *,
'value in PREP file => VEG ',pveg(jj,1)
477 print *,
'value in PREP file => RSMIN ',prsmin(jj,1)
478 print *,
'value in PREP file => DATA_DG2 ',pd2(jj,1)
479 print *,
'value in PREP file => SAND ',psab(jj)
480 print *,
'value in PREP file => CLAY ',parg(jj)
481 print *,
'value in PREP file => ZS ',zalt(jj)
489 ALLOCATE (plat(isize))
490 ALLOCATE (plon(isize))
491 ALLOCATE (zpx(isize))
492 ALLOCATE (zpy(isize))
493 ALLOCATE (pevaptr(isize))
494 ALLOCATE (zwp(isize))
495 ALLOCATE (zws(isize))
496 ALLOCATE (ztl(isize))
497 ALLOCATE (zts(isize))
498 ALLOCATE (ztp(isize))
499 ALLOCATE (zsns(isize))
500 ALLOCATE (ztcls(isize))
501 ALLOCATE (zhcls(isize))
502 ALLOCATE (zucls(isize))
503 ALLOCATE (zvcls(isize))
504 ALLOCATE (psstc(isize))
505 ALLOCATE (pwpinc1(isize))
506 ALLOCATE (pwpinc2(isize))
507 ALLOCATE (pwpinc3(isize))
508 ALLOCATE (pt2mbias(isize))
509 ALLOCATE (ph2mbias(isize))
510 ALLOCATE (prrcn(isize))
511 ALLOCATE (prrcl(isize))
512 ALLOCATE (prrsn(isize))
513 ALLOCATE (prrsl(isize))
514 ALLOCATE (patmneb(isize))
515 ALLOCATE (pitm(isize))
516 ALLOCATE (palbf(isize))
517 ALLOCATE (pemisf(isize))
518 ALLOCATE (pz0f(isize))
519 ALLOCATE (piveg(isize))
520 ALLOCATE (pz0h(isize))
521 ALLOCATE (ptsc(isize))
522 ALLOCATE (ptpc(isize))
523 ALLOCATE (pwsc(isize))
524 ALLOCATE (pwpc(isize))
525 ALLOCATE (psnc(isize))
526 ALLOCATE (zevap(isize))
527 ALLOCATE (zevaptr(isize))
528 ALLOCATE (pgelat(isize))
529 ALLOCATE (pgelam(isize))
530 ALLOCATE (pgemu(isize))
531 ALLOCATE (pt2m_o(isize))
532 ALLOCATE (phu2m_o(isize))
533 ALLOCATE (pts_o(isize))
534 ALLOCATE (psm_o(isize))
535 ALLOCATE (psig_smo(isize))
536 ALLOCATE (plsm_o(isize))
537 ALLOCATE (pws_o(isize))
538 ALLOCATE (zwginc(isize))
540 IF (.NOT. ldinline)
THEN
544 cfilein_fa =
'FG_OI_MAIN'
545 cfilein_fa_save = cfilein_fa
549 yprogram2,
'EXTZON',
'SURF ',
'READ ')
556 prrsl(:) = p__surfaccpluie(1:isize)
557 prrsn(:) = p__surfaccneige(1:isize)
558 prrcn(:) = p__surfaccgraupel(1:isize)
561 yprogram2,
'SURFACCPLUIE', prrsl ,iresp)
563 yprogram2,
'SURFACCNEIGE', prrsn ,iresp)
565 yprogram2,
'SURFACCGRAUPEL', prrcn ,iresp)
572 prrcl(:) = p__surfprec_eau_con(1:isize)
573 prrsl(:) = p__surfprec_eau_gec(1:isize)
574 prrcn(:) = p__surfprec_nei_con(1:isize)
575 prrsn(:) = p__surfprec_nei_gec(1:isize)
578 yprogram2,
'SURFPREC.EAU.CON',prrcl ,iresp)
580 yprogram2,
'SURFPREC.EAU.GEC',prrsl ,iresp)
582 yprogram2,
'SURFPREC.NEI.CON',prrcn ,iresp)
584 yprogram2,
'SURFPREC.NEI.GEC',prrsn ,iresp)
589 patmneb(:) = p__atmonebul_basse(1:isize)
590 pitm(:) = p__surfind_terremer(1:isize)
591 pevap(:) = p__surfflu_lat_meva(1:isize)
594 yprogram2,
'ATMONEBUL.BASSE ',patmneb,iresp)
596 yprogram2,
'SURFIND.TERREMER',pitm ,iresp)
598 yprogram2,
'SURFFLU.LAT.MEVA',pevap ,iresp)
600 IF (.NOT.laladsurf)
THEN
602 pevaptr(:) = p__surfxevapotransp(1:isize)
605 yprogram2,
'SURFXEVAPOTRANSP',pevaptr,iresp)
611 IF (.NOT. ldinline)
THEN
615 print *,
'READ FG_OI_MAIN OK'
618 IF (.NOT. ldinline)
THEN
621 cfilein_fa =
'CANARI'
622 cfilein_fa_save = cfilein_fa
626 yprogram2,
'EXTZON',
'SURF ',
'READ ')
630 pt2m_o(:) = p__clstemperature(1:isize)
631 phu2m_o(:) = p__clshumi_relative(1:isize)
632 pts_o(:) = p__surftemperature(1:isize)
633 pucls(:) = p__clsvent_zonal(1:isize)
634 pvcls(:) = p__clsvent_meridien(1:isize)
638 yprogram2,
'CLSTEMPERATURE ',pt2m_o ,iresp)
640 yprogram2,
'CLSHUMI.RELATIVE',phu2m_o,iresp)
642 yprogram2,
'SURFTEMPERATURE ',pts_o ,iresp)
644 yprogram2,
'CLSVENT.ZONAL ',pucls ,iresp)
646 yprogram2,
'CLSVENT.MERIDIEN',pvcls ,iresp)
649 IF (.NOT. ldinline)
THEN
653 print *,
'READ CANARI OK'
660 OPEN(unit=111,file=
'ASCAT_SM.DAT')
661 DO jj=1,ysc%U%NDIM_FULL
662 READ(111,*,end=990) psm_o(jj),psig_smo(jj),plsm_o(jj)
663 IF (plsm_o(jj) < 1.0) psm_o(jj) = 999.0
664 IF (psig_smo(jj) > xsigwgo_max) psm_o(jj) = 999.0
665 IF (psm_o(jj) /= 999.0) inobs = inobs + 1
669 print *,
'READ ASCAT SM OK'
675 print *,
' NUMBER OF ASCAT OBSERVATIONS AFTER INITIAL CHECKS :: ',inobs
682 IF (.NOT. ldinline)
THEN
685 cfilein_fa =
'clim_isba'
686 cfilein_fa_save = cfilein_fa
691 yprogram2,
'EXTZON',
'SURF ',
'READ ')
695 psnc(:) = p__surfreserv_neige(1:isize)
699 yprogram2,
'SURFRESERV.NEIGE',psnc ,iresp)
702 IF (.NOT. ldinline)
THEN
706 print *,
'READ CLIMATOLOGY OK'
709 IF (.NOT. ldinline)
THEN
719 IF (plonor > 180.0) plonor = plonor - 360.0
720 IF (plon0 > 180.0) plon0 = plon0 - 360.0
723 zpx((jj-1)*ndlux + j1) = delx*
REAL(j1-1)
724 zpy((jj-1)*ndlux + j1) = dely*
REAL(jj-1)
728 CALL
oi_latlon_conf_proj(isize,plat0,plon0,prpk,pbeta,plator,plonor,zpx,zpy,plat,plon)
730 plat(:) = p__lat(1:isize)
731 plon(:) = p__lon(1:isize)
736 ALLOCATE (zt2inc(isize))
737 ALLOCATE (zh2inc(isize))
738 ALLOCATE (zwsinc(isize))
739 ALLOCATE (zwpinc(isize))
740 ALLOCATE (ztlinc(isize))
741 ALLOCATE (ztsinc(isize))
742 ALLOCATE (ztpinc(isize))
743 ALLOCATE (zsninc(isize))
747 zt2inc(:) = pt2m_o(:) - ptcls(:)
748 zh2inc(:) = phu2m_o(:) - phcls(:)
752 zthres=xrthr_qc*sqrt(xsigwgo**2 + xsigwgb**2)
757 IF (pws_o(jj) /= 999.0)
THEN
758 zwginc(jj) = pws_o(jj) - pws(jj,1)
759 IF (abs(zwginc(jj)) > zthres)
THEN
768 print *,
' NUMBER OF ASCAT OBSERVATIONS AFTER BACKGROUND CHECK :: ',inobs
772 parg(:) = parg(:)*100.0
773 psab(:) = psab(:)*100.0
779 WHERE (pws(:,1)/=xundef)
780 zws(:) = pws(:,1)*xrd1*xrholw
781 zwp(:) = pwp(:,1)*pd2(:,1)*xrholw
782 ztl(:) = ptl(:,1)*pd2(:,1)*xrholw
812 pgelat(jj) = plat(jj)
813 pgelam(jj) = plon(jj)
814 pgemu(jj) = sin(plat(jj)*zpis180)
817 zevap(:) = (pevap(:)/xlvtt*xday)/(nechgu*3600.)
818 zevaptr(:) = pevaptr(:)*xday
826 idat = iyear*10000. + imonth*100. + iday
831 WHERE (ld_maskext(1:isize))
839 print *,
'Mean T2m increments ',sum(zt2inc)/ysc%U%NDIM_FULL
840 print *,
'Mean HU2m increments ',sum(zh2inc)/ysc%U%NDIM_FULL
845 CALL
oi_cacsts(isize,zt2inc,zh2inc,zwginc,pws_o, &
847 ztp,zwp,ztl,zsns,zts,zws, &
848 ztcls,zhcls,zucls,zvcls,psstc,pwpinc1,pwpinc2,pwpinc3, &
850 prrcl,prrsl,prrcn,prrsn,patmneb,zevap,zevaptr, &
851 pitm,pveg(:,1),palbf,pemisf,pz0f, &
852 piveg,parg,pd2(:,1),psab,plai(:,1),prsmin(:,1),pz0h, &
853 ptsc,ptpc,pwsc,pwpc,psnc, &
863 WHERE (pws(:,1)/=xundef)
864 zwsinc(:) = zws(:) - pws(:,1)*(xrd1*xrholw)
865 zwpinc(:) = zwp(:) - pwp(:,1)*(pd2(:,1)*xrholw)
866 ztlinc(:) = ztl(:) - ptl(:,1)*(pd2(:,1)*xrholw)
867 zsninc(:) = zsns(:) - psns(:,1)
873 WHERE (ld_maskext(1:isize))
880 WHERE (pws(:,1)/=xundef)
881 pws(:,1) = zws(:)/(xrd1*xrholw)
882 pwp(:,1) = zwp(:)/(pd2(:,1)*xrholw)
883 ptl(:,1) = ztl(:)/(pd2(:,1)*xrholw)
889 ointerp_lst(:) = .false.
890 ointerp_sst(:) = .false.
897 WHERE (pts(:,1)/=xundef)
898 ztsinc(:) = zts(:) - pts(:,1)
899 ztpinc(:) = ztp(:) - ptp(:,1)
907 IF (pitm(jj) < 0.5_jprb)
THEN
908 IF (psst(jj)/=xundef)
THEN
909 ztsinc(jj) = pts_o(jj) - psst(jj)
912 IF (plst(jj)/=xundef)
THEN
916 IF (psst(jj)/=xundef)
THEN
918 ointerp_sst(jj) = .true.
920 IF (plst(jj)/=xundef)
THEN
922 ointerp_lst(jj) = .true.
929 WHERE (ptrd3(:)/=xundef)
930 ptrd3(:) = ptrd3(:) + zt2inc(:)*z1s2pi
940 IF (llkeepextzone)
THEN
945 WHERE (ld_maskext(1:isize))
955 WHERE (ld_maskext(1:isize))
964 isize1 = count(.NOT. ld_maskext)
966 ALLOCATE (psst1(isize1), plst1(isize1), zsst1(isize1), zlst1(isize1), plat1(isize1), &
967 & plon1(isize1), zalt1(isize1), ointerp_lst1(isize1), ointerp_sst1(isize1))
972 IF (.NOT. ld_maskext(j1))
THEN
978 ointerp_lst1(jj) = ointerp_lst(j1)
979 ointerp_sst1(jj) = ointerp_sst(j1)
993 IF (.NOT. ld_maskext(j1))
THEN
1000 DEALLOCATE (psst1, plst1, zsst1, zlst1, plat1, plon1, &
1001 & zalt1, ointerp_lst1, ointerp_sst1)
1017 IF (nprintlev>0)
THEN
1019 IF (ointerp_lst(jj))
THEN
1020 print *,
'Lake surface temperature set to ',plst(jj),
'from nearest neighbour at J=',jj
1022 IF (ointerp_sst(jj))
THEN
1023 print *,
'Sea surface temperature set to ',psst(jj),
'from nearest neighbour at J=',jj
1030 print *,
'---------------------------------------------------------------'
1031 print *,
'Mean WS increments over NATURE ',sum(zwsinc,ysc%U%XNATURE > 0.)/ysc%U%NDIM_NATURE
1032 print *,
'Mean WP increments over NATURE ',sum(zwpinc,ysc%U%XNATURE > 0.)/ysc%U%NDIM_NATURE
1033 print *,
'Mean TS increments over NATURE ',sum(ztsinc,ysc%U%XNATURE > 0.)/ysc%U%NDIM_NATURE
1034 print *,
'Mean TP increments over NATURE ',sum(ztpinc,ysc%U%XNATURE > 0.)/ysc%U%NDIM_NATURE
1035 print *,
'Mean TL increments over NATURE ',sum(ztlinc,ysc%U%XNATURE > 0.)/ysc%U%NDIM_NATURE
1036 print *,
'Mean SN increments over NATURE ',sum(zsninc,ysc%U%XNATURE > 0.)/ysc%U%NDIM_NATURE
1037 print *,
'---------------------------------------------------------------'
1038 print *,
'Mean WS increments over SEA ',sum(zwsinc,ysc%U%XSEA > 0.)/ysc%U%NDIM_SEA
1039 print *,
'Mean WP increments over SEA ',sum(zwpinc,ysc%U%XSEA > 0.)/ysc%U%NDIM_SEA
1040 print *,
'Mean TS increments over SEA ',sum(ztsinc,ysc%U%XSEA > 0.)/ysc%U%NDIM_SEA
1041 print *,
'Mean TP increments over SEA ',sum(ztpinc,ysc%U%XSEA > 0.)/ysc%U%NDIM_SEA
1042 print *,
'Mean TL increments over SEA ',sum(ztlinc,ysc%U%XSEA > 0.)/ysc%U%NDIM_SEA
1043 print *,
'Mean SN increments over SEA ',sum(zsninc,ysc%U%XSEA > 0.)/ysc%U%NDIM_SEA
1044 print *,
'---------------------------------------------------------------'
1046 IF (.NOT. ldinline)
THEN
1054 .false.,.false.,.true.,.false.)
1056 yprogram,
'FULL ',
'SURF ',
'WRITE')
1062 CALL surfex_field_buf_set_record(ysurfex_cache_out, .false.)
1066 CALL surfex_field_buf_prealloc(ysurfex_cache_out)
1067 CALL surfex_field_buf_set_record(ysurfex_cache_out, .true.)
1083 DEALLOCATE(nwork_full)
1084 DEALLOCATE(xwork_full)
1085 DEALLOCATE(nwork2_full)
1086 DEALLOCATE(xwork2_full)
1088 IF (.NOT. ldinline)
THEN
1089 print *,
'after write in PREP file'
1093 IF (lhook) CALL dr_hook(
'OI_CONTROL', 1, zhook_handle)
1099 REAL(KIND=JPRB) :: zhook_handle
1101 IF (lhook) CALL dr_hook(
'OI_CONTROL:WRITE', 0, zhook_handle)
1103 CALL
dd(
'WG1', pws(:,1))
1106 yprefix=
'X_Y_WG1 (m3/m3) '
1108 yprogram,yvar,pws,iresp,hcomment=yprefix)
1110 CALL
dd(
'WG2', pwp(:,1))
1113 yprefix=
'X_Y_WG2 (m3/m3) '
1115 yprogram,yvar,pwp,iresp,hcomment=yprefix)
1117 CALL
dd(
'WGI2', ptl(:,1))
1120 yprefix=
'X_Y_WGI2 (m3/m3) '
1122 yprogram,yvar,ptl,iresp,hcomment=yprefix)
1124 CALL
dd(
'TG1', pts(:,1))
1127 yprefix=
'X_Y_TG1 (K) '
1129 yprogram,yvar,pts,iresp,hcomment=yprefix)
1131 CALL
dd(
'TG2', ptp(:,1))
1134 yprefix=
'X_Y_TG2 (K) '
1136 yprogram,yvar,ptp,iresp,hcomment=yprefix)
1138 CALL
dd(
'SST', psst)
1141 yprefix=
'X_Y_SST (K) '
1143 yprogram,yvar,psst,iresp,hcomment=yprefix)
1145 CALL
dd(
'TS_WATER', plst)
1148 yprefix=
'X_Y_TS_WATER (K) '
1150 yprogram,yvar,plst,iresp,hcomment=yprefix)
1152 IF (ysc%U%NSIZE_TOWN > 0 .AND. larome)
THEN
1153 CALL
dd(
'T_ROAD3', ptrd3)
1156 yprefix=
'X_Y_T_ROAD3 (K) '
1158 yprogram,yvar,ptrd3,iresp,hcomment=yprefix)
1161 CALL
dd(
'WSNOW_VEG1', psns(:,1))
1164 yprefix=
'X_Y_WSNOW_VEG1 (kg/m2) '
1166 yprogram,yvar,psns,iresp,hcomment=yprefix)
1168 IF (lhook) CALL dr_hook(
'OI_CONTROL:WRITE', 1, zhook_handle)
1170 END SUBROUTINE write
1173 CHARACTER(LEN=*),
INTENT (IN) :: cdn
1174 REAL,
INTENT (IN) :: px (:)
1176 REAL :: zx (size (px))
1178 REAL(KIND=JPRB) :: zhook_handle
1180 IF (lhook) CALL dr_hook(
'OI_CONTROL:DD', 0, zhook_handle)
1184 IF (lhook) CALL dr_hook(
'OI_CONTROL:DD', 1, zhook_handle)
1187 jn = count(.NOT. ld_maskext)
1188 zx(1:jn) = pack(px, .NOT. ld_maskext)
1194 WRITE (0, *) trim(cdn)//
" = "
1195 WRITE (0, *) jn, minval(zx(1:jn)), maxval(zx(1:jn))
1198 IF (lhook) CALL dr_hook(
'OI_CONTROL:DD', 1, zhook_handle)
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine set_surfex_filein(HPROGRAM, HMASK)
subroutine oi_bc_soil_moisture(KNBPT,
subroutine read_cover_n(DTCO, U, HPROGRAM)
subroutine oi_control(YSC, LDINLINE, P__SURFTEMPERATURE, P__SURFPREC_EAU_CON, P__SURFPREC_EAU_GEC, P__SURFPREC_NEI_CON, P__SURFPREC_NEI_GEC, P__ATMONEBUL_BASSE, P__SURFXEVAPOTRANSP, P__SURFFLU_LAT_MEVA, P__SURFACCPLUIE, P__SURFACCNEIGE, P__SURFACCGRAUPEL, P__CLSTEMPERATURE, P__CLSHUMI_RELATIVE, P__CLSVENT_ZONAL, P__CLSVENT_MERIDIEN, P__SURFIND_TERREMER, P__SURFRESERV_NEIGE, P__LON, P__LAT, LD_MASKEXT)
subroutine flag_update(DGI, DGU, ONOWRITE_CANOPY, OPGD, OPROVAR_TO_DIAG, OSELECT)
subroutine oi_latlon_conf_proj(NDIM, PLAT0, PLON0, PRPK, PBETA, PLATOR, PLONOR, PX, PY, PLAT, PLON)
subroutine oi_cacsts(KNBPT, PT2INC, PH2INC, PWGINC, PWS_O, KDAT, KSSSSS, PTP, PWP, PTL, PSNS, PTS, PWS, PTCLS, PHCLS, PUCLS, PVCLS, PSSTC, PWPINC1, PWPINC2, PWPINC3, PT2MBIAS, PH2MBIAS, PRRCL, PRRSL, PRRCN, PRRSN, PATMNEB, PEVAP, PEVAPTR, PITM, PVEG, PALBF, PEMISF, PZ0F, PIVEG, PARG, PD2, PSAB, PLAI, PRSMIN, PZ0H, PTSC, PTPC, PWSC, PWPC, PSNC, PGELAT, PGELAM, PGEMU)
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine read_all_namelists(YSC, HPROGRAM, HINIT, ONAM_READ)
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine end_io_surf_n(HPROGRAM)
subroutine get_1d_mask(KSIZE, KFRAC, PFRAC, KMASK)
subroutine get_size_full_n(U, HPROGRAM, KDIM_FULL, KSIZE_FULL)
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)
subroutine ini_data_cover(DTCO, U)
subroutine convert_cover_frac(DTCO, PCOVER, OCOVER, PSEA, PNATURE, PTOWN, PWATER)