GRIDMAN
grid managment library
grid_examples.f
Go to the documentation of this file.
1 C> @file tests/grid_examples.f
2 C> Grids for unit tests
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 C
24 C 2D GRID EXAMPLE FOR TESTS
25 C
26  SUBROUTINE grid_example1(GRID,IERR)
27 
28  USE gridman
29  USE gridman_lib
30  IMPLICIT NONE
31 
32  TYPE(gridman_grid) :: grid
33  INTEGER,INTENT(OUT) :: ierr
34 
35  INTEGER(GRIDMAN_SP),PARAMETER :: ncells=10,
36  i nedges=25,
37  i npoints=16
38 
39  CALL gridman_grid_allocate(grid,2,nedges,npoints,ncells,
40  s ierr,2,2)
41  IF(ierr.NE.0) RETURN
42 
43  grid%CELLS(1:2,1)=(/1,0/)
44  grid%CELLS(1:2,2)=(/2,0/)
45  grid%CELLS(1:2,3)=(/1,0/)
46  grid%CELLS(1:2,4)=(/1,2/)
47  grid%CELLS(1:2,5)=(/2,0/)
48  grid%CELLS(1:2,6)=(/1,3/)
49  grid%CELLS(1:2,7)=(/2,4/)
50  grid%CELLS(1:2,8)=(/3,0/)
51  grid%CELLS(1:2,9)=(/3,4/)
52  grid%CELLS(1:2,10)=(/4,0/)
53  grid%CELLS(1:2,11)=(/3,7/)
54  grid%CELLS(1:2,12)=(/4,7/)
55  grid%CELLS(1:2,13)=(/5,0/)
56  grid%CELLS(1:2,14)=(/6,0/)
57  grid%CELLS(1:2,15)=(/5,0/)
58  grid%CELLS(1:2,16)=(/6,0/)
59  grid%CELLS(1:2,17)=(/5,8/)
60  grid%CELLS(1:2,18)=(/9,6/)
61  grid%CELLS(1:2,19)=(/8,10/)
62  grid%CELLS(1:2,20)=(/9,10/)
63  grid%CELLS(1:2,21)=(/0,10/)
64  grid%CELLS(1:2,22)=(/10,0/)
65  grid%CELLS(1:2,23)=(/0,10/)
66  grid%CELLS(1:2,24)=(/7,8/)
67  grid%CELLS(1:2,25)=(/9,7/)
68 
69  grid%POINTS(1:2,1)=(/1,2/)
70  grid%POINTS(1:2,2)=(/2,3/)
71  grid%POINTS(1:2,3)=(/1,4/)
72  grid%POINTS(1:2,4)=(/2,5/)
73  grid%POINTS(1:2,5)=(/3,6/)
74  grid%POINTS(1:2,6)=(/4,5/)
75  grid%POINTS(1:2,7)=(/5,6/)
76  grid%POINTS(1:2,8)=(/4,7/)
77  grid%POINTS(1:2,9)=(/5,8/)
78  grid%POINTS(1:2,10)=(/6,9/)
79  grid%POINTS(1:2,11)=(/7,8/)
80  grid%POINTS(1:2,12)=(/8,9/)
81  grid%POINTS(1:2,13)=(/13,7/)
82  grid%POINTS(1:2,14)=(/9,14/)
83  grid%POINTS(1:2,15)=(/13,11/)
84  grid%POINTS(1:2,16)=(/12,14/)
85  grid%POINTS(1:2,17)=(/7,11/)
86  grid%POINTS(1:2,18)=(/12,9/)
87  grid%POINTS(1:2,19)=(/11,10/)
88  grid%POINTS(1:2,20)=(/10,12/)
89  grid%POINTS(1:2,21)=(/11,15/)
90  grid%POINTS(1:2,22)=(/12,16/)
91  grid%POINTS(1:2,23)=(/15,16/)
92  grid%POINTS(1:2,24)=(/7,10/)
93  grid%POINTS(1:2,25)=(/9,10/)
94 
95  grid%X(1,1) = 5.
96  grid%X(1,2) = 7.
97  grid%X(1,3) = 9.
98  grid%X(1,4) = 5.
99  grid%X(1,5) = 7.
100  grid%X(1,6) = 9.
101  grid%X(1,7) = 5.
102  grid%X(1,8) = 7.
103  grid%X(1,9) = 9.
104  grid%X(1,10)= 7.
105  grid%X(1,11)= 5.
106  grid%X(1,12)= 9.
107  grid%X(1,13)= 2.
108  grid%X(1,14)= 12.
109  grid%X(1,15)= 5.
110  grid%X(1,16)= 9.
111 
112  grid%X(2,1) = 4.
113  grid%X(2,2) = 4.
114  grid%X(2,3) = 4.
115  grid%X(2,4) = 2.
116  grid%X(2,5) = 2.
117  grid%X(2,6) = 2.
118  grid%X(2,7) = 0.
119  grid%X(2,8) = 0.
120  grid%X(2,9) = 0.
121  grid%X(2,10)= -1.
122  grid%X(2,11)= -2.
123  grid%X(2,12)= -2.
124  grid%X(2,13)= -2.
125  grid%X(2,14)= -2.
126  grid%X(2,15)= -4.
127  grid%X(2,16)= -4.
128 
129  grid%UNITS='METER'
130  grid%UNIT2SI=1.0
131 
132  grid%DESCRIPTION='GRID EXAMPLE 1'
133 
134  CALL gridman_index_create121(grid%EDGEINDEX(1),grid%NEDGES,ierr)
135  IF(ierr.NE.0) RETURN
136  CALL gridman_index_create121(grid%EDGEINDEX(2),grid%NEDGES,ierr)
137  IF(ierr.NE.0) RETURN
138  CALL gridman_index_create121(grid%CELLINDEX(1),grid%NCELLS,ierr)
139  IF(ierr.NE.0) RETURN
140  CALL gridman_index_create121(grid%CELLINDEX(2),grid%NCELLS,ierr)
141  IF(ierr.NE.0) RETURN
142 
143 C PARAMETERS
144 C SAREA=2557.80696042497 m^2
145 C SAREA(Rx10)=1.672352620618041e+05 m^2
146 C VOLUME=1.671327291709770e+03 m^3
147 C VOLUME(Rx10)=1.671327291709770e+05 m^3
148 C S_PLOIDAL_AREA=38 m^2
149 C XC=7.0 M
150 C YC=-2.105263157894737e+01 CM
151 
152  END SUBROUTINE grid_example1
153 
154 C
155 C ISOLATED QUADRANGLE
156 C
157  SUBROUTINE grid_example2(GRID,IERR)
158 
159  USE gridman
160  USE gridman_lib
161  IMPLICIT NONE
162 
163  TYPE(gridman_grid) :: grid
164  INTEGER,INTENT(OUT) :: ierr
165 
166  INTEGER(GRIDMAN_SP),PARAMETER :: ncells=1,
167  i nedges=4,
168  i npoints=4
169 
170  CALL gridman_grid_allocate(grid,2,nedges,npoints,ncells,ierr)
171  IF(ierr.NE.0) RETURN
172 
173  grid%CELLS(1:2,1)=(/1,0/)
174  grid%CELLS(1:2,2)=(/1,0/)
175  grid%CELLS(1:2,3)=(/1,0/)
176  grid%CELLS(1:2,4)=(/1,0/)
177 
178  grid%POINTS(1:2,1)=(/1,2/)
179  grid%POINTS(1:2,2)=(/2,3/)
180  grid%POINTS(1:2,3)=(/3,4/)
181  grid%POINTS(1:2,4)=(/4,1/)
182 
183  grid%X(1,1) = 11.*100
184  grid%X(1,2) = 14.*100
185  grid%X(1,3) = 14.*100
186  grid%X(1,4) = 11.*100
187  grid%X(2,1) = 4.*100
188  grid%X(2,2) = 4.*100
189  grid%X(2,3) = 2.*100
190  grid%X(2,4) = 2.*100
191 
192  grid%UNITS='CENTIMETER'
193  grid%UNIT2SI=1e-2
194 
195  END SUBROUTINE grid_example2
196 
197 
198 C
199 C 2D GRID WHICH CAN BE MERGED INTO EXAMPLE 1
200 C
201  SUBROUTINE grid_example3(GRID,IERR)
202 
203  USE gridman
204  USE gridman_lib
205  IMPLICIT NONE
206 
207  TYPE(gridman_grid) :: grid
208  INTEGER,INTENT(OUT) :: ierr
209 
210  INTEGER(GRIDMAN_SP),PARAMETER :: ncells=6,
211  i nedges=20,
212  i npoints=15
213 
214  CALL gridman_grid_allocate(grid,2,nedges,npoints,ncells,ierr,2,2)
215  IF(ierr.NE.0) RETURN
216 
217  grid%CELLS(1:2,1)=(/1,0/)
218  grid%CELLS(1:2,2)=(/-9,1/)
219  grid%CELLS(1:2,2)=(/0,1/)
220  grid%CELLS(1:2,3)=(/1,0/)
221  grid%CELLS(1:2,4)=(/2,1/)
222  grid%CELLS(1:2,5)=(/3,1/)
223  grid%CELLS(1:2,6)=(/2,0/)
224  grid%CELLS(1:2,7)=(/2,3/)
225  grid%CELLS(1:2,8)=(/3,5/)
226  grid%CELLS(1:2,9)=(/2,0/)
227  grid%CELLS(1:2,10)=(/3,-20/)
228  grid%CELLS(1:2,10)=(/3,0/)
229  grid%CELLS(1:2,11)=(/1,0/)
230  grid%CELLS(1:2,12)=(/4,0/)
231  grid%CELLS(1:2,13)=(/0,4/)
232  grid%CELLS(1:2,14)=(/4,0/)
233  grid%CELLS(1:2,15)=(/4,5/)
234  grid%CELLS(1:2,16)=(/5,6/)
235  grid%CELLS(1:2,17)=(/6,0/)
236  grid%CELLS(1:2,18)=(/0,6/)
237  grid%CELLS(1:2,19)=(/6,0/)
238  grid%CELLS(1:2,20)=(/6,0/)
239 
240  grid%POINTS(1:2,1)=(/1,2/)
241  grid%POINTS(1:2,2)=(/2,3/)
242  grid%POINTS(1:2,3)=(/1,4/)
243  grid%POINTS(1:2,4)=(/4,5/)
244  grid%POINTS(1:2,5)=(/5,6/)
245  grid%POINTS(1:2,6)=(/4,7/)
246  grid%POINTS(1:2,7)=(/5,8/)
247  grid%POINTS(1:2,8)=(/6,9/)
248  grid%POINTS(1:2,9)=(/7,8/)
249  grid%POINTS(1:2,10)=(/9,8/)
250  grid%POINTS(1:2,11)=(/3,6/)
251  grid%POINTS(1:2,12)=(/15,6/)
252  grid%POINTS(1:2,13)=(/10,15/)
253  grid%POINTS(1:2,14)=(/11,10/)
254  grid%POINTS(1:2,15)=(/11,6/)
255  grid%POINTS(1:2,16)=(/9,11/)
256  grid%POINTS(1:2,17)=(/12,11/)
257  grid%POINTS(1:2,18)=(/12,13/)
258  grid%POINTS(1:2,19)=(/13,14/)
259  grid%POINTS(1:2,20)=(/14,9/)
260 
261  grid%X(1,1) = 9.
262  grid%X(1,2) = 9.
263  grid%X(1,3) = 9.
264  grid%X(1,4) = 12.
265  grid%X(1,5) = 12.
266  grid%X(1,6) = 12.
267  grid%X(1,7) = 14.
268  grid%X(1,8) = 14.
269  grid%X(1,9) = 14.
270  grid%X(1,10) = 9.
271  grid%X(1,11) = 9.
272  grid%X(1,12) = 5.
273  grid%X(1,13) = 5.
274  grid%X(1,14) = 14.
275  grid%X(1,15) = 10.
276 
277  grid%X(2,1) = 4.
278  grid%X(2,2) = 1.
279  grid%X(2,3) = 0.
280  grid%X(2,4) = 4.
281  grid%X(2,5) = 0.
282  grid%X(2,6) = -2.
283  grid%X(2,7) = 4.
284  grid%X(2,8) = 0.
285  grid%X(2,9) = -2.
286  grid%X(2,10) = -2.
287  grid%X(2,11) = -4.
288  grid%X(2,12) = -4.
289  grid%X(2,13) = -6.
290  grid%X(2,14) = -6.
291  grid%X(2,15) = -2.
292 
293  grid%X=grid%X*100.
294 
295 
296  grid%UNITS='CENTIMETER'
297  grid%UNIT2SI=1e-2
298 
299  grid%DESCRIPTION='GRID EXAMPLE 3'
300 
301  CALL gridman_index_create121(grid%EDGEINDEX(1),grid%NEDGES,ierr)
302  IF(ierr.NE.0) RETURN
303  CALL gridman_index_create121(grid%EDGEINDEX(2),grid%NEDGES,ierr)
304  IF(ierr.NE.0) RETURN
305  CALL gridman_index_create121(grid%CELLINDEX(1),grid%NCELLS,ierr)
306  IF(ierr.NE.0) RETURN
307  CALL gridman_index_create121(grid%CELLINDEX(2),grid%NCELLS,ierr)
308  IF(ierr.NE.0) RETURN
309 
310  END SUBROUTINE grid_example3
311 
312 C
313 C 2D GRID EXAMPLE TO TEST TRIANG
314 C
315  SUBROUTINE grid_example4(GRID,IERR)
316 
317  USE gridman
318  USE gridman_lib
319  IMPLICIT NONE
320 
321  TYPE(gridman_grid) :: grid
322  INTEGER,INTENT(OUT) :: ierr
323 
324  INTEGER(GRIDMAN_SP),PARAMETER :: ncells=7,
325  i nedges=27,
326  i npoints=21
327 
328  CALL gridman_grid_allocate(grid,2,nedges,npoints,ncells,ierr,2,2)
329  IF(ierr.NE.0) RETURN
330 
331  grid%CELLS(1:2,1)=(/1,0/)
332  grid%CELLS(1:2,2)=(/1,0/)
333  grid%CELLS(1:2,3)=(/1,0/)
334  grid%CELLS(1:2,4)=(/1,0/)
335  grid%CELLS(1:2,5)=(/1,4/)
336  grid%CELLS(1:2,6)=(/3,1/)
337  grid%CELLS(1:2,7)=(/2,1/)
338  grid%CELLS(1:2,8)=(/0,1/)
339  grid%CELLS(1:2,9)=(/2,0/)
340  grid%CELLS(1:2,10)=(/2,3/)
341  grid%CELLS(1:2,11)=(/3,4/)
342  grid%CELLS(1:2,12)=(/4,5/)
343  grid%CELLS(1:2,13)=(/5,0/)
344  grid%CELLS(1:2,14)=(/5,0/)
345  grid%CELLS(1:2,15)=(/3,6/)
346  grid%CELLS(1:2,16)=(/2,6/)
347  grid%CELLS(1:2,17)=(/0,6/)
348  grid%CELLS(1:2,18)=(/6,0/)
349  grid%CELLS(1:2,19)=(/6,7/)
350  grid%CELLS(1:2,20)=(/7,0/)
351  grid%CELLS(1:2,21)=(/7,0/)
352  grid%CELLS(1:2,22)=(/7,0/)
353  grid%CELLS(1:2,23)=(/7,0/)
354  grid%CELLS(1:2,24)=(/7,0/)
355  grid%CELLS(1:2,25)=(/7,0/)
356  grid%CELLS(1:2,26)=(/7,0/)
357  grid%CELLS(1:2,27)=(/7,0/)
358 
359  grid%POINTS(1:2,1)=(/1,2/)
360  grid%POINTS(1:2,2)=(/2,3/)
361  grid%POINTS(1:2,3)=(/3,21/)
362  grid%POINTS(1:2,4)=(/21,7/)
363  grid%POINTS(1:2,5)=(/7,6/)
364  grid%POINTS(1:2,6)=(/5,6/)
365  grid%POINTS(1:2,7)=(/4,5/)
366  grid%POINTS(1:2,8)=(/1,4/)
367  grid%POINTS(1:2,9)=(/4,8/)
368  grid%POINTS(1:2,10)=(/5,9/)
369  grid%POINTS(1:2,11)=(/10,6/)
370  grid%POINTS(1:2,12)=(/10,7/)
371  grid%POINTS(1:2,13)=(/7,11/)
372  grid%POINTS(1:2,14)=(/10,11/)
373  grid%POINTS(1:2,15)=(/9,10/)
374  grid%POINTS(1:2,16)=(/8,9/)
375  grid%POINTS(1:2,17)=(/8,12/)
376  grid%POINTS(1:2,18)=(/10,13/)
377  grid%POINTS(1:2,19)=(/12,13/)
378  grid%POINTS(1:2,20)=(/12,14/)
379  grid%POINTS(1:2,21)=(/13,20/)
380  grid%POINTS(1:2,22)=(/14,15/)
381  grid%POINTS(1:2,23)=(/16,15/)
382  grid%POINTS(1:2,24)=(/16,17/)
383  grid%POINTS(1:2,25)=(/17,18/)
384  grid%POINTS(1:2,26)=(/19,18/)
385  grid%POINTS(1:2,27)=(/19,20/)
386 
387  grid%X(1,1) = 10.-0.1
388 cc GRID%X1(1) = 8.
389  grid%X(1,2) = 10.
390  grid%X(1,3) = 16.
391  grid%X(1,4) = 10.
392  grid%X(1,5) = 11.
393  grid%X(1,6) = 13.
394  grid%X(1,7) = 16.
395  grid%X(1,8) = 10.
396  grid%X(1,9) = 12.
397  grid%X(1,10) = 13.
398  grid%X(1,11) = 16.
399  grid%X(1,12) = 10.
400  grid%X(1,13) = 16.
401  grid%X(1,14) = 10.
402  grid%X(1,15) = 11.
403  grid%X(1,16) = 12.
404  grid%X(1,17) = 13.
405  grid%X(1,18) = 14.
406  grid%X(1,19) = 15.
407  grid%X(1,20) = 16.
408  grid%X(1,21) = 16.+0.2
409 cc GRID%X1(21) = 19
410 
411  grid%X(2,1) = 3.
412  grid%X(2,2) = 8.
413  grid%X(2,3) = 8.
414  grid%X(2,4) = 5.
415  grid%X(2,5) = 5.
416  grid%X(2,6) = 5.
417  grid%X(2,7) = 5.
418  grid%X(2,8) = 3.
419  grid%X(2,9) = 3.
420  grid%X(2,10) = 3.
421  grid%X(2,11) = 3.
422  grid%X(2,12) = 0.
423  grid%X(2,13) = 0.
424  grid%X(2,14) = -3.
425  grid%X(2,15) = -2.
426  grid%X(2,16) = -4.
427  grid%X(2,17) = -2.
428  grid%X(2,18) = -5.
429  grid%X(2,19) = -2.
430  grid%X(2,20) = -2.
431  grid%X(2,21) = 3.
432  grid%X(1,:) = grid%X(1,:)*10._gridman_dp
433  grid%X(2,:) = grid%X(2,:)*10._gridman_dp
434 
435  grid%UNITS='DECEMETER'
436  grid%UNIT2SI=0.1_gridman_dp
437 cc GRID%UNIT2SI=1.0
438 
439  grid%DESCRIPTION='GRID EXAMPLE 4'
440 
441  CALL gridman_index_create121(grid%EDGEINDEX(1),grid%NEDGES,ierr)
442  IF(ierr.NE.0) RETURN
443  CALL gridman_index_create121(grid%EDGEINDEX(2),grid%NEDGES,ierr)
444  IF(ierr.NE.0) RETURN
445  CALL gridman_index_create121(grid%CELLINDEX(1),grid%NCELLS,ierr)
446  IF(ierr.NE.0) RETURN
447  CALL gridman_index_create121(grid%CELLINDEX(2),grid%NCELLS,ierr)
448  IF(ierr.NE.0) RETURN
449 
450  END SUBROUTINE grid_example4
subroutine gridman_index_create121(INDEX, N, IERR)
Create index table for "one-to-one" mapping.
Definition: index.f:733
Explicit interfaces to GRIDMAN subroutines and functions.
Definition: gridman.f:251
subroutine gridman_grid_allocate(GRID, TYPE, NEDGES, NPOINTS, NCELLS, IERR, NEDGEINDEX, NCELLINDEX)
Allocate GRIDMAN_GRID object.
Definition: grid1.f:30
Data-type which describes a grid as a set of edges, methods in grid.f.
Definition: gridman.f:168
Definition of data types, global constants and variables.
Definition: gridman.f:83