7 HPROGRAM,HSCHEME,HSUBROUTINE,HFILENAME,HFIELD,OMULTITYPE)
55 USE modd_data_cover_par
, ONLY : jpcover, ntype
58 USE modi_open_namelist
59 USE modi_close_namelist
64 USE modi_pt_by_pt_treatment
67 USE modi_uncompress_field
76 USE modi_refresh_pgdwork
87 TYPE(
sso_t),
INTENT(INOUT) :: USS
89 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
90 CHARACTER(LEN=6),
INTENT(IN) :: HSCHEME
91 CHARACTER(LEN=6),
INTENT(IN) :: HSUBROUTINE
92 CHARACTER(LEN=28),
INTENT(IN) :: HFILENAME
93 CHARACTER(LEN=20),
INTENT(IN) :: HFIELD
94 LOGICAL,
OPTIONAL,
INTENT(IN) :: OMULTITYPE
99 CHARACTER(LEN=28) :: YFILENAME
100 CHARACTER(LEN=28) :: YFILEHDR
102 CHARACTER(LEN=7) :: YTYPE
104 CHARACTER(LEN=100):: YSTRING
105 CHARACTER(LEN=88 ):: YSTRING1
107 CHARACTER(LEN=2),
DIMENSION(1) :: YCPT16
108 CHARACTER(LEN=4),
DIMENSION(:),
ALLOCATABLE :: YCPT32
110 CHARACTER,
DIMENSION(:),
ALLOCATABLE :: YVALUE8
111 CHARACTER(LEN=2),
DIMENSION(:),
ALLOCATABLE :: YVALUE16
112 CHARACTER(LEN=4),
DIMENSION(:),
ALLOCATABLE :: YVALUE32R
113 CHARACTER(LEN=8),
DIMENSION(:),
ALLOCATABLE :: YVALUE64
115 REAL,
DIMENSION(1) :: ZCPT
121 REAL :: ZNODATA, ZNODATA2
130 INTEGER(KIND=2) :: INODATA, INODATA2
132 REAL,
DIMENSION(:),
ALLOCATABLE :: ZVALUE
133 REAL,
DIMENSION(:),
POINTER :: ZLAT
134 REAL,
DIMENSION(:),
POINTER :: ZLON
135 REAL(KIND=4),
DIMENSION(:),
ALLOCATABLE :: ZVALUE32
136 REAL,
DIMENSION(:),
ALLOCATABLE :: ZINTER
137 REAL,
DIMENSION(:),
ALLOCATABLE :: ZVALUE_WORK
138 REAL,
DIMENSION(:),
ALLOCATABLE :: ZLAT_WORK
139 REAL,
DIMENSION(:),
ALLOCATABLE :: ZLON_WORK
144 INTEGER :: IRECLENGTH
146 INTEGER :: IGLB, IGLBHDR
152 INTEGER :: ILINE1,ILINE2
156 INTEGER :: IWORK, IDEB, IPAS
157 INTEGER :: JLOOP, JLON, JLAT, JLINE, JCOL, JL, ICPT, INB, JTYPE
158 INTEGER :: ILINE_COMPRESS
159 INTEGER :: INB_LINE_READ
160 INTEGER(KIND=8) :: IPOS
162 INTEGER,
DIMENSION(360) :: IMASK
163 INTEGER,
DIMENSION(2) :: ICOL1, ICOL2
165 INTEGER(KIND=4),
DIMENSION(:),
ALLOCATABLE :: ICPT0
166 INTEGER(KIND=4),
DIMENSION(:),
ALLOCATABLE :: IVALUE32
167 INTEGER(KIND=8),
DIMENSION(:),
ALLOCATABLE :: IVALUE64
169 CHARACTER(LEN=6) :: YACCESS
171 LOGICAL :: GMULTITYPE, GCOMPRESS
173 REAL(KIND=JPRB) :: ZHOOK_HANDLE
185 yfilename=adjustl(adjustr(hfilename)//
'.dir')
186 yfilehdr =adjustl(adjustr(hfilename)//
'.hdr')
197 READ(iglbhdr,
'(A100)') ystring
198 IF (ystring(1:10)==
'recordtype')
EXIT 203 ystring1=ystring(12:100)
207 iindex=
index(ystring1,
'n')
213 iindex=
index(ystring1,
'8')
214 IF (iindex/=0) ibits=8
215 iindex=
index(ystring1,
'1')
216 IF (iindex/=0) ibits=16
217 iindex=
index(ystring1,
'3')
218 IF (iindex/=0) ibits=32
219 iindex=
index(ystring1,
'4')
220 IF (iindex/=0) ibits=64
230 CALL readhead(iglbhdr,zglblatmin,zglblatmax,zglblonmin,zglblonmax, &
231 inbline,inbcol,znodata,zdlat,zdlon,zlat,zlon,ierr,ifact,&
233 IF (ierr/=0)
CALL abor1_sfx(
'READ_DIRECT: PB IN FILE HEADER')
235 IF (gcompress .AND. (ytype/=
'INTEGER' .OR. ibits/=16)) &
236 CALL abor1_sfx(
'READ_DIRECT: COMPRESSED FILES ARE POSSIBLE ONLY WITH INTEGER 16 BYTES FOR THE MOMENT' 239 IF (
PRESENT(omultitype)) gmultitype = omultitype
255 ALLOCATE(
xall(u%NDIM_FULL,
sum(ntype),1))
260 IF(ytype==
'INTEGER')
THEN 261 IF(hfield(1:3)==
'CTI'.OR.hfield==
'sand fraction'.OR.hfield==
'clay fraction'.OR.
262 'organic carbon'.OR.hfield(1:4)==
'SAND'.OR. hfield(1:4)==
'CLAY'.OR.hfield
'SOC'THEN 264 ELSEIF (hfield==
'water depth')
THEN 278 inb_line_read = inbline / ((zglblatmax-zglblatmin)*2.)
279 IF (inb_line_read>60) inb_line_read = max(inb_line_read/3,60)
281 isize = inb_line_read * inbcol
283 ALLOCATE(zlat_work(isize))
284 ALLOCATE(zlon_work(isize))
285 ALLOCATE(zvalue_work(isize))
286 IF (gcompress.OR.gmultitype)
THEN 287 ALLOCATE (zinter(isize))
306 ireclength = ibits/8 * inbcol
307 ALLOCATE (zvalue(inbcol))
311 ALLOCATE(ycpt32(inbline))
312 ALLOCATE(icpt0(inbline))
315 IF (ytype==
'INTEGER' .AND. ibits== 8)
THEN 316 ALLOCATE (yvalue8(inbcol))
317 ELSEIF (ytype==
'INTEGER' .AND. ibits==16)
THEN 318 ALLOCATE (yvalue16(inbcol))
319 ELSEIF (ytype==
'INTEGER' .AND. ibits==32)
THEN 320 ALLOCATE (ivalue32(inbcol))
321 ELSEIF (ytype==
'INTEGER' .AND. ibits==64)
THEN 322 ALLOCATE (ivalue64(inbcol))
323 ELSEIF (ytype==
'REAL ' .AND. ibits==32)
THEN 324 ALLOCATE (yvalue32r(inbcol))
325 ELSEIF (ytype==
'REAL ' .AND. ibits==64)
THEN 326 ALLOCATE (yvalue64(inbcol))
338 CALL open_file(hprogram,iglb,yfilename,
'UNFORMATTED', &
339 haction=
'READ',haccess=yaccess,krecl=ireclength )
344 icpt0(:) = transfer(ycpt32(:),1_4,inbline)
356 zlatmin = (jlat-180)/2. - 0.5
357 zlatmax = (jlat-180)/2.
358 IF ( .NOT. any(zlat(:)<zlatmax .AND. zlat(:)>=zlatmin) ) cycle
367 ipas = ceiling(inb*1./
nproc)
378 IF (gcompress) iline_compress = 1
381 inodata2 = ishftc(inodata,8)
390 IF (ideb+jl>inb) cycle
393 jlat = imask(ideb+jl)
395 zlatmin = (jlat-180)/2. - 0.5
396 zlatmax = (jlat-180)/2.
403 iline1=max(min(int((zglblatmax-zdlat/2.-zlatmax)/zdlat+1.),inbline),0)
413 IF (gcompress.AND.(jl==ipas.OR.iline_compress<iline1))
THEN 417 ipos = ipos + icpt0(jloop)
420 ipos = ipos*2 + 1 + inbline*4
421 iline_compress = iline1
426 DO jline = iline1,iline2
441 IF (ytype==
'INTEGER' .AND. ibits== 8)
THEN 442 READ(iglb,rec=irec) yvalue8(:)
445 WHERE (zvalue(:)<0.) zvalue(:) = nint(256.+zvalue(:))
447 ELSE IF (ytype==
'INTEGER' .AND. ibits==16)
THEN 451 READ(iglb,pos=ipos) yvalue16(1:icpt0(jline))
454 READ(iglb) yvalue16(1:icpt0(jline))
456 zvalue(1:icpt0(jline))=yvalue16(1:icpt0(jline))
457 iline_compress = iline_compress + 1
459 READ(iglb,rec=irec) yvalue16(:)
460 zvalue(:)=yvalue16(:)
463 IF (icpt==0.AND..NOT.gcompress)
THEN 464 IF ( (hfield(1:5)==
"COVER" .AND. (any(zvalue>jpcover.AND.zvalue/
467 "SAND" .OR. hfield(1:4)==
"CLAY") .AND. &
468 (any(zvalue>100..AND.zvalue/=znodata) .OR. any(zvalue<0..AND.zvalue
469 "SOC" .AND. (any(zvalue>15000..AND.zvalue/=znodata
470 "COVER" .AND. hfield(1:4)/=
"SAND" .AND. hfield
"CLAY" 471 "SOC" .AND. any(zvalue>15000..AND.zvalue/=znodata
THEN 473 IF (gswap)
CALL abor1_sfx(
'READ_DIRECT: SWAP ALREADY DONE, CANNOT BE REDONE' 477 WRITE(iluout,*)
'*******************************************************************' 478 WRITE(iluout,*)
'Architecture of the machine needs to swap LITTLE_ENDIAN_ARCH to ' 480 WRITE(iluout,*)
'*******************************************************************' 483 IF (hfield(1:5)==
"COVER") u%LCOVER(:) = .false.
490 ELSE IF (ytype==
'INTEGER' .AND. ibits==32)
THEN 491 READ(iglb,rec=irec) ivalue32(:)
492 zvalue(:)=ivalue32(:)
494 ELSE IF (ytype==
'INTEGER' .AND. ibits==64)
THEN 495 READ(iglb,rec=irec) ivalue64(:)
496 zvalue(:)=ivalue64(:)
498 ELSE IF (ytype==
'REAL ' .AND. ibits==32)
THEN 499 READ(iglb,rec=irec) yvalue32r(:)
500 zvalue(:)=yvalue32r(:)
503 IF ( any(abs(zvalue)>0. .AND. abs(zvalue)<1.e-50) &
504 .OR. any(abs(zvalue)>1.e20) )
THEN 506 IF (gswap)
CALL abor1_sfx(
'READ_DIRECT: SWAP ALREADY DONE, CANNOT BE REDONE' 510 WRITE(iluout,*)
'*******************************************************************' 511 WRITE(iluout,*)
'Architecture of the machine needs to swap LITTLE_ENDIAN_ARCH to ' 513 WRITE(iluout,*)
'*******************************************************************' 521 ELSE IF (ytype==
'REAL ' .AND. ibits==64)
THEN 522 READ(iglb,rec=irec) yvalue64(:)
523 zvalue(:)=yvalue64(:)
526 IF ( any(abs(zvalue)>0. .AND. abs(zvalue)<1.e-50) &
527 .OR. any(abs(zvalue)>1.e20) )
THEN 529 IF (gswap)
CALL abor1_sfx(
'READ_DIRECT: SWAP ALREADY DONE, CANNOT BE REDONE' 533 WRITE(iluout,*)
'*******************************************************************' 534 WRITE(iluout,*)
'Architecture of the machine needs to swap LITTLE_ENDIAN_ARCH to ' 536 WRITE(iluout,*)
'*******************************************************************' 544 CALL abor1_sfx(
'READ_DIRECT1: DATA TYPE NOT SUPPORTED')
547 IF(hfield==
'CTI')
THEN 548 WHERE(zvalue(:)<0.0) zvalue(:)=znodata
552 WHERE (zvalue(1:icpt0(jline))<0.) zvalue(1:icpt0(jline)) = nint(32
566 zlonmin = jlon /2. - 0.5
577 zshift = 360. * nint((zlonmin-zglblonmin-180.*(1-
xsurf_epsilon))/3
579 zglblonmin = zglblonmin + zshift
580 zglblonmax = zglblonmax + zshift
585 icol1(1)=max(min(int((zlonmin-zglblonmin-zdlon/2.)/zdlon+1.),inbcol
593 icol2(2)=max(min(int((zlonmax-zglblonmin-zdlon/2.-360.)/zdlon+1.),inbcol
602 icol = icol2(jloop) - icol1(jloop) + 1
618 icolindex = jcol+icol1(jloop)-1
623 IF (abs(zvalue(icolindex)-znodata)<=1.e-10) cycle
629 zlat_work(iwork) = zlat(jline)
630 zlon_work(iwork) = zlon(icolindex)
631 zvalue_work(iwork) = zvalue(icolindex)
636 IF (.NOT.gmultitype.AND.ifact/=1)
THEN 637 WHERE(zvalue_work(1:iwork)/=znodata)
638 zvalue_work(1:iwork)=zvalue_work(1:iwork)/float(ifact)
647 iluout, zlat_work(1:iwork),zlon_work(1
666 DEALLOCATE(zlat_work )
667 DEALLOCATE(zlon_work )
668 DEALLOCATE(zvalue_work)
671 IF (
ALLOCATED(zinter))
DEALLOCATE (zinter)
672 IF (
ALLOCATED(yvalue8))
DEALLOCATE (yvalue8 )
673 IF (
ALLOCATED(yvalue16))
DEALLOCATE (yvalue16)
674 IF (
ALLOCATED(yvalue32r))
DEALLOCATE (yvalue32r)
675 IF (
ALLOCATED(yvalue64))
DEALLOCATE (yvalue64)
676 IF (
ALLOCATED(ivalue32))
DEALLOCATE (ivalue32)
677 IF (
ALLOCATED(ivalue64))
DEALLOCATE (ivalue64)
678 IF (
ALLOCATED(zvalue32))
DEALLOCATE (zvalue32)
real, dimension(:,:,:), allocatable xvallist
subroutine open_file(HPROGRAM, KUNIT, HFILE, HFORM, HACTION, HACCESS, KR
logical, dimension(720, 360) llatlonmask
integer, dimension(:,:), allocatable nsize_all
subroutine uncompress_field(KLONG, PSEUIL, PFIELD_IN, PFIELD_OUT)
real, dimension(:,:,:), allocatable xall
subroutine read_direct(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME, HFI
subroutine refresh_pgdwork(HSUBROUTINE)
subroutine abor1_sfx(YTEXT)
integer, dimension(:,:), allocatable nvalnbr
subroutine ini_ssowork(PMESHLENGTH, PDLAT, PDLON)
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine close_file(HPROGRAM, KUNIT)
subroutine pt_by_pt_treatment(UG, U, USS, KLUOUT, PLAT, PLON, PVALUE, HSUBROUTINE
subroutine get_luout(HPROGRAM, KLUOUT)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
integer, dimension(:,:,:), allocatable nvalcount
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)
subroutine readhead(KGLB, PGLBLATMIN, PGLBLATMAX, PGLBLONMIN, PGLBLONM
integer, parameter jpvalmax
logical, dimension(nnwl), parameter little_endian_arch