29 SUBROUTINE test_mappings(GRID,GRID1,GRID2)
32 END SUBROUTINE test_mappings
36 INTEGER(GRIDMAN_SP) :: n,itmp
38 REAL(GRIDMAN_DP),
ALLOCATABLE :: vol1(:),vol2(:),vol(:)
39 REAL(GRIDMAN_DP) :: v,v12,xtmp,ytmp,tol=1e-5
45 CALL grid_example1(grid1,ierr)
46 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
48 IF(res.NE.0.OR.ierr.NE.0) stop
"TEST_MERGE TERMINATED"
50 CALL grid_example3(grid2,ierr)
51 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
53 IF(res.NE.0.OR.ierr.NE.0) stop
"TEST_MERGE TERMINATED"
56 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
57 n=grid1%NCELLS+grid2%NCELLS
58 IF(grid%NCELLS.NE.n)
THEN
59 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE: ",
60 w
"cell number mismatch"
61 WRITE(*,*)
"N, N1+N2 ",grid%NCELLS,n
62 stop
"TEST_MERGE TERMINATED"
64 IF(grid%NEDGES.NE.40)
THEN
65 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE: ",
66 w
"edge number mismatch"
67 WRITE(*,*)
"expected value 40, NEDGES ",grid%NEDGES
68 stop
"TEST_MERGE TERMINATED"
70 IF(grid%NPOINTS.NE.25)
THEN
71 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE: ",
72 w
"points number mismatch"
73 WRITE(*,*)
"expected value 25, NPOINTS ",grid%NPOINTS
74 stop
"TEST_MERGE TERMINATED"
77 WRITE(*,*)
"NCELLS ", grid%NCELLS
78 WRITE(*,*)
"NEDGES ", grid%NEDGES
79 WRITE(*,*)
"NPOINTS ", grid%NPOINTS
81 ALLOCATE(vol(grid%NCELLS),vol1(grid1%NCELLS),vol2(grid2%NCELLS))
83 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
85 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
87 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
89 v12=sum(vol1)+sum(vol2)*1e-6
91 WRITE(*,*)
"VOL1+VOL2 ",v12
92 IF(abs(v-v12).GT.
gridman_tol*(abs(v)+abs(v12)))
THEN
93 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE: ",
94 w
"volume of combined grid =/= sum of volumes"
96 WRITE(*,*)
" VOL1+VOL2 ",v12
97 stop
"TEST_MERGE TERMINATED"
100 CALL gridman_grid_write(grid1,
'grid1.grd',ierr)
101 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
102 CALL gridman_grid_write(grid2,
'grid2.grd',ierr)
103 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
104 CALL gridman_grid_write(grid,
'merged.grd',ierr)
105 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
107 CALL test_mappings(grid,grid1,grid2)
115 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
116 WRITE(*,*)
"Expected value IERR=400, IERR ", ierr
117 stop
"TEST_MERGE TERMINATED"
125 itmp=grid1%POINTS(1,13)
129 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
130 WRITE(*,*)
"Expected value IERR=100, IERR ",ierr
131 stop
"TEST_MERGE TERMINATED"
133 grid1%POINTS(1,13)=itmp
138 grid2%X(1,14)=11.0*100
142 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
143 WRITE(*,*)
"Expected value IERR=100, IERR ",ierr
144 stop
"TEST_MERGE TERMINATED"
151 IF(ierr.GT.0) stop
"TEST_MERGE TERMINATED"
153 IF(ierr.GT.0) stop
"TEST_MERGE TERMINATED"
155 IF(ierr.GT.0) stop
"TEST_MERGE TERMINATED"
157 WRITE(*,*)
"TEST_MERGE COMPLETED"
159 END PROGRAM test_merge
165 SUBROUTINE test_mappings(GRID,GRID1,GRID2)
170 REAL(GRIDMAN_DP) :: s1(grid1%nedges),
171 r s2(grid2%NEDGES),s(grid%NEDGES),
173 r vol1(grid1%NCELLS),vol2(grid2%NCELLS)
174 REAL(GRIDMAN_DP) :: s_sum,s22,v,v1,v2
175 INTEGER(GRIDMAN_SP) :: ie,iee,iedge,iedge1,i1,iedge2,i2,
176 i icell,icell1,icell2
180 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
182 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
184 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
186 DO ie=1,grid%EDGEINDEX(1)%NELEMENTS
187 iedge1=grid%EDGEINDEX(1)%INDEXES(1,ie)
189 DO iee=1,grid%EDGEINDEX(1)%NELEMENTS
190 iedge=grid%EDGEINDEX(1)%INDEXES(0,iee)
191 i1=grid%EDGEINDEX(1)%INDEXES(1,iee)
192 IF(i1.EQ.iedge1) s_sum=s_sum+s(iedge)
194 IF(abs(s_sum-s1(iedge1)).GT.
196 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
197 WRITE(*,*)
"Wrong edge index - mismatch of areas"
198 WRITE(*,*)
" IEDGE1, S, S1 ",iedge1,s_sum,s1(iedge1)
199 stop
"TEST_MERGE TERMINATED"
204 c grid%EDGEINDEX(1),res,ierr)
205 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
207 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
208 WRITE(*,*)
"EDGEINDEX(2) and EDGEINDEX(1) must be equal"
209 stop
"TEST_MERGE TERMINATED"
212 DO ie=1,grid%EDGEINDEX(3)%NELEMENTS
213 iedge2=grid%EDGEINDEX(3)%INDEXES(1,ie)
215 DO iee=1,grid%EDGEINDEX(3)%NELEMENTS
216 iedge=grid%EDGEINDEX(3)%INDEXES(0,iee)
217 i2=grid%EDGEINDEX(3)%INDEXES(1,iee)
218 IF(i2.EQ.iedge2) s_sum=s_sum+s(iedge)
220 s_sum=s_sum*grid%UNIT2SI**2
221 s22=s2(iedge2)*grid2%UNIT2SI**2
222 IF(abs(s_sum-s22).GT.
gridman_tol*(abs(s_sum)+abs(s22)))
THEN
223 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
224 WRITE(*,*)
"Wrong edge index - mismatch of areas"
225 WRITE(*,*)
" IEDGE2, S, S2 ",iedge2,s_sum,s2(iedge2)
226 stop
"TEST_MERGE TERMINATED"
231 c grid%EDGEINDEX(4),res,ierr)
232 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
234 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
235 WRITE(*,*)
"EDGEINDEX(3) and EDGEINDEX(4) must be equal"
236 stop
"TEST_MERGE TERMINATED"
240 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
242 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
244 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
246 DO ie=1,grid%CELLINDEX(1)%NELEMENTS
247 icell=grid%CELLINDEX(1)%INDEXES(0,ie)
248 icell1=grid%CELLINDEX(1)%INDEXES(1,ie)
252 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
253 WRITE(*,*)
"Wrong cell index - mismatch of volumes"
254 WRITE(*,*)
" ICELL, ICELL1, V, V1 ",icell,icell1,v,v1
255 stop
"TEST_MERGE TERMINATED"
260 c grid%CELLINDEX(1),res,ierr)
261 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
263 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
264 WRITE(*,*)
"CELLINDEX(2) and CELLINDEX(1) must be equal"
265 stop
"TEST_MERGE TERMINATED"
268 DO ie=1,grid%CELLINDEX(3)%NELEMENTS
269 icell=grid%CELLINDEX(3)%INDEXES(0,ie)
270 icell2=grid%CELLINDEX(3)%INDEXES(1,ie)
271 v=vol(icell)*grid%UNIT2SI**3
272 v2=vol2(icell2)*grid2%UNIT2SI**3
274 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
275 WRITE(*,*)
"Wrong cell index - mismatch of volumes"
276 WRITE(*,*)
" ICELL, ICELL2, V, V2 ",icell,icell2,v,v2
277 stop
"TEST_MERGE TERMINATED"
282 c grid%CELLINDEX(3),res,ierr)
283 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
285 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_MERGE"
286 WRITE(*,*)
"CELLINDEX(4) and CELLINDEX(3) must be equal"
287 stop
"TEST_MERGE TERMINATED"
290 END SUBROUTINE test_mappings
logical, save, public gridman_check
Switch to enforce extra checks of input parameters.
subroutine gridman_grid2d_merge(GRID, GRID1, GRID2, TOL, IERR)
Merge two 2D grids by connecting their boundary edges.
real(gridman_dp), save, public gridman_tol
Tolerance parameter which is used to compare two real numbers.
subroutine gridman_grid2d_cylvolumes(GRID, VCELLS, IERR, ANGLE)
Calculate cylindrical cell volumes.
Explicit interfaces to GRIDMAN subroutines and functions.
subroutine gridman_index_compare(INDEX1, INDEX2, RES, IERR)
Compare two index objects.
subroutine gridman_grid2d_check(GRID, RES, IERR)
Check correctness of the 2D grid object.
subroutine gridman_grid2d_cylareas(GRID, SEDGES, IERR, ANGLE)
Calculate cylindrical areas of the cell edges.
Data-type which describes a grid as a set of edges, methods in grid.f.
subroutine gridman_grid_deallocate(GRID, IERR)
Deallocate grid object.
Definition of data types, global constants and variables.