36 CALL test_eliminate_cells
38 CALL test_eliminate_edges
41 WRITE(*,*)
"TEST_GRID2 COMPLETED"
43 END PROGRAM test_grid2
48 SUBROUTINE test_eliminate_edges
55 LOGICAL,
ALLOCATABLE :: ltake(:)
57 INTEGER(GRIDMAN_SP) :: iedge,iedge1,ipoint,ie
58 REAL(GRIDMAN_DP) :: x1,y1,x2,y2,ld,ld1
61 CALL grid_example1(grid,ierr)
62 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
65 ALLOCATE(ltake(grid%NEDGES))
68 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
69 gride%DESCRIPTION=grid%DESCRIPTION
73 WRITE(*,*)
"ERROR detected after GRIDMAN_GRID_COMPARE"
74 WRITE(*,*)
"Expected value 0, RES ",res
75 stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
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
88 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
90 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
93 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
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"
104 DO ii=1,grid%NCELLINDEX
106 c gride%CELLINDEX(ii),res,ierr)
107 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
109 WRITE(*,*)
"ERROR detected after GRIDMAN_INDEX_COMPARE"
110 WRITE(*,*)
"Expected value 0, RES ",res
111 stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
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"
123 DO ie=1,gride%EDGEINDEX(1)%NELEMENTS
124 iedge1=grid%EDGEINDEX(1)%INDEXES(0,ie)
125 ipoint=gride%POINTS(1,iedge1)
128 ipoint=gride%POINTS(2,iedge1)
131 ld1=(x1-x2)**2+(y1-y2)**2
132 iedge=grid%EDGEINDEX(1)%INDEXES(1,ie)
133 ipoint=grid%POINTS(1,iedge)
136 ipoint=gride%POINTS(2,iedge1)
139 ld=(x1-x2)**2+(y1-y2)**2
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"
150 c gride%EDGEINDEX(2),res,ierr)
152 WRITE(*,*)
"ERROR in GRIDMAN_ELIMINATE_EDGES: ",
153 w
"edge indexes must be same"
154 stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
157 CALL gridman_grid_write(gride,
'eliminate_edges.grd',ierr)
160 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
162 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_EDGES) TERMINATED"
164 END SUBROUTINE test_eliminate_edges
169 SUBROUTINE test_eliminate_cells
176 LOGICAL,
ALLOCATABLE :: ltake(:)
177 INTEGER(GRIDMAN_SP) :: ie,iedge0,iedge1,ipoint
178 REAL(GRIDMAN_DP) :: x10,y10,x20,y20,x11,y11,x21,y21
181 CALL grid_example1(grid,ierr)
182 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
185 ALLOCATE(ltake(grid%NCELLS))
188 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
189 gride%DESCRIPTION=grid%DESCRIPTION
193 WRITE(*,*)
"ERROR detected after GRIDMAN_GRID_COMPARE"
194 WRITE(*,*)
"Expected value 0, RES ",res
195 stop
"TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
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
213 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
215 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
217 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
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"
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)
241 ipoint=grid%POINTS(2,iedge0)
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"
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"
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"
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"
291 CALL gridman_grid_write(gride,
'eliminate_cells.grd',ierr)
294 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
296 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_ELIMINATE_CELLS) TERMINATED"
298 END SUBROUTINE test_eliminate_cells
302 SUBROUTINE test_points
308 INTEGER(GRIDMAN_SP) :: ipoint
311 CALL grid_example1(grid,ierr)
312 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_POINTS) TERMINATED"
314 IF(res.NE.0) stop
"TEST_POINTS TERMINATED"
317 IF(res.NE.0) stop
"TEST_GRID2 (TEST_POINTS) TERMINATED"
318 WRITE(*,*)
"IPOINT, IND"
321 w points%IND(points%IFIRST(ipoint):points%ILAST(ipoint))
325 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_POINTS) TERMINATED"
327 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_POINTS) TERMINATED"
329 END SUBROUTINE test_points
334 SUBROUTINE test_cells
341 INTEGER(GRIDMAN_SP) :: icell
344 CALL grid_example1(grid,ierr)
345 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_CELLS) TERMINATED"
347 IF(res.NE.0) stop
"TEST_GRID2 (TEST_CELLS) TERMINATED"
350 IF(res.NE.0) stop
"TEST_GRID2 (TEST_CELLS) TERMINATED"
351 WRITE(*,*)
"ICELL, IND"
354 w cells%IND(cells%IFIRST(icell):cells%ILAST(icell))
359 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_CELLS) TERMINATED"
361 grid%CELLS(1:2,13)=(/0,0/)
362 grid%CELLS(1:2,15)=(/0,0/)
363 grid%CELLS(1:2,17)=(/8,0/)
365 IF(res.NE.0) stop
"TEST_GRID2 (TEST_CELLS) TERMINATED"
368 IF(res.NE.0) stop
"TEST_GRID2 (TEST_CELLS) TERMINATED"
369 WRITE(*,*)
"ICELL, IND"
372 w cells%IND(cells%IFIRST(icell):cells%ILAST(icell))
376 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_CELLS) TERMINATED"
378 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_CELLS) TERMINATED"
380 END SUBROUTINE test_cells
385 SUBROUTINE test_combine
390 t grid1_save,grid2_save
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"
401 IF(ierr.GT.0) stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
404 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
406 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
411 WRITE(*,*)
"ERORR in GRIDMAN_GRID_COMBINE"
412 WRITE(*,*)
" expected value 100, IERR ",ierr
413 stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
420 WRITE(*,*)
"ERORR in GRIDMAN_GRID_COMBINE"
421 WRITE(*,*)
" expected value 100, IERR ",res
422 stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
429 WRITE(*,*)
"ERORR in GRIDMAN_GRID_COMBINE"
430 WRITE(*,*)
" expected value 100, IERR ",res
431 stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
436 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
438 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
440 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
442 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
444 IF(ierr.NE.0) stop
"TEST_GRID2 (TEST_COMBINE) TERMINATED"
448 END SUBROUTINE test_combine
subroutine gridman_grid_points(EDGES, GRID, IERR)
Create table of edges connected to each point.
logical, save, public gridman_check
Switch to enforce extra checks of input parameters.
subroutine gridman_grid_check(GRID, RES, IERR)
Check consistency of the grid data.
subroutine gridman_index_create121(INDEX, N, IERR)
Create index table for "one-to-one" mapping.
real(gridman_dp), save, public gridman_tol
Tolerance parameter which is used to compare two real numbers.
subroutine gridman_grid_eliminate_edges(GRID_NEW, GRID, LTAKE, IERR)
Eliminate edges the GRIDMAN_GRID object.
subroutine gridman_grid_eliminate_cells(GRID_NEW, GRID, LTAKE, IERR)
Eliminate cells from GRIDMAN_GRID object.
Explicit interfaces to GRIDMAN subroutines and functions.
subroutine gridman_index_compare(INDEX1, INDEX2, RES, IERR)
Compare two index objects.
subroutine gridman_grid_cells(EDGES, GRID, IERR)
Create a list of edges which belong to each cell.
subroutine gridman_indlist_deallocate(INDLIST, IERR)
Deallocate list of indices.
Data-type which describes a grid as a set of edges, methods in grid.f.
subroutine gridman_grid_deallocate(GRID, IERR)
Deallocate grid object.
subroutine gridman_grid_copy(GRID2, GRID1, IERR)
Create a copy of the grid object.
subroutine gridman_grid_combine(GRID, GRID1, GRID2, IERR)
Combine two grid objects into one.
Data-type which describes lists of elements with variable number of indices for each element...
Definition of data types, global constants and variables.
subroutine gridman_grid_remove_free_edges(GRID_NEW, GRID, IERR)
Remove edges which do not belong to any cell from the GRIDMAN_GRID object.
subroutine gridman_grid_compare(GRID1, GRID2, RES, IERR)
Compare two grid objects.