GRIDMAN
grid managment library
test_grid2.f
Go to the documentation of this file.
1 C> @file tests/test_grid2.f
2 C> Unit test for the data type GRIDMAN_GRID and it's methods
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_grid2
24  USE gridman
25  USE gridman_lib
26  IMPLICIT NONE
27 
28  gridman_check=.true.
29 
30  CALL test_combine
31 
32  CALL test_cells
33 
34  CALL test_points
35 
36  CALL test_eliminate_cells
37 
38  CALL test_eliminate_edges
39 
40 
41  WRITE(*,*) "TEST_GRID2 COMPLETED"
42 
43  END PROGRAM test_grid2
44 
45 C
46 C
47 C
48  SUBROUTINE test_eliminate_edges
49  USE gridman
50  USE gridman_lib
51  IMPLICIT NONE
52  INTRINSIC abs
53  INTEGER :: ierr,res
54  TYPE(gridman_grid) :: grid,gride
55  LOGICAL,ALLOCATABLE :: ltake(:)
56  INTEGER :: ii
57  INTEGER(GRIDMAN_SP) :: iedge,iedge1,ipoint,ie
58  REAL(GRIDMAN_DP) :: x1,y1,x2,y2,ld,ld1
59 
60 C CREATE GRID
61  CALL grid_example1(grid,ierr)
62  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
63 
64 C TRIVIAL TEST: TAKE ALL EDGES
65  ALLOCATE(ltake(grid%NEDGES))
66  ltake=.true.
67  CALL gridman_grid_eliminate_edges(gride,grid,ltake,ierr)
68  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
69  gride%DESCRIPTION=grid%DESCRIPTION
70 
71  CALL gridman_grid_compare(grid,gride,res,ierr)
72  IF(res.NE.0) THEN
73  WRITE(*,*) "ERROR detected after GRIDMAN_GRID_COMPARE"
74  WRITE(*,*) "Expected value 0, RES ",res
75  stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
76  END IF
77 
78 C FREE EDGES WHICH DO NOT BELONG TO CELLS
79  grid%CELLS(:,21)=0
80  grid%CELLS(:,22)=0
81  grid%CELLS(:,23)=0
82  IF(grid%CELLS(1,19).EQ.10) grid%CELLS(1,19)=0
83  IF(grid%CELLS(2,19).EQ.10) grid%CELLS(2,19)=0
84  IF(grid%CELLS(1,20).EQ.10) grid%CELLS(1,20)=0
85  IF(grid%CELLS(2,20).EQ.10) grid%CELLS(2,20)=0
86  grid%NCELLS=grid%NCELLS-1
87  CALL gridman_index_create121(grid%CELLINDEX(1),grid%NCELLS,ierr)
88  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
89  CALL gridman_index_create121(grid%CELLINDEX(2),grid%NCELLS,ierr)
90  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
91 
92  CALL gridman_grid_remove_free_edges(gride,grid,ierr)
93  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
94 
95  IF(gride%NCELLS.NE.grid%NCELLS.OR.
96  f gride%NEDGES.NE.grid%NEDGES-3) THEN
97  WRITE(*,*) "ERROR in GRIDMAN_GRID_REMOVE_FREE_EDGES: ",
98  w "unexpected dimensions"
99  WRITE(*,*) "Expected NCELLS, NEDGES ",gride%NCELLS,grid%NEDGES
100  WRITE(*,*) " NCELLS, NEDGES ",gride%NCELLS,grid%NEDGES-2
101  stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
102  END IF
103 
104  DO ii=1,grid%NCELLINDEX
105  CALL gridman_index_compare(grid%CELLINDEX(ii),
106  c gride%CELLINDEX(ii),res,ierr)
107  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
108  IF(res.NE.0) THEN
109  WRITE(*,*) "ERROR detected after GRIDMAN_INDEX_COMPARE"
110  WRITE(*,*) "Expected value 0, RES ",res
111  stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
112  END IF
113  END DO
114 
115  IF(gride%EDGEINDEX(1)%NELEMENTS.NE.gride%NEDGES) THEN
116  WRITE(*,*) "ERROR in GRIDMAN_ELIMINATE_EDGES: ",
117  w "number of elements =/= number of edges"
118  WRITE(*,*) " NEGDES, NELEMENTS ",
119  w gride%NEDGES,gride%EDGEINDEX(1)%NELEMENTS
120  stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
121  END IF
122 
123  DO ie=1,gride%EDGEINDEX(1)%NELEMENTS
124  iedge1=grid%EDGEINDEX(1)%INDEXES(0,ie)
125  ipoint=gride%POINTS(1,iedge1)
126  x1=gride%X(1,ipoint)
127  y1=gride%X(2,ipoint)
128  ipoint=gride%POINTS(2,iedge1)
129  x2=gride%X(1,ipoint)
130  y2=gride%X(2,ipoint)
131  ld1=(x1-x2)**2+(y1-y2)**2
132  iedge=grid%EDGEINDEX(1)%INDEXES(1,ie)
133  ipoint=grid%POINTS(1,iedge)
134  x1=grid%X(1,ipoint)
135  y1=grid%X(2,ipoint)
136  ipoint=gride%POINTS(2,iedge1)
137  x2=grid%X(1,ipoint)
138  y2=grid%X(2,ipoint)
139  ld=(x1-x2)**2+(y1-y2)**2
140  IF(abs(ld-ld1).GT.gridman_tol**2) THEN
141  WRITE(*,*) "ERROR in GRIDMAN_ELIMINATE_EDGES: ",
142  w "mismatch of the edge lengths"
143  WRITE(*,*) " IEDGE1, IEDGE0 ",iedge1, iedge
144  WRITE(*,*) " LD1, LD0 ",ld1,ld
145  stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
146  END IF
147  END DO
148 
149  CALL gridman_index_compare(gride%EDGEINDEX(1),
150  c gride%EDGEINDEX(2),res,ierr)
151  IF(res.NE.0) THEN
152  WRITE(*,*) "ERROR in GRIDMAN_ELIMINATE_EDGES: ",
153  w "edge indexes must be same"
154  stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
155  END IF
156 
157  CALL gridman_grid_write(gride,'eliminate_edges.grd',ierr)
158 
159  CALL gridman_grid_deallocate(grid,ierr)
160  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
161  CALL gridman_grid_deallocate(gride,ierr)
162  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
163 
164  END SUBROUTINE test_eliminate_edges
165 
166 C
167 C
168 C
169  SUBROUTINE test_eliminate_cells
170  USE gridman
171  USE gridman_lib
172  IMPLICIT NONE
173  INTRINSIC abs
174  INTEGER :: ierr,res
175  TYPE(gridman_grid) :: grid,gride
176  LOGICAL,ALLOCATABLE :: ltake(:)
177  INTEGER(GRIDMAN_SP) :: ie,iedge0,iedge1,ipoint
178  REAL(GRIDMAN_DP) :: x10,y10,x20,y20,x11,y11,x21,y21
179 
180 C CREATE GRID
181  CALL grid_example1(grid,ierr)
182  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
183 
184 C TRIVIAL TEST: TAKE ALL CELLS
185  ALLOCATE(ltake(grid%NCELLS))
186  ltake=.true.
187  CALL gridman_grid_eliminate_cells(gride,grid,ltake,ierr)
188  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
189  gride%DESCRIPTION=grid%DESCRIPTION
190 
191  CALL gridman_grid_compare(grid,gride,res,ierr)
192  IF(res.NE.0) THEN
193  WRITE(*,*) "ERROR detected after GRIDMAN_GRID_COMPARE"
194  WRITE(*,*) "Expected value 0, RES ",res
195  stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
196  END IF
197 
198 C MODIFY GRID FOR SECOND TEST
199 C FREE EDGES WHICH DO NOT BELONG TO CELLS
200  grid%CELLS(:,21)=0
201  grid%CELLS(:,22)=0
202  grid%CELLS(:,23)=0
203  IF(grid%CELLS(1,19).EQ.10) grid%CELLS(1,19)=0
204  IF(grid%CELLS(2,19).EQ.10) grid%CELLS(2,19)=0
205  IF(grid%CELLS(1,20).EQ.10) grid%CELLS(1,20)=0
206  IF(grid%CELLS(2,20).EQ.10) grid%CELLS(2,20)=0
207  grid%NCELLS=grid%NCELLS-1
208  ltake(1)=.false.
209  ltake(2)=.false.
210  ltake(7)=.false.
211  ltake(9)=.false.
212  CALL gridman_index_create121(grid%CELLINDEX(1),grid%NCELLS,ierr)
213  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
214  CALL gridman_index_create121(grid%CELLINDEX(2),grid%NCELLS,ierr)
215  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
216  CALL gridman_grid_eliminate_cells(gride,grid,ltake,ierr)
217  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
218 C CHECK DIMENSIONS
219  IF(gride%NCELLS.NE.5.OR.gride%NEDGES.NE.18.OR.
220  f gride%NPOINTS.NE.13) THEN
221  WRITE(*,*) "ERROR after TEST_ELIMINATE_CELLS: ",
222  w "mismatch of dimensions"
223  WRITE(*,*) "Expected value 5, NCELLS ",gride%NCELLS
224  WRITE(*,*) "Expected value 18, NCELLS ",gride%NEDGES
225  WRITE(*,*) "Expected value 13, NPOINTS ",gride%NPOINTS
226  stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
227  END IF
228 C CHECK THE EDGE INDEX MAPPING
229  DO ie=1,gride%EDGEINDEX(1)%NELEMENTS
230  iedge1=gride%EDGEINDEX(1)%INDEXES(0,ie)
231  iedge0=gride%EDGEINDEX(1)%INDEXES(1,ie)
232  ipoint=gride%POINTS(1,iedge1)
233  x11=gride%X(1,ipoint)
234  y11=gride%X(2,ipoint)
235  ipoint=gride%POINTS(2,iedge1)
236  x21=gride%X(1,ipoint)
237  y21=gride%X(2,ipoint)
238  ipoint=grid%POINTS(1,iedge0)
239  x10=grid%X(1,ipoint)
240  y10=grid%X(2,ipoint)
241  ipoint=grid%POINTS(2,iedge0)
242  x20=grid%X(1,ipoint)
243  y20=grid%X(2,ipoint)
244  IF( ( abs(x10-x11).LT.gridman_tol.AND.
245  f abs(y10-y11).LT.gridman_tol.AND.
246  f abs(x20-x21).LT.gridman_tol.AND.
247  f abs(y20-y21).LT.gridman_tol ) .OR.
248  f ( abs(x20-x11).LT.gridman_tol.AND.
249  f abs(y20-y11).LT.gridman_tol.AND.
250  f abs(x10-x21).LT.gridman_tol.AND.
251  f abs(y10-y21).LT.gridman_tol ) ) THEN
252 C EDGES MATCH
253  ELSE
254  WRITE(*,*) "ERROR after TEST_ELIMINATE_CELLS: ",
255  w "edge index mismatch"
256  WRITE(*,*) " IE, IEDGE0, IEDGE1 ",ie,iedge0,iedge1
257  WRITE(*,*) " OLD: X1, Y1, X2, Y2 ", x10,y10,x20,y20
258  WRITE(*,*) " NEW: X1, Y1, X2, Y2 ", x11,y11,x21,y21
259  stop "TEST_GRID2 (TEST_ELIMINATE) TERMINATED"
260  END IF
261  END DO
262  CALL gridman_index_compare(gride%EDGEINDEX(1),
263  c gride%EDGEINDEX(2),res,ierr)
264  IF(res.NE.0.OR.ierr.NE.0) THEN
265  WRITE(*,*) "ERROR after TEST_ELIMINATE_CELLS: ",
266  w "edge indices are not equal"
267  stop "TEST_GRID2 (TEST_ELIMINATE) TERMINATED"
268  END IF
269 C CHECK THE CELL INDEX MAPPING
270  IF( gride%CELLINDEX(1)%INDEXES(0,1).NE.1.OR.
271  f gride%CELLINDEX(1)%INDEXES(1,1).NE.3.OR.
272  f gride%CELLINDEX(1)%INDEXES(0,2).NE.2.OR.
273  f gride%CELLINDEX(1)%INDEXES(1,2).NE.4.OR.
274  f gride%CELLINDEX(1)%INDEXES(0,3).NE.3.OR.
275  f gride%CELLINDEX(1)%INDEXES(1,3).NE.5.OR.
276  f gride%CELLINDEX(1)%INDEXES(0,4).NE.4.OR.
277  f gride%CELLINDEX(1)%INDEXES(1,4).NE.6.OR.
278  f gride%CELLINDEX(1)%INDEXES(0,5).NE.5.OR.
279  f gride%CELLINDEX(1)%INDEXES(1,5).NE.8 ) THEN
280  WRITE(*,*) "ERROR after TEST_ELIMINATE: wrong cell index"
281  stop "TEST_GRID2 (TEST_ELIMINATE) TERMINATED"
282  END IF
283  CALL gridman_index_compare(gride%CELLINDEX(1),
284  c gride%CELLINDEX(2),res,ierr)
285  IF(res.NE.0.OR.ierr.NE.0) THEN
286  WRITE(*,*) "ERROR after TEST_ELIMINATE_CELLS: ",
287  w "cell indices are not equal"
288  stop "TEST_GRID2 (TEST_ELIMINATE) TERMINATED"
289  END IF
290 
291  CALL gridman_grid_write(gride,'eliminate_cells.grd',ierr)
292 
293  CALL gridman_grid_deallocate(grid,ierr)
294  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
295  CALL gridman_grid_deallocate(gride,ierr)
296  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
297 
298  END SUBROUTINE test_eliminate_cells
299 C
300 C
301 C
302  SUBROUTINE test_points
303  USE gridman
304  USE gridman_lib
305  IMPLICIT NONE
306  TYPE(gridman_grid) :: grid
307  TYPE(gridman_indlist) :: points
308  INTEGER(GRIDMAN_SP) :: ipoint
309  INTEGER :: ierr,res
310 
311  CALL grid_example1(grid,ierr)
312  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_POINTS) TERMINATED"
313  CALL gridman_grid_check(grid,res,ierr)
314  IF(res.NE.0) stop "TEST_POINTS TERMINATED"
315 
316  CALL gridman_grid_points(points,grid,ierr)
317  IF(res.NE.0) stop "TEST_GRID2 (TEST_POINTS) TERMINATED"
318  WRITE(*,*) "IPOINT, IND"
319  DO ipoint=1,points%N
320  WRITE(*,*) ipoint,
321  w points%IND(points%IFIRST(ipoint):points%ILAST(ipoint))
322  END DO
323 
324  CALL gridman_grid_deallocate(grid,ierr)
325  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_POINTS) TERMINATED"
326  CALL gridman_indlist_deallocate(points,ierr)
327  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_POINTS) TERMINATED"
328 
329  END SUBROUTINE test_points
330 
331 C
332 C
333 C
334  SUBROUTINE test_cells
335  USE gridman
336  USE gridman_lib
337  IMPLICIT NONE
338 
339  TYPE(gridman_grid) :: grid
340  TYPE(gridman_indlist) :: cells
341  INTEGER(GRIDMAN_SP) :: icell
342  INTEGER :: ierr,res
343 
344  CALL grid_example1(grid,ierr)
345  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_CELLS) TERMINATED"
346  CALL gridman_grid_check(grid,res,ierr)
347  IF(res.NE.0) stop "TEST_GRID2 (TEST_CELLS) TERMINATED"
348 
349  CALL gridman_grid_cells(cells,grid,ierr)
350  IF(res.NE.0) stop "TEST_GRID2 (TEST_CELLS) TERMINATED"
351  WRITE(*,*) "ICELL, IND"
352  DO icell=1,cells%N
353  WRITE(*,*) icell,
354  w cells%IND(cells%IFIRST(icell):cells%ILAST(icell))
355  END DO
356 
357 C CASE WITH EDGES WHICH DO NOT BELONG TO ANY CELL
358  CALL gridman_indlist_deallocate(cells,ierr)
359  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_CELLS) TERMINATED"
360 
361  grid%CELLS(1:2,13)=(/0,0/)
362  grid%CELLS(1:2,15)=(/0,0/)
363  grid%CELLS(1:2,17)=(/8,0/)
364  CALL gridman_grid_check(grid,res,ierr)
365  IF(res.NE.0) stop "TEST_GRID2 (TEST_CELLS) TERMINATED"
366 
367  CALL gridman_grid_cells(cells,grid,ierr)
368  IF(res.NE.0) stop "TEST_GRID2 (TEST_CELLS) TERMINATED"
369  WRITE(*,*) "ICELL, IND"
370  DO icell=1,cells%N
371  WRITE(*,*) icell,
372  w cells%IND(cells%IFIRST(icell):cells%ILAST(icell))
373  END DO
374 
375  CALL gridman_grid_deallocate(grid,ierr)
376  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_CELLS) TERMINATED"
377  CALL gridman_indlist_deallocate(cells,ierr)
378  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_CELLS) TERMINATED"
379 
380  END SUBROUTINE test_cells
381 
382 C
383 C
384 C
385  SUBROUTINE test_combine
386  USE gridman
387  USE gridman_lib
388  IMPLICIT NONE
389  TYPE(gridman_grid) :: grid,grid1,grid2,
390  t grid1_save,grid2_save
391  INTEGER :: ierr,res
392 
393  gridman_check=.true.
394 
395  CALL grid_example1(grid1,ierr)
396  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
397  CALL grid_example2(grid2,ierr)
398  IF(ierr.GT.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
399 
400  CALL gridman_grid_combine(grid,grid1,grid2,ierr)
401  IF(ierr.GT.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
402 
403  CALL gridman_grid_copy(grid1_save,grid1,ierr)
404  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
405  CALL gridman_grid_copy(grid2_save,grid2,ierr)
406  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
407 
408  grid1%NCELLS=-1 !DAMAGE GRID1
409  CALL gridman_grid_combine(grid,grid1,grid2,ierr)
410  IF(ierr.NE.100) THEN
411  WRITE(*,*) "ERORR in GRIDMAN_GRID_COMBINE"
412  WRITE(*,*) " expected value 100, IERR ",ierr
413  stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
414  END IF
415  CALL gridman_grid_copy(grid1,grid1_save,ierr) !RESTORING GRID
416 
417  grid2%NEDGES=-1 !DAMAGE GRID2
418  CALL gridman_grid_combine(grid,grid1,grid2,ierr)
419  IF(ierr.NE.100) THEN
420  WRITE(*,*) "ERORR in GRIDMAN_GRID_COMBINE"
421  WRITE(*,*) " expected value 100, IERR ",res
422  stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
423  END IF
424  CALL gridman_grid_copy(grid2,grid2_save,ierr) !RESTORING GRID
425 
426  grid1%TYPE=3
427  CALL gridman_grid_combine(grid,grid1,grid2,ierr)
428  IF(ierr.NE.100) THEN
429  WRITE(*,*) "ERORR in GRIDMAN_GRID_COMBINE"
430  WRITE(*,*) " expected value 100, IERR ",res
431  stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
432  END IF
433  CALL gridman_grid_copy(grid1,grid1_save,ierr) !RESTORING GRID
434 
435  CALL gridman_grid_deallocate(grid,ierr)
436  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
437  CALL gridman_grid_deallocate(grid1,ierr)
438  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
439  CALL gridman_grid_deallocate(grid2,ierr)
440  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
441  CALL gridman_grid_deallocate(grid1_save,ierr)
442  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
443  CALL gridman_grid_deallocate(grid2_save,ierr)
444  IF(ierr.NE.0) stop "TEST_GRID2 (TEST_COMBINE) TERMINATED"
445 
446  gridman_check=.false.
447 
448  END SUBROUTINE test_combine
subroutine gridman_grid_points(EDGES, GRID, IERR)
Create table of edges connected to each point.
Definition: grid2.f:361
logical, save, public gridman_check
Switch to enforce extra checks of input parameters.
Definition: gridman.f:133
subroutine gridman_grid_check(GRID, RES, IERR)
Check consistency of the grid data.
Definition: grid1.f:289
subroutine gridman_index_create121(INDEX, N, IERR)
Create index table for "one-to-one" mapping.
Definition: index.f:733
real(gridman_dp), save, public gridman_tol
Tolerance parameter which is used to compare two real numbers.
Definition: gridman.f:127
subroutine gridman_grid_eliminate_edges(GRID_NEW, GRID, LTAKE, IERR)
Eliminate edges the GRIDMAN_GRID object.
Definition: grid2.f:816
subroutine gridman_grid_eliminate_cells(GRID_NEW, GRID, LTAKE, IERR)
Eliminate cells from GRIDMAN_GRID object.
Definition: grid2.f:544
Explicit interfaces to GRIDMAN subroutines and functions.
Definition: gridman.f:251
subroutine gridman_index_compare(INDEX1, INDEX2, RES, IERR)
Compare two index objects.
Definition: index.f:423
subroutine gridman_grid_cells(EDGES, GRID, IERR)
Create a list of edges which belong to each cell.
Definition: grid2.f:177
subroutine gridman_indlist_deallocate(INDLIST, IERR)
Deallocate list of indices.
Definition: indlist.f:106
Data-type which describes a grid as a set of edges, methods in grid.f.
Definition: gridman.f:168
subroutine gridman_grid_deallocate(GRID, IERR)
Deallocate grid object.
Definition: grid1.f:184
subroutine gridman_grid_copy(GRID2, GRID1, IERR)
Create a copy of the grid object.
Definition: grid1.f:981
subroutine gridman_grid_combine(GRID, GRID1, GRID2, IERR)
Combine two grid objects into one.
Definition: grid2.f:31
Data-type which describes lists of elements with variable number of indices for each element...
Definition: gridman.f:225
Definition of data types, global constants and variables.
Definition: gridman.f:83
subroutine gridman_grid_remove_free_edges(GRID_NEW, GRID, IERR)
Remove edges which do not belong to any cell from the GRIDMAN_GRID object.
Definition: grid2.f:999
subroutine gridman_grid_compare(GRID1, GRID2, RES, IERR)
Compare two grid objects.
Definition: grid1.f:1068