27 s npoints,ncells,nvertex,nd,
28 s x,ifirst,lvertex,ivertex,ctype,
29 s ncs,ncv,nps,npv,ierr,
32 s point_scalar,psname,
33 s point_vector,pvname)
41 CHARACTER(*),
INTENT(IN) :: FNAME
43 CHARACTER(*),
INTENT(IN) :: HEADER
45 INTEGER(GRIDMAN_SP),
INTENT(IN) :: NPOINTS
47 INTEGER(GRIDMAN_SP),
INTENT(IN) :: NCELLS
49 INTEGER(GRIDMAN_SP),
INTENT(IN) :: NVERTEX
53 INTEGER,
INTENT(IN) :: ND
55 REAL(GRIDMAN_DP),
INTENT(IN) :: X(nd,npoints)
57 INTEGER(GRIDMAN_SP),
INTENT(IN) :: IFIRST(ncells)
59 INTEGER(GRIDMAN_SP),
INTENT(IN) :: LVERTEX(ncells)
65 INTEGER(GRIDMAN_SP),
INTENT(IN) :: IVERTEX(nvertex)
67 INTEGER,
INTENT(IN) :: CTYPE(ncells)
69 INTEGER,
INTENT(IN) :: NCS
71 INTEGER,
INTENT(IN) :: NCV
73 INTEGER,
INTENT(IN) :: NPS
75 INTEGER,
INTENT(IN) :: NPV
77 INTEGER,
INTENT(OUT) :: IERR
79 REAL(GRIDMAN_DP),
INTENT(IN),
OPTIONAL :: CELL_SCALAR(ncells,ncs)
81 CHARACTER(*),
INTENT(IN),
OPTIONAL :: CSNAME(ncs)
83 REAL(GRIDMAN_DP),
INTENT(IN),
OPTIONAL ::
84 r cell_vector(nd,ncells,ncv)
86 CHARACTER(*),
INTENT(IN),
OPTIONAL :: CVNAME(ncv)
88 REAL(GRIDMAN_DP),
INTENT(IN),
OPTIONAL :: POINT_SCALAR(npoints,nps)
90 CHARACTER(*),
INTENT(IN),
OPTIONAL :: PSNAME(nps)
92 REAL(GRIDMAN_DP),
INTENT(IN),
OPTIONAL ::
93 r point_vector(nd,npoints,npv)
95 CHARACTER(*),
INTENT(IN),
OPTIONAL :: PVNAME(npv)
98 CHARACTER*64 :: DATANAME
106 OPEN(3,file=fname,status=
'REPLACE',iostat=io)
109 w
"can not open file ",
110 w fname(1:len_trim(fname))
117 s x,ifirst,lvertex,ivertex,ctype,ierr)
118 IF(ierr.NE.0)
GOTO 100
122 IF(
PRESENT(cell_scalar).OR.
PRESENT(cell_vector))
THEN
123 WRITE(3,
'(A)',iostat=io)
' '
125 WRITE(3,
'(A10,I7)',iostat=io)
"CELL_DATA ",ncells
129 IF(
PRESENT(cell_scalar))
THEN
133 w
"incorrect number of cell scalars"
137 IF(.NOT.
PRESENT(csname))
THEN
138 WRITE(
gridman_unit,*)
"WARNING from GRIDMAN_VTK_WRITE: ",
139 w
"names of Cell Scalars are not defined"
142 IF(
PRESENT(csname))
THEN
145 WRITE(dataname,
'(A11,I4.4)')
"CELL_SCALAR",id
148 c cell_scalar(:,id),ierr)
149 IF(ierr.NE.0)
GOTO 100
153 IF(
PRESENT(cell_vector))
THEN
157 w
"incorrect number of cell vectors"
161 IF(.NOT.
PRESENT(cvname))
THEN
162 WRITE(
gridman_unit,*)
"WARNING from GRIDMAN_VTK_WRITE: ",
163 w
"names of Cell Vectors are not defined"
166 IF(
PRESENT(cvname))
THEN
169 WRITE(dataname,
'(A11,I4.4)')
"CELL_VECTOR",id
172 c cell_vector(:,:,id),ierr)
173 IF(ierr.NE.0)
GOTO 100
179 IF(
PRESENT(point_scalar).OR.
PRESENT(point_vector))
THEN
180 WRITE(3,
'(A)',iostat=io)
' '
182 WRITE(3,
'(A10,I7)',iostat=io)
"POINT_DATA ",npoints
186 IF(
PRESENT(point_scalar))
THEN
190 w
"incorrect number of point scalars"
194 IF(.NOT.
PRESENT(psname))
THEN
195 WRITE(
gridman_unit,*)
"WARNING from GRIDMAN_VTK_WRITE: ",
196 w
"names of Point Scalars are not defined"
199 IF(
PRESENT(psname))
THEN
202 WRITE(dataname,
'(A12,I4.4)')
"POINT_SCALAR",id
205 c point_scalar(:,id),ierr)
206 IF(ierr.NE.0)
GOTO 100
210 IF(
PRESENT(point_vector))
THEN
214 w
"incorrect number of point vectors"
218 IF(.NOT.
PRESENT(pvname))
THEN
219 WRITE(
gridman_unit,*)
"WARNING from GRIDMAN_VTK_WRITE: ",
220 w
"names of Point Vectors are not defined"
223 IF(
PRESENT(pvname))
THEN
226 WRITE(dataname,
'(A12,I4.4)')
"POINT_VECTOR",id
229 c point_vector(:,:,id),ierr)
230 IF(ierr.NE.0)
GOTO 100
241 100
WRITE(
gridman_unit,*)
"GRIDMAN_VTK_WRITE terminated"
242 WRITE(
gridman_unit,*)
" File ", fname(1:len_trim(fname))
246 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
247 w
"can not write to file ",
248 w fname(1:len_trim(fname))
259 s npoints,ncells,nvertex,nd,
260 s x,ifirst,lvertex,ivertex,
264 INTRINSIC len_trim,min
266 INTEGER,
INTENT(IN) :: IOUT
268 CHARACTER(*),
INTENT(IN) :: HEADER
270 INTEGER(GRIDMAN_SP),
INTENT(IN) :: NPOINTS
272 INTEGER(GRIDMAN_SP),
INTENT(IN) :: NCELLS
274 INTEGER(GRIDMAN_SP),
INTENT(IN) :: NVERTEX
278 INTEGER,
INTENT(IN) :: ND
280 REAL(GRIDMAN_DP),
INTENT(IN) :: X(nd,npoints)
282 INTEGER(GRIDMAN_SP),
INTENT(IN) :: IFIRST(ncells)
284 INTEGER(GRIDMAN_SP),
INTENT(IN) :: LVERTEX(ncells)
290 INTEGER(GRIDMAN_SP),
INTENT(IN) :: IVERTEX(nvertex)
292 INTEGER,
INTENT(IN) :: CTYPE(ncells)
294 INTEGER,
INTENT(OUT) :: IERR
296 INTEGER(GRIDMAN_SP) :: IPOINT,ICELL,IV1,IV2
301 w
WRITE(
gridman_unit,*)
"Starting GRIDMAN_VTK_WRITE_GRID"
305 IF(npoints.LT.1.OR.ncells.LT.1.OR.nvertex.LT.npoints)
THEN
306 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
307 w
" wrong input dimensions"
309 w npoints, ncells, nvertex
315 IF(nd.NE.2.AND.nd.NE.3)
THEN
316 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
317 w
"wrong dimensionality of coordinates"
322 WRITE(iout,
'(A)',iostat=io)
"# vtk DataFile Version 2.0"
324 WRITE(iout,
'(A)',iostat=io) header(1:min(len_trim(header),256))
326 WRITE(iout,
'(A)',iostat=io)
"ASCII"
328 WRITE(iout,
'(A)',iostat=io)
"DATASET UNSTRUCTURED_GRID"
332 WRITE(iout,
'(A7,I7,A7)',iostat=io)
"POINTS ",npoints,
" float"
336 WRITE(iout,
'(2E15.7,F4.1)',iostat=io) x(1:2,ipoint),0.
339 ELSE IF(nd.EQ.3)
THEN
341 WRITE(iout,
'(3E15.7)',iostat=io) x(1:3,ipoint)
347 WRITE(iout,
'(A)',iostat=io)
' '
349 WRITE(iout,
'(A6,2I7)',iostat=io)
"CELLS ",ncells,nvertex+ncells
354 IF(iv1.LT.ifirst(icell-1).OR.iv1.GT.nvertex)
THEN
355 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
356 w
" wrong first index"
358 w
" ICELL, IFIRST(ICELL-1),IFIRST(ICELL), NVERTEX",
359 w icell, ifirst(icell-1), iv1, nvertex
364 IF(iv1.LT.1.OR.iv1.GT.nvertex)
THEN
365 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
366 w
" first index out of range"
367 WRITE(
gridman_unit,*)
" ICELL, IFIRST(ICELL), NVERTEX ",
368 w icell, ifirst(icell), nvertex
373 IF(lvertex(icell).LT.1)
THEN
374 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
375 w
" non-positive number of vertices"
376 WRITE(
gridman_unit,*)
" ICELL, LVERTEX ",icell,lvertex(icell)
380 iv2=iv1+lvertex(icell)-1
381 IF(iv2.GT.nvertex)
THEN
382 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
383 w
" last index out of range"
384 WRITE(
gridman_unit,*)
" ICELL, IFIRST, LVERTEX, NVERTEX ",
385 w icell,ifirst(icell),lvertex(icell),nvertex
389 WRITE(frm,210) lvertex(icell)
390 210
FORMAT(
'(I4,',i4,
'I7)')
391 WRITE(iout,frm,iostat=io) lvertex(icell),ivertex(iv1:iv2)
396 WRITE(iout,
'(A)',iostat=io)
' '
398 WRITE(iout,
'(A11,I7)',iostat=io)
"CELL_TYPES ",ncells
401 IF(ctype(icell).EQ.1)
THEN
402 IF(lvertex(icell).NE.1)
THEN
403 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
404 w
"mismatch between cell type and number of vertices"
407 w icell, ctype(icell),lvertex(icell)
411 ELSE IF(ctype(icell).EQ.3)
THEN
412 IF(lvertex(icell).NE.2)
THEN
413 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
414 w
"mismatch between cell type and number of vertices"
417 w icell, ctype(icell),lvertex(icell)
421 ELSE IF(ctype(icell).EQ.5)
THEN
422 IF(lvertex(icell).NE.3)
THEN
423 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
424 w
"mismatch between cell type and number of vertices"
425 WRITE(
gridman_unit,*)
"VTK_TRIANGLE must have 3 vertices"
427 w icell, ctype(icell),lvertex(icell)
431 ELSE IF(ctype(icell).EQ.7)
THEN
432 IF(lvertex(icell).LT.3)
THEN
433 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
434 w
"mismatch between cell type and number of vertices"
435 WRITE(
gridman_unit,*)
"VTK_POLYGON must have >2 vertices"
437 w icell, ctype(icell),lvertex(icell)
441 ELSE IF(ctype(icell).EQ.9)
THEN
442 IF(lvertex(icell).NE.4)
THEN
443 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
444 w
"mismatch between cell type and number of vertices"
447 w icell, ctype(icell),lvertex(icell)
451 ELSE IF(ctype(icell).EQ.10)
THEN
452 IF(lvertex(icell).NE.4)
THEN
453 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
454 w
"mismatch between cell type and number of vertices"
457 w icell, ctype(icell),lvertex(icell)
461 ELSE IF(ctype(icell).EQ.12)
THEN
462 IF(lvertex(icell).NE.8)
THEN
463 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
464 w
"mismatch between cell type and number of vertices"
465 WRITE(
gridman_unit,*)
"VTK_HEXAHEDRON must have 8 vertices"
467 w icell, ctype(icell),lvertex(icell)
471 ELSE IF(ctype(icell).EQ.13)
THEN
472 IF(lvertex(icell).NE.6)
THEN
473 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
474 w
"mismatch between cell type and number of vertices"
477 w icell, ctype(icell),lvertex(icell)
481 ELSE IF(ctype(icell).EQ.14)
THEN
482 IF(lvertex(icell).NE.5)
THEN
483 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
484 w
"mismatch between cell type and number of vertices"
485 WRITE(
gridman_unit,*)
"VTK_PYRAMID must have 5 vertices"
487 w icell, ctype(icell),lvertex(icell)
492 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
493 w
"unsupported cell type"
494 WRITE(
gridman_unit,*)
" ICELL, CELL_TYPE ", icell,ctype(icell)
498 WRITE(iout,
'(I3)',iostat=io) ctype(icell)
503 w
WRITE(
gridman_unit,*)
"GRIDMAN_VTK_WRITE_GRID finished"
508 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_GRID: ",
509 w
"can not write to file"
520 INTRINSIC abs,min,max
522 INTEGER,
INTENT(IN) :: IOUT
524 CHARACTER(*),
INTENT(IN) :: DATANAME
526 INTEGER(GRIDMAN_SP),
INTENT(IN) :: N
528 REAL(GRIDMAN_DP),
INTENT(IN) :: S(n)
530 INTEGER,
INTENT(OUT) :: IERR
532 INTEGER(GRIDMAN_SP) :: I
534 REAL(GRIDMAN_DP) :: X
537 w
WRITE(
gridman_unit,*)
"Starting GRIDMAN_VTK_WRITE_SCALARS"
542 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_SCALARS: ",
543 w
"wrong input dimension N ",n
546 WRITE(iout,
'(A8,A,A6)',iostat=io)
'SCALARS ',dataname,
' float'
548 WRITE(iout,
'(A)',iostat=io)
'LOOKUP_TABLE default'
553 IF(abs(x).LT.1e-98_gridman_dp) x=0.
554 x=min(x,1e98_gridman_dp)
555 x=max(x,-1e98_gridman_dp)
556 WRITE(iout,
'(E15.7)',iostat=io) x
560 w
WRITE(
gridman_unit,*)
"GRIDMAN_VTK_WRITE_SCALARS finished"
565 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_SCALARS: ",
566 w
"can not write to file"
577 INTRINSIC abs,min,max
579 INTEGER,
INTENT(IN) :: IOUT
581 CHARACTER(*) :: DATANAME
583 INTEGER(GRIDMAN_SP),
INTENT(IN) :: N
585 INTEGER,
INTENT(IN) :: ND
587 REAL(GRIDMAN_DP) :: V(nd,n)
589 INTEGER,
INTENT(OUT) :: IERR
591 INTEGER(GRIDMAN_SP) :: I,K
593 REAL(GRIDMAN_DP) :: X(3)
596 w
WRITE(
gridman_unit,*)
"Starting GRIDMAN_VTK_WRITE_VECTORS"
601 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_VECTORS: ",
602 w
"wrong data array length N ",n
605 IF(nd.NE.2.AND.nd.NE.3)
THEN
606 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_VECTORS: ",
607 w
"wrong dimensionality of vectors"
611 WRITE(iout,
'(A8,A,A6)',iostat=io)
'VECTORS ',dataname,
' float'
616 IF(abs(x(k)).LT.1.e-98_gridman_dp) x(k)=0.
617 x(k)=min(x(k),1.e98_gridman_dp)
618 x(k)=max(x(k),-1.e98_gridman_dp)
621 WRITE(iout,
'(3E15.7)',iostat=io) x(1:3)
623 WRITE(iout,
'(2E15.7,F4.1)',iostat=io) x(1:2),0.
629 w
WRITE(
gridman_unit,*)
"GRIDMAN_VTK_WRITE_VECTORS finished"
634 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_VTK_WRITE_VECTORS: ",
635 w
"can not write to file"
integer, save, public gridman_unit
Index of the standard output unit.
integer, parameter, public gridman_dp
Kind parameter for real numbers.
Explicit interfaces to GRIDMAN subroutines and functions.
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.