GRIDMAN
grid managment library
test_triang.f
Go to the documentation of this file.
1 C> @file tests/test_triang.f
2 C> Unit test of GRIDMAN_GRID2D_TRIANG
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_triang
24  USE gridman
25  USE gridman_lib
26  IMPLICIT NONE
27 
28  INTRINSIC abs,sum
29 
30  TYPE(gridman_grid) :: grid,tria
31  REAL(GRIDMAN_DP),ALLOCATABLE :: vol(:),vol0(:),volt(:),
32  r sarea(:),sareat(:)
33  REAL(GRIDMAN_DP) :: v,vt
34  INTEGER(GRIDMAN_SP) :: ie,icell,icell0
35  INTEGER :: ierr,res
36 
37 
38  CALL grid_example4(grid,ierr)
39  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
40 
41  gridman_check=.true.
42  gridman_dbg=.false.
43 
44  CALL gridman_grid2d_triang(tria,grid,ierr)
45  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
46  CALL gridman_grid2d_triang(tria,grid,ierr)
47  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
48 
49  ALLOCATE(vol(grid%NCELLS),vol0(grid%NCELLS),volt(tria%NCELLS))
50  CALL gridman_grid2d_cylvolumes(grid,vol,ierr)
51  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
52  CALL gridman_grid2d_cylvolumes(tria,volt,ierr)
53  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
54 
55  v=sum(vol)
56  vt=sum(volt)
57  IF(abs(v-vt).GT.gridman_tol) THEN
58  WRITE(*,*) "ERROR in GRIDMAN_GRID2D_TRIANG ",
59  w " mismatch of volumes"
60  WRITE(*,*) " V, VT ",v,vt
61  stop "TEST_TRIANG TERMINATED"
62  END IF
63 
64  ALLOCATE(sarea(grid%NEDGES),sareat(tria%NEDGES))
65  CALL gridman_grid2d_cylareas(grid,sarea,ierr)
66  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
67  CALL gridman_grid2d_cylareas(tria,sareat,ierr)
68  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
69 
70 C
71 C TEST INDICES
72 C
73 C EDGE INDEX
74  IF(tria%EDGEINDEX(1)%NELEMENTS.NE.grid%NEDGES) THEN
75  WRITE(*,*) "ERROR in GRIDMAN_GRID2D_TRIANG: ",
76  w "the generated edge index is wrong"
77  WRITE(*,*) " NELEMENTS, NEDGES ",
78  w tria%EDGEINDEX(1)%NELEMENTS,grid%NEDGES
79  stop "TEST_TRIANG TERMINATED"
80  END IF
81  CALL gridman_index_compare(grid%EDGEINDEX(1),
82  c tria%EDGEINDEX(1),res,ierr)
83  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
84  IF(res.NE.0) THEN
85  WRITE(*,*) "ERROR in GRIDMAN_GRID2D_TRIANG: ",
86  w "old and new indices must be equal"
87  stop "TEST_TRIANG TERMINATED"
88  END IF
89 
90  CALL gridman_index_compare(grid%EDGEINDEX(2),
91  c tria%EDGEINDEX(2),res,ierr)
92  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
93  IF(res.NE.0) THEN
94  WRITE(*,*) "ERROR in GRIDMAN_GRID2D_TRIANG: ",
95  w "old and new indices must be equal"
96  stop "TEST_TRIANG TERMINATED"
97  END IF
98 
99 C CELL INDEX
100  IF(tria%CELLINDEX(1)%NELEMENTS.NE.tria%NCELLS) THEN
101  WRITE(*,*) "ERROR in GRIDMAN_GRID2D_TRIANG: ",
102  w "the generated cell index is wrong"
103  WRITE(*,*) " NELEMENTS, NCELLS ",
104  w tria%EDGEINDEX(1)%NELEMENTS,tria%NCELLS
105  stop "TEST_TRIANG TERMINATED"
106  END IF
107  vol0=0.
108  DO ie=1,tria%CELLINDEX(1)%NELEMENTS
109  icell=tria%CELLINDEX(1)%INDEXES(0,ie)
110  icell0=tria%CELLINDEX(1)%INDEXES(1,ie)
111  vol0(icell0)=vol0(icell0)+volt(icell)
112  END DO
113  DO icell=1,grid%NCELLS
114  IF(abs(vol(icell)-vol0(icell)).GT.gridman_tol) THEN
115  WRITE(*,*) "ERROR in GRIDMAN_GRID2D_TRIANG: ",
116  w "incorrect cell index - mismatch of volumes"
117  WRITE(*,*) " ICELL0, VOL, VOL0 ",icell,vol(icell),vol0(icell)
118  stop "TEST_TRIANG TERMINATED"
119  END IF
120  END DO
121  CALL gridman_index_compare(tria%CELLINDEX(1),
122  c tria%CELLINDEX(2),res,ierr)
123  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
124  IF(res.NE.0) THEN
125  WRITE(*,*) "ERROR in GRIDMAN_GRID2D_TRIANG: ",
126  w "cell indices must be equal"
127  stop "TEST_TRIANG TERMINATED"
128  END IF
129 
130  CALL gridman_grid_write(grid,'grid.grd',ierr)
131  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
132 
133  CALL gridman_grid_write(tria,'tria.grd',ierr)
134  IF(ierr.NE.0) stop "TEST_TRIANG TERMINATED"
135 
136  WRITE(*,*) "TEST_TRIANG COMPLETED"
137 
138  END PROGRAM test_triang
logical, save, public gridman_check
Switch to enforce extra checks of input parameters.
Definition: gridman.f:133
real(gridman_dp), save, public gridman_tol
Tolerance parameter which is used to compare two real numbers.
Definition: gridman.f:127
subroutine gridman_grid2d_cylvolumes(GRID, VCELLS, IERR, ANGLE)
Calculate cylindrical cell volumes.
Definition: grid2d.f:1018
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_grid2d_cylareas(GRID, SEDGES, IERR, ANGLE)
Calculate cylindrical areas of the cell edges.
Definition: grid2d.f:944
Data-type which describes a grid as a set of edges, methods in grid.f.
Definition: gridman.f:168
subroutine gridman_grid2d_triang(TRIA, GRID, IERR)
Triangulation of 2D grid.
Definition: triang.f:55
logical, save, public gridman_dbg
Switch for debugging mode.
Definition: gridman.f:122
Definition of data types, global constants and variables.
Definition: gridman.f:83