GRIDMAN
grid managment library
test_vtk.f
Go to the documentation of this file.
1 C> @file tests/test_vtk.f
2 C> Unit test for the converter and writers for VTK format
3 C GRIDMAN, grid managment library. Author: Vladislav Kotov, v.kotov@fz-juelich.de
4 
5 ! Copyright (c) 2017 Forschungszentrum Juelich GmbH
6 ! Vladislav Kotov
7 !
8 ! This file is part of GRIDMAN.
9 !
10 ! GRIDMAN is free software: you can redistribute it and/or modify
11 ! it under the terms of the GNU General Public License as published by
12 ! the Free Software Foundation, either version 3 of the License, or
13 ! (at your option) any later version.
14 !
15 ! GRIDMAN is distributed in the hope that it will be useful,
16 ! but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ! GNU General Public License for more details.
19 !
20 ! You should have received a copy of the GNU General Public License
21 ! along with GRIDMAN. If not, see <http://www.gnu.org/licenses/>.
22 
23  PROGRAM test_vtk
24  USE gridman
25  USE gridman_lib
26  IMPLICIT NONE
27  TYPE(gridman_grid) :: grid
28  INTEGER(GRIDMAN_SP) :: npoints,ncells,nvertex,i,j,k,
29  i ncells0,ncount,ie
30  INTEGER :: ierr,res,itmp
31  REAL(GRIDMAN_DP),ALLOCATABLE :: x(:,:)
32  INTEGER(GRIDMAN_SP),ALLOCATABLE :: ifirst(:),lvertex(:),ivertex(:)
33  INTEGER,ALLOCATABLE :: ctype(:)
34  CHARACTER*32 :: dataname(3)
35  REAL(GRIDMAN_DP),ALLOCATABLE :: cell_scalars(:,:),
36  r point_scalars(:,:),
37  r cell_vectors(:,:,:),
38  r point_vectors(:,:,:)
39  INTEGER,PARAMETER :: ntor=4 !NUMBER OF TOROIDAL CELLS
40  REAL(GRIDMAN_DP) :: alpha(ntor+1),da
41 
42 C*****************************************************************************
43 C PURE GRID
44 C*****************************************************************************
45 
46  gridman_check=.true.
47 
48 C CREATE GRID
49  CALL grid_example1(grid,ierr)
50  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
51  grid%X=grid%X*100.
52 
53 C PRINT GRID
54  WRITE(*,*) "Grid A"
55  CALL gridman_vtk_grid2d_write('testA.vtk','Grid only',
56  s grid,grid%NCELLS,0,0,0,0,ierr)
57  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
58 
59  CALL gridman_2dgrid2vtk(grid,npoints,ncells,nvertex,x,
60  s ifirst,lvertex,ivertex,ctype,ierr,0)
61  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
62 
63  itmp=ctype(2)
64  ctype(2)=5
65  CALL gridman_vtk_write('test.vtk','Grid only',
66  s npoints,ncells,nvertex,2,
67  s x,ifirst,lvertex,ivertex,ctype,
68  s 0,0,0,0,ierr)
69  IF(ierr.NE.100) THEN
70  WRITE(*,*) "ERRROR detected in GRIDMAN_VTK_WRITE (1)"
71  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
72  stop "TEST_VTK TERMINATED"
73  END IF
74  ctype(2)=itmp
75  itmp=ctype(7)
76  ctype(7)=5
77  CALL gridman_vtk_write('test.vtk','Grid only',
78  s npoints,ncells,nvertex,2,
79  s x,ifirst,lvertex,ivertex,ctype,
80  s 0,0,0,0,ierr)
81  IF(ierr.NE.100) THEN
82  WRITE(*,*) "ERRROR detected in GRIDMAN_VTK_WRITE (2)"
83  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
84  stop "TEST_VTK TERMINATED"
85  END IF
86  ctype(7)=itmp
87 
88  itmp=ctype(1)
89  ctype(1)=20
90  CALL gridman_vtk_write('test.vtk','Grid only',
91  s npoints,ncells,nvertex,2,
92  s x,ifirst,lvertex,ivertex,ctype,
93  s 0,0,0,0,ierr)
94  IF(ierr.NE.100) THEN
95  WRITE(*,*) "ERRROR detected in GRIDMAN_VTK_WRITE (3)"
96  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
97  stop "TEST_VTK TERMINATED"
98  END IF
99  ctype(1)=itmp
100 
101 C*****************************************************************************
102 C CELL SCALARS
103 C*****************************************************************************
104  WRITE(*,*) "Grid B"
105  ALLOCATE(cell_scalars(grid%NCELLS,2))
106  DO i=1,grid%NCELLS
107  cell_scalars(i,1)=i
108  END DO
109  dataname(1)='CellNumbers'
110  CALL gridman_vtk_write('testB.vtk','Grid + cell scalar',
111  s npoints,ncells,nvertex,2,
112  s x,ifirst,lvertex,ivertex,ctype,
113  s -1,0,0,0,ierr,cell_scalar=cell_scalars)
114  IF(ierr.NE.100) THEN
115  WRITE(*,*) "ERRROR detected in GRIDMAN_VTK_WRITE (4)"
116  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
117  stop "TEST_VTK TERMINATED"
118  END IF
119 
120  CALL gridman_vtk_grid2d_write('testB.vtk','Grid + cell scalar',
121  s grid,grid%NCELLS,1,0,0,0,ierr,
122  s cell_scalar=cell_scalars,csname=dataname)
123  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
124 
125  WRITE(*,*) "Grid C"
126  DO i=1,grid%NCELLS
127  cell_scalars(i,2)=-i
128  END DO
129  dataname(2)='MinusCellNumbers'
130  CALL gridman_vtk_grid2d_write('testC.vtk','Grid + cell scalars',
131  s grid,grid%NCELLS,2,0,0,0,ierr,
132  s cell_scalar=cell_scalars,csname=dataname)
133 
134 C*****************************************************************************
135 C POINT SCALARS
136 C*****************************************************************************
137  WRITE(*,*) "Grid D"
138  ALLOCATE(point_scalars(grid%NPOINTS,2))
139  DO i=1,grid%NPOINTS
140  point_scalars(i,1)=i
141  END DO
142  dataname(1)='PointNumbers'
143  CALL gridman_vtk_write('testD.vtk','Grid + point scalar ',
144  s npoints,ncells,nvertex,2,
145  s x,ifirst,lvertex,ivertex,ctype,
146  s 0,0,-1,0,ierr,point_scalar=point_scalars)
147  IF(ierr.NE.100) THEN
148  WRITE(*,*) "ERRROR detected in GRIDMAN_VTK_WRITE (5)"
149  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
150  stop "TEST_VTK TERMINATED"
151  END IF
152 
153  CALL gridman_vtk_grid2d_write('testD.vtk','Grid + point scalar ',
154  s grid,grid%NCELLS,0,0,1,0,ierr,
155  s point_scalar=point_scalars,psname=dataname)
156  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
157 
158  WRITE(*,*) "Grid E"
159  DO i=1,grid%NPOINTS
160  point_scalars(i,2)=-i
161  END DO
162  dataname(2)='MinusPointNumbers'
163  CALL gridman_vtk_grid2d_write('testE.vtk','Grid + point scalars',
164  s grid,grid%NCELLS,0,0,2,0,ierr,
165  s point_scalar=point_scalars,psname=dataname)
166  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
167 
168 C*****************************************************************************
169 C CELL VECTORS
170 C*****************************************************************************
171  WRITE(*,*) "Grid F"
172  ALLOCATE(cell_vectors(2,grid%NCELLS,2))
173  DO i=1,grid%NCELLS
174  cell_vectors(1,i,1)=100.
175  cell_vectors(2,i,1)=100.
176  END DO
177  dataname(1)='45degVector'
178  CALL gridman_vtk_write('testF.vtk','Grid + cell vector',
179  s npoints,ncells,nvertex,2,
180  s x,ifirst,lvertex,ivertex,ctype,
181  s 0,0,0,0,ierr,cell_vector=cell_vectors)
182  IF(ierr.NE.100) THEN
183  WRITE(*,*) "ERRROR detected in GRIDMAN_VTK_WRITE (6)"
184  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
185  stop "TEST_VTK TERMINATED"
186  END IF
187  CALL gridman_vtk_grid2d_write('testF.vtk','Grid + cell vector',
188  s grid,grid%NCELLS,0,1,0,0,ierr,
189  s cell_vector=cell_vectors,cvname=dataname)
190  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
191 
192  WRITE(*,*) "Grid G"
193  DO i=1,grid%NCELLS
194  cell_vectors(1,i,2)=-100.
195  cell_vectors(2,i,2)=-100.
196  END DO
197  dataname(2)='minus45degVector'
198  CALL gridman_vtk_grid2d_write('testG.vtk','Grid + cell vectors',
199  s grid,grid%NCELLS,0,2,0,0,ierr,
200  s cell_vector=cell_vectors,cvname=dataname)
201  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
202 
203 C*****************************************************************************
204 C POINT VECTORS
205 C*****************************************************************************
206  WRITE(*,*) "Grid H"
207  ALLOCATE(point_vectors(2,grid%NPOINTS,2))
208  DO i=1,grid%NPOINTS
209  point_vectors(1,i,1)=100.
210  point_vectors(2,i,1)=0.
211  END DO
212  dataname(1)='Horizontal'
213  CALL gridman_vtk_write('testH.vtk','Grid + point vector',
214  s npoints,ncells,nvertex,2,
215  s x,ifirst,lvertex,ivertex,ctype,
216  s 0,0,0,0,ierr,point_vector=point_vectors)
217  IF(ierr.NE.100) THEN
218  WRITE(*,*) "ERRROR detected in GRIDMAN_VTK_WRITE (7)"
219  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
220  stop "TEST_VTK TERMINATED"
221  END IF
222  CALL gridman_vtk_grid2d_write('testH.vtk','Grid + point vector',
223  s grid,grid%NCELLS,0,0,0,1,ierr,
224  s point_vector=point_vectors,pvname=dataname)
225  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
226 
227  WRITE(*,*) "Grid I"
228  DO i=1,grid%NPOINTS
229  point_vectors(1,i,2)=0.
230  point_vectors(2,i,2)=100.
231  END DO
232  dataname(2)='Vertical'
233 
234  CALL gridman_vtk_grid2d_write('testI.vtk','Grid + point vectors',
235  s grid,grid%NCELLS,0,0,0,2,ierr,
236  s point_vector=point_vectors,pvname=dataname)
237  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
238 
239 C*****************************************************************************
240 C CELL SCALARS AND VECTORS
241 C*****************************************************************************
242  WRITE(*,*) "Grid J"
243  CALL gridman_vtk_grid2d_write('testJ.vtk',
244  s 'Grid + cell scalars + cell vectors',
245  s grid,grid%NCELLS,2,2,0,0,ierr,
246  s cell_scalar=cell_scalars,
247  s cell_vector=cell_vectors)
248  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
249 
250 C*****************************************************************************
251 C ALL TOGETHER
252 C*****************************************************************************
253  WRITE(*,*) "Grid K"
254  CALL gridman_vtk_write('testK.vtk',
255  s 'Grid + cell scalars & vectors + point scalars & vectors',
256  s npoints,ncells,nvertex,2,
257  s x,ifirst,lvertex,ivertex,ctype,
258  s 2,2,2,2,ierr,
259  s cell_scalar=cell_scalars,
260  s cell_vector=cell_vectors,
261  s point_scalar=point_scalars,
262  s point_vector=point_vectors)
263  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
264 
265  CALL gridman_vtk_grid2d_write('testK.vtk',
266  s 'Grid + cell scalars & vectors + point scalars & vectors',
267  s grid,grid%NCELLS,2,2,2,2,ierr,
268  s cell_scalar=cell_scalars,
269  s cell_vector=cell_vectors,
270  s point_scalar=point_scalars,
271  s point_vector=point_vectors)
272  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
273 
274 C*****************************************************************************
275 C 3D GRID
276 C*****************************************************************************
277  WRITE(*,*) "3D"
278  da=0.3
279  alpha(1)=0.
280  DO i=2,ntor+1
281  alpha(i)=alpha(i-1)+da
282  END DO
283 
284  DEALLOCATE(ifirst,lvertex,ivertex,ctype)
285  CALL gridman_2dgrid2vtk(grid,npoints,ncells,nvertex,x,
286  s ifirst,lvertex,ivertex,ctype,ierr,
287  s ntor+1,alpha)
288  IF(ierr.NE.100) THEN
289  WRITE(*,*) "ERRROR detected GRIDMAN_VTK_WRITE (8)"
290  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
291  stop "TEST_VTK TERMINATED"
292  END IF
293 
294 C EDIT GRID - CONVERT SOME CELLS INTO "FREE" EDGES
295  grid%CELLS(:,23)=0
296  grid%CELLS(:,22)=0
297  grid%CELLS(:,21)=0
298  grid%NCELLS=9
299  IF(grid%CELLS(1,19).EQ.10) grid%CELLS(1,19)=0
300  IF(grid%CELLS(2,19).EQ.10) grid%CELLS(2,19)=0
301  IF(grid%CELLS(1,20).EQ.10) grid%CELLS(1,20)=0
302  IF(grid%CELLS(2,20).EQ.10) grid%CELLS(2,20)=0
303  CALL gridman_index_deallocate(grid%CELLINDEX(1),ierr)
304  IF(ierr.NE.0) stop "TEST_VRK TERMINATED"
305  CALL gridman_index_deallocate(grid%CELLINDEX(2),ierr)
306  IF(ierr.NE.0) stop "TEST_VRK TERMINATED"
307  DEALLOCATE(grid%CELLINDEX)
308  grid%NCELLINDEX=0
309 
310  CALL gridman_grid2d_check(grid,res,ierr)
311  IF(res.NE.0.OR.ierr.GT.0) stop "TEST_VRK TERMINATED"
312 
313  CALL gridman_grid_count(grid,ncount,ierr)
314  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
315  IF(ncount.NE.12) THEN
316  WRITE(*,*) " ERROR in GRIDMAN_GRID_COUNT"
317  WRITE(*,*) " Expected value NTCOUNT=12, NTCOUNT ",ncount
318  stop "TEST_VRK TERMINATED"
319  END IF
320 
321 C 2D GRID WITH FREE EDGES
322  WRITE(*,*) "Grid L"
323  CALL gridman_2dgrid2vtk(grid,npoints,ncells,nvertex,x,
324  s ifirst,lvertex,ivertex,ctype,ierr,0)
325  IF(ierr.NE.0) stop "TEST_VRK TERMINATED"
326  CALL gridman_vtk_write('testL.vtk',
327  s 'Grid with free edges + point scalars & vectors',
328  s npoints,ncells,nvertex,2,
329  s x,ifirst,lvertex,ivertex,ctype,
330  s 0,0,2,2,ierr,
331  s point_scalar=point_scalars,
332  s point_vector=point_vectors)
333  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
334 
335 C TRY 3D AGAIN
336  DEALLOCATE(ifirst,lvertex,ivertex,ctype)
337  CALL gridman_2dgrid2vtk(grid,npoints,ncells,nvertex,x,
338  s ifirst,lvertex,ivertex,ctype,ierr,
339  s ntor+1,alpha)
340  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
341 
342 
343 C*****************************************************************************
344 C PRINT 3D GRID
345 C*****************************************************************************
346  WRITE(*,*) "Grid M"
347  CALL gridman_vtk_write('testM.vtk','Axi-symmetric grid',
348  s npoints,ncells,nvertex,3,
349  s x,ifirst,lvertex,ivertex,ctype,
350  s 0,0,0,0,ierr)
351  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
352 
353  itmp=ctype(8)
354  ctype(8)=12
355  CALL gridman_vtk_write('test.vtk','Unknown',
356  s npoints,ncells,nvertex,3,
357  s x,ifirst,lvertex,ivertex,ctype,
358  s 0,0,0,0,ierr)
359  IF(ierr.NE.100) THEN
360  WRITE(*,*) "ERRROR detected in GRIDMAN_VTK_WRITE (9)"
361  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
362  stop "TEST_VTK TERMINATED"
363  END IF
364  ctype(8)=itmp
365 
366  itmp=ctype(7)
367  ctype(7)=13
368  CALL gridman_vtk_write('test.vtk','Unknown',
369  s npoints,ncells,nvertex,3,
370  s x,ifirst,lvertex,ivertex,ctype,
371  s 0,0,0,0,ierr)
372  IF(ierr.NE.100) THEN
373  WRITE(*,*) "ERRROR detected in GRIDMAN_VTK_WRITE (9)"
374  WRITE(*,*) " Expected value IERR=100, IERR ",ierr
375  stop "TEST_VTK TERMINATED"
376  END IF
377  ctype(7)=itmp
378 
379 C*****************************************************************************
380 C PRINT 3D GRID + CELL SCALARS
381 C*****************************************************************************
382  WRITE(*,*) "Grid N"
383  DEALLOCATE(cell_scalars)
384  ALLOCATE(cell_scalars(ncells,2))
385  ncells0=int(ncells/ntor)
386  k=0
387  DO j=1,ntor
388  DO i=1,ncells0
389  k=k+1
390  cell_scalars(k,1)=i
391  cell_scalars(k,2)=k
392  END DO
393  END DO
394  dataname(1)='2DCellNumbers'
395  dataname(2)='3DCellNumbers'
396 
397  DEALLOCATE(ifirst,lvertex,ivertex,ctype)
398  CALL gridman_2dgrid2vtk(grid,npoints,ncells,nvertex,x,
399  s ifirst,lvertex,ivertex,ctype,ierr,
400  s ntor+1,alpha)
401  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
402 
403  CALL gridman_vtk_write('testN.vtk',
404  s 'Toroidal Grid + cell scalar',
405  s npoints,ncells,nvertex,3,
406  s x,ifirst,lvertex,ivertex,ctype,
407  s 2,0,0,0,ierr,
408  s cell_scalar=cell_scalars,csname=dataname)
409  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
410 
411 C*****************************************************************************
412 C PRINT 3D GRID + CELL VECTORS
413 C*****************************************************************************
414  WRITE(*,*) "Grid O"
415  DEALLOCATE(cell_vectors)
416  ALLOCATE(cell_vectors(3,ncells,2))
417  k=0
418  DO j=1,ntor
419  DO i=1,ncells0
420  k=k+1
421  cell_vectors(1,k,1)=1.0
422  cell_vectors(2,k,1)=0.5
423  cell_vectors(3,k,1)=0.5
424  cell_vectors(1,k,2)=1.0*i
425  cell_vectors(2,k,2)=0.5*i
426  cell_vectors(3,k,2)=0.5*i
427  END DO
428  END DO
429  dataname(1)='ConstCellVectors'
430  dataname(2)='VarCellVectors'
431  CALL gridman_vtk_write('testO.vtk','Toroidal Grid + cell vectors',
432  s npoints,ncells,nvertex,3,
433  s x,ifirst,lvertex,ivertex,ctype,
434  s 0,2,0,0,ierr,
435  s cell_vector=cell_vectors,cvname=dataname)
436  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
437 
438 C*****************************************************************************
439 C PRINT 3D GRID + POINT SCALARS
440 C*****************************************************************************
441  WRITE(*,*) "Grid P"
442  DEALLOCATE(point_scalars)
443  ALLOCATE(point_scalars(grid%NPOINTS*(ntor+1),2))
444  k=0
445  DO j=1,ntor+1
446  DO i=1,grid%NPOINTS
447  k=k+1
448  point_scalars(k,1)=i
449  point_scalars(k,2)=k
450  END DO
451  END DO
452  dataname(1)='2DPointScalars'
453  dataname(2)='3DPointScalars'
454  CALL gridman_vtk_write('testP.vtk',
455  s 'Toroidal Grid + point scalars',
456  s npoints,ncells,nvertex,3,
457  s x,ifirst,lvertex,ivertex,ctype,
458  s 0,0,2,0,ierr,
459  s point_scalar=point_scalars,psname=dataname)
460  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
461 
462 C*****************************************************************************
463 C PRINT 3D GRID + POINT VECTORS
464 C*****************************************************************************
465  WRITE(*,*) "Grid R"
466  DEALLOCATE(point_vectors)
467  ALLOCATE(point_vectors(3,grid%NPOINTS*(ntor+1),2))
468  k=0
469  DO j=1,ntor+1
470  DO i=1,grid%NPOINTS
471  k=k+1
472  point_vectors(1,k,1)=1.0
473  point_vectors(2,k,1)=2.0
474  point_vectors(3,k,1)=3.0
475  point_vectors(1,k,2)=1.0*i
476  point_vectors(2,k,2)=2.0*i
477  point_vectors(3,k,2)=3.0*i
478  END DO
479  END DO
480  DEALLOCATE(cell_scalars)
481  dataname(1)='ConstPointVectors'
482  dataname(2)='VarPointVectors'
483 
484  DEALLOCATE(ifirst,lvertex,ivertex,ctype)
485  CALL gridman_2dgrid2vtk(grid,npoints,ncells,nvertex,x,
486  s ifirst,lvertex,ivertex,ctype,ierr,
487  s ntor+1,alpha)
488  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
489 
490  CALL gridman_vtk_write('testR.vtk',
491  s 'Toroidal Grid + point vectors',
492  s npoints,ncells,nvertex,3,
493  s x,ifirst,lvertex,ivertex,ctype,
494  s 0,0,0,2,ierr,
495  s point_vector=point_vectors,pvname=dataname)
496  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
497 
498 C*****************************************************************************
499 C CHECK OUTPUT OF INDEXES
500 C*****************************************************************************
501  CALL gridman_index_deallocate(grid%EDGEINDEX(1),ierr)
502  IF(ierr.NE.0) stop "TEST_VRK TERMINATED"
503  CALL gridman_index_deallocate(grid%EDGEINDEX(2),ierr)
504  IF(ierr.NE.0) stop "TEST_VRK TERMINATED"
505  DEALLOCATE(grid%EDGEINDEX)
506  grid%NEDGEINDEX=0
507 
508 C 1. no index, no cell data
509  CALL gridman_vtk_grid2d_write('testIND1.vtk','Grid',
510  s grid,grid%NCELLS,0,0,0,0,ierr)
511  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
512 
513 C 2. no index, cell data
514  CALL gridman_grid_count(grid,ncount,ierr)
515  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
516  ALLOCATE(cell_scalars(ncount,1))
517  DO i=1,grid%NCELLS
518  cell_scalars(i,1)=i
519  END DO
520  DO i=grid%NCELLS+1,ncount
521  cell_scalars(i,1)=-i
522  END DO
523  dataname(1)='CellNumbers'
524  CALL gridman_vtk_grid2d_write('testIND2.vtk','Grid',
525  s grid,ncount,1,0,0,0,ierr,
526  s cell_scalar=cell_scalars,csname=dataname)
527  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
528 
529 C 3. 1 2D cell index, no cell data
530  grid%NCELLINDEX=1
531  ALLOCATE(grid%CELLINDEX(grid%NCELLINDEX))
532  CALL gridman_index_allocate(grid%CELLINDEX(1),2,
533  c grid%NCELLS-1,ierr)
534  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
535  grid%CELLINDEX(1)%INDEXES(0,:)=(/1,2,3,5,6,7,8,9/)
536  grid%CELLINDEX(1)%INDEXES(1,:)=(/0,1,2,3,4,5,6,7/)
537  grid%CELLINDEX(1)%INDEXES(2,:)=(/1,1,1,2,2,2,2,2/)
538  grid%CELLINDEX(1)%DESCRIPTION='2D'
539  grid%CELLINDEX(1)%COLUMNS(1)='IX'
540  grid%CELLINDEX(1)%COLUMNS(2)='IY'
541 
542  CALL gridman_vtk_grid2d_write('testIND3.vtk','Grid',
543  s grid,ncount,0,0,0,0,ierr)
544  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
545 
546 C 4. 2 2D cell indices, no cell data
547  CALL gridman_index_deallocate(grid%CELLINDEX(1),ierr)
548  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
549  DEALLOCATE(grid%CELLINDEX)
550  grid%NCELLINDEX=2
551  ALLOCATE(grid%CELLINDEX(grid%NCELLINDEX))
552  CALL gridman_index_allocate(grid%CELLINDEX(1),2,
553  c grid%NCELLS-1,ierr)
554  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
555  grid%CELLINDEX(1)%INDEXES(0,:)=(/1,2,3,5,6,7,8,9/)
556  grid%CELLINDEX(1)%INDEXES(1,:)=(/0,1,2,3,4,5,6,7/)
557  grid%CELLINDEX(1)%INDEXES(2,:)=(/1,1,1,2,2,2,2,2/)
558  grid%CELLINDEX(1)%INDEXES(2,:)=(/1,1,1,2,2,2,2,2/)
559  grid%CELLINDEX(1)%DESCRIPTION='2D'
560  grid%CELLINDEX(1)%COLUMNS(1)='IX'
561  grid%CELLINDEX(1)%COLUMNS(2)='IY'
562  CALL gridman_index_allocate(grid%CELLINDEX(2),2,
563  c grid%NCELLS,ierr)
564  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
565  grid%CELLINDEX(2)%INDEXES(0,:)=(/1,2,3,4,5,6,7,8,9/)
566  grid%CELLINDEX(2)%INDEXES(1,:)=(/0,1,2,3,4,5,6,7,8/)
567  grid%CELLINDEX(2)%INDEXES(2,:)=(/1,1,1,3,3,3,4,4,4/)
568  grid%CELLINDEX(1)%INDEXES(2,:)=(/1,1,1,2,2,2,2,2/)
569  grid%CELLINDEX(2)%DESCRIPTION='2D'
570  grid%CELLINDEX(2)%COLUMNS(1)='IX'
571  grid%CELLINDEX(2)%COLUMNS(2)='IY'
572 
573  CALL gridman_vtk_grid2d_write('testIND4.vtk','Grid',
574  s grid,ncount,0,0,0,0,ierr)
575  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
576 
577 C 5. 2 2D cell indices + 1 2D edge index, no cell data
578  grid%NEDGEINDEX=1
579  ALLOCATE(grid%EDGEINDEX(grid%NEDGEINDEX))
580  CALL gridman_index_allocate(grid%EDGEINDEX(1),2,
581  c grid%NEDGES-2,ierr)
582  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
583  DO ie=1,grid%EDGEINDEX(1)%NELEMENTS
584  grid%EDGEINDEX(1)%INDEXES(0,ie)=ie+2
585  grid%EDGEINDEX(1)%INDEXES(1,ie)=ie
586  grid%EDGEINDEX(1)%INDEXES(2,ie)=ie*ie
587  END DO
588  grid%EDGEINDEX(1)%DESCRIPTION='2D'
589  grid%EDGEINDEX(1)%COLUMNS(1)='IP'
590  grid%EDGEINDEX(1)%COLUMNS(2)='IR'
591 
592  CALL gridman_vtk_grid2d_write('testIND5.vtk','Grid',
593  s grid,ncount,0,0,0,0,ierr)
594  IF(ierr.NE.0) stop "TEST_VTK TERMINATED"
595 
596 C 6. 2 2D cell indices + 1 2D edge indices + cell data
597  CALL gridman_vtk_grid2d_write('testIND6.vtk','Grid',
598  s grid,ncount,1,0,0,0,ierr,
599  s cell_scalar=cell_scalars,csname=dataname)
600 
601  WRITE(*,*) "TEST_VTK COMPLETED"
602 
603  END PROGRAM test_vtk
logical, save, public gridman_check
Switch to enforce extra checks of input parameters.
Definition: gridman.f:133
Explicit interfaces to GRIDMAN subroutines and functions.
Definition: gridman.f:251
subroutine gridman_grid_count(GRID, NCOUNT, IERR)
Return the number of cells plus the number of edges not belonging to any cell.
Definition: grid1.f:1360
subroutine gridman_grid2d_check(GRID, RES, IERR)
Check correctness of the 2D grid object.
Definition: grid2d.f:37
Data-type which describes a grid as a set of edges, methods in grid.f.
Definition: gridman.f:168
subroutine gridman_vtk_grid2d_write(FNAME, HEADER, GRID, NELEMENTS, NCS, NCV, NPS, NPV, IERR, CELL_SCALAR, CSNAME, CELL_VECTOR, CVNAME, POINT_SCALAR, PSNAME, POINT_VECTOR, PVNAME)
Write 2D grid and data in VTK ASCII legacy format.
Definition: vtk.f:611
subroutine gridman_index_allocate(INDEX, NINDEX, NELEMENTS, IERR)
Allocate index object.
Definition: index.f:28
Definition of data types, global constants and variables.
Definition: gridman.f:83
subroutine gridman_index_deallocate(INDEX, IERR)
Allocate index object.
Definition: index.f:98
subroutine gridman_vtk_write(FNAME, HEADER, NPOINTS, NCELLS, NVERTEX, ND, X, IFIRST, LVERTEX, IVERTEX, CTYPE, NCS, NCV, NPS, NPV, IERR, CELL_SCALAR, CSNAME, CELL_VECTOR, CVNAME, POINT_SCALAR, PSNAME, POINT_VECTOR, PVNAME)
Write grid and data in VTK ASCII legacy format (interface)
Definition: vtk.f:34
subroutine gridman_2dgrid2vtk(GRID, NPOINTS, NCELLS, NVERTEX, X, IFIRST, LVERTEX, IVERTEX, CTYPE, IERR, NTHETA, THETA)
Convert 2D grid into VTK format.
Definition: vtk.f:36