41 CHARACTER(*),
INTENT(IN) :: FNAME
43 INTEGER(GRIDMAN_SP),
INTENT(OUT) :: NSURF
45 REAL(GRIDMAN_DP),
ALLOCATABLE :: X(:,:)
47 REAL(GRIDMAN_DP),
ALLOCATABLE :: Y(:,:)
52 INTEGER(GRIDMAN_SP),
ALLOCATABLE :: ISRF(:)
54 INTEGER,
INTENT(OUT) :: IERR
57 INTEGER(GRIDMAN_SP) :: IAS,NLIM,ISF
59 REAL(GRIDMAN_DP) :: RLB,RTMP1,RTMP2
60 REAL(GRIDMAN_DP),
ALLOCATABLE :: XB(:,:),YB(:,:)
61 LOGICAL,
ALLOCATABLE :: LTAKE(:)
64 w
WRITE(
gridman_unit,*)
"Starting GRIDMAN_ADDSURF2D_READ_ARRAY"
69 OPEN (unit=3,status=
'OLD',access=
'SEQUENTIAL',
70 o form=
'FORMATTED',file=fname,iostat=io)
73 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF2D_READ_ARRAY: ",
74 o
"can not open ",trim(fname)
79 10
READ(3,
'(a200)',end=100,iostat=io) str
81 IF(str(1:3).NE.
'***')
GOTO 10
82 IF(index(str,
'3b').LT.1.AND.index(str,
'3B').LT.1)
GOTO 10
85 20
READ(3,
'(A200)',end=400,iostat=io) str
87 IF(str(1:1).EQ.
'*')
GOTO 20
91 READ(str,*,iostat=io) nlim
96 w
"WARNING from GRIDMAN_ADDSURF2D_READ_ARRAY: ",
97 w
"zero number of additional surfaces in file ",trim(fname)
104 ALLOCATE(xb(2,nlim),yb(2,nlim),ltake(nlim),stat=io)
106 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF2D_READ_ARRAY: ",
107 w
"cannot allocate temporary arrays"
116 30
READ(3,
'(A200)',end=500,iostat=io) str
118 IF(str(1:1).NE.
'*')
GOTO 30
121 READ(3,
'(A200)',end=500,iostat=io) str
124 IF(str(1:1).EQ.
'*'.OR.
125 f str(1:3).EQ.
'CH1'.OR.str(1:3).EQ.
'ch1'.OR.
126 f str(1:3).EQ.
'CH2'.OR.str(1:3).EQ.
'ch2')
GOTO 40
128 READ(str,*,iostat=io) rlb,rtmp1,rtmp2
130 READ(3,
'(A200)',end=500,iostat=io) str
134 IF (rlb.GE.2.0.AND.rlb.LT.3.)
THEN
137 READ (3,6664) xb(1,ias),yb(1,ias),rtmp1,
138 r xb(2,ias),yb(2,ias),rtmp2
148 w
"WARNING from GRIDMAN_ADDSURF2D_READ_ARRAY: ",
149 w
"no plane surfaces in file ",trim(fname)
151 DEALLOCATE(xb,yb,ltake,stat=io)
155 IF(
ALLOCATED(x))
DEALLOCATE(x,stat=io)
156 IF(
ALLOCATED(y))
DEALLOCATE(y,stat=io)
157 IF(
ALLOCATED(isrf))
DEALLOCATE(isrf,stat=io)
158 ALLOCATE(x(2,nsurf),y(2,nsurf),isrf(nsurf),stat=io)
160 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF2D_READ_ARRAY: ",
161 w
"cannot perform allocation"
163 DEALLOCATE(xb,yb,ltake,stat=io)
172 x(1:2,isf)=xb(1:2,ias)
173 y(1:2,isf)=yb(1:2,ias)
178 DEALLOCATE(xb,yb,ltake,stat=io)
181 w
WRITE(
gridman_unit,*)
"GRIDMAN_ADDSURF2D_READ_ARRAY finished"
185 100
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF2D_READ_ARRAY: ",
186 w
"no Block 3b is found in file ",trim(fname)
191 200
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF2D_READ_ARRAY: ",
192 w
"error while reading file ",trim(fname)
197 300
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF2D_READ_ARRAY: ",
198 w
"error while reading file ",trim(fname)
201 DEALLOCATE(xb,yb,ltake,stat=io)
205 400
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF2D_READ_ARRAY: ",
206 w
"Block 3b is incomplete in file ",trim(fname)
211 500
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF2D_READ_ARRAY: ",
212 w
"Block 3b is incomplete in file ",trim(fname)
214 DEALLOCATE(xb,yb,ltake,stat=io)
241 CHARACTER(*),
INTENT(IN) :: FNAME
243 INTEGER(GRIDMAN_SP),
INTENT(OUT) :: NSURF
245 REAL(GRIDMAN_DP),
ALLOCATABLE :: X(:,:)
247 REAL(GRIDMAN_DP),
ALLOCATABLE :: Y(:,:)
249 REAL(GRIDMAN_DP),
ALLOCATABLE :: Z(:,:)
254 INTEGER(GRIDMAN_SP),
ALLOCATABLE :: ISRF(:)
256 INTEGER,
INTENT(OUT) :: IERR
259 INTEGER(GRIDMAN_SP) :: IAS,NLIM,ISF
260 CHARACTER(200) :: STR
261 REAL(GRIDMAN_DP) :: RLB,RTMP1,RTMP2
262 REAL(GRIDMAN_DP),
ALLOCATABLE :: XB(:,:),YB(:,:),ZB(:,:)
263 LOGICAL,
ALLOCATABLE :: LTAKE(:)
266 w
WRITE(
gridman_unit,*)
"Starting GRIDMAN_ADDSURF3D_READ_ARRAY"
271 OPEN (unit=3,status=
'OLD',access=
'SEQUENTIAL',
272 o form=
'FORMATTED',file=fname,iostat=io)
275 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF3D_READ_ARRAY: ",
276 o
"can not open ",trim(fname)
281 10
READ(3,
'(a200)',end=100,iostat=io) str
283 IF(str(1:3).NE.
'***')
GOTO 10
284 IF(index(str,
'3b').LT.1.AND.index(str,
'3B').LT.1)
GOTO 10
287 20
READ(3,
'(A200)',end=400,iostat=io) str
289 IF(str(1:1).EQ.
'*')
GOTO 20
293 READ(str,*,iostat=io) nlim
298 w
"WARNING from GRIDMAN_ADDSURF3D_READ_ARRAY: ",
299 w
"zero number of additional surfaces in file ",trim(fname)
305 ALLOCATE(xb(3,nlim),yb(3,nlim),zb(3,nlim),ltake(nlim),stat=io)
307 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF2D_READ_ARRAY: ",
308 w
"cannot allocate temporary arrays"
317 30
READ(3,
'(A200)',end=500,iostat=io) str
319 IF(str(1:1).NE.
'*')
GOTO 30
322 READ(3,
'(A200)',end=500,iostat=io) str
325 IF(str(1:1).EQ.
'*'.OR.
326 f str(1:3).EQ.
'CH1'.OR.str(1:3).EQ.
'ch1'.OR.
327 f str(1:3).EQ.
'CH2'.OR.str(1:3).EQ.
'ch2')
GOTO 40
329 READ(str,*,iostat=io) rlb,rtmp1,rtmp2
331 READ(3,
'(A200)',end=500,iostat=io) str
335 IF (rlb.GE.3.0.AND.rlb.LT.4.)
THEN
338 READ (3,6664) xb(1,ias),yb(1,ias),zb(1,ias),
339 r xb(2,ias),yb(2,ias),zb(2,ias)
340 READ (3,6664) xb(3,ias),yb(3,ias),zb(3,ias)
350 w
"WARNING from GRIDMAN_ADDSURF3D_READ_ARRAY: ",
351 w
"no triangles in file ",trim(fname)
353 DEALLOCATE(xb,yb,zb,ltake,stat=io)
358 IF(
ALLOCATED(x))
DEALLOCATE(x,stat=io)
359 IF(
ALLOCATED(y))
DEALLOCATE(y,stat=io)
360 IF(
ALLOCATED(z))
DEALLOCATE(z,stat=io)
361 IF(
ALLOCATED(isrf))
DEALLOCATE(isrf,stat=io)
362 ALLOCATE(x(3,nsurf),y(3,nsurf),z(3,nsurf),isrf(nsurf),stat=io)
364 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF3D_READ_ARRAY: ",
365 w
"cannot perform allocation"
367 DEALLOCATE(xb,yb,zb,ltake,stat=io)
376 x(1:3,isf)=xb(1:3,ias)
377 y(1:3,isf)=yb(1:3,ias)
378 z(1:3,isf)=zb(1:3,ias)
383 DEALLOCATE(xb,yb,zb,ltake,stat=io)
386 w
WRITE(
gridman_unit,*)
"GRIDMAN_ADDSURF3D_READ_ARRAY finished"
390 100
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF3D_READ_ARRAY: ",
391 w
"no Block 3b is found in file ",trim(fname)
396 200
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF3D_READ_ARRAY: ",
397 w
"error while reading file ",trim(fname)
402 300
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF3D_READ_ARRAY: ",
403 w
"error while reading file ",trim(fname)
406 DEALLOCATE(xb,yb,zb,ltake,stat=io)
410 400
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF3D_READ_ARRAY: ",
411 w
"Block 3b is incomplete in file ",trim(fname)
416 500
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_ADDSURF3D_READ_ARRAY: ",
417 w
"Block 3b is incomplete in file ",trim(fname)
419 DEALLOCATE(xb,yb,zb,ltake,stat=io)
integer, save, public gridman_unit
Index of the standard output unit.
integer, parameter, public gridman_dp
Kind parameter for real numbers.
logical, save, public gridman_dbg
Switch for debugging mode.
Definition of data types, global constants and variables.
integer, parameter, public gridman_sp
Kind parameter for integer numbers.