28 INTRINSIC any,sum,dot_product,sqrt
32 REAL(GRIDMAN_DP),
ALLOCATABLE :: ledges(:),sedges(:),
35 REAL(GRIDMAN_DP) :: ltot,stot,vtot,xtmp,xc,yc
36 LOGICAL,
ALLOCATABLE :: isconvex(:)
41 CALL grid_example1(grid2d,ierr)
42 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
44 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
46 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_CHECK"
47 WRITE(*,*)
"Expected value 0, RES ",res
48 stop
"TEST_GRID2D TERMINATED"
52 CALL test_check(grid2d)
62 ALLOCATE(ledges(grid2d%NEDGES))
64 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
66 IF(abs(ltot-58.155374460927121_gridman_dp).GT.
gridman_tol)
THEN
67 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_LENGTHS ",
68 w
" wrong total edge length"
69 WRITE(*,*)
" LTOT ",ltot
70 stop
"TEST_GRID2D TERMINATED"
75 ALLOCATE(scell(grid2d%NCELLS))
77 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
80 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_CELLAREAS",
81 w
" wrong total poloidal area"
82 WRITE(*,*)
" STOT ",stot
83 stop
"TEST_GRID2D TERMINATED"
87 ALLOCATE(xcn(2,grid2d%NCELLS))
89 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
93 xc=dot_product(xcn(1,:),scell)
94 yc=dot_product(xcn(2,:),scell)
99 w abs(yc+2.105263157894737e-01).GT.
gridman_tol)
THEN
100 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_CENTER",
101 w
" wrong center of cells coordinates"
102 WRITE(*,*)
"XC, YC ",xc,yc
103 stop
"TEST_GRID2D TERMINATED"
109 ALLOCATE(sedges(grid2d%NEDGES))
111 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
113 IF(abs(stot-2557.8070316024337_gridman_dp).GT.1e-4)
THEN
114 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_AREAS:",
115 w
" wrong edge areas"
116 WRITE(*,*)
" STOT ",stot
117 stop
"TEST_GRID2D TERMINATED"
120 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
122 IF(abs(stot-0.5*2557.8070316024337_gridman_dp).GT.1e-4)
THEN
123 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_AREAS:",
124 w
" wrong edge areas"
125 WRITE(*,*)
" STOT ",stot
126 stop
"TEST_GRID2D TERMINATED"
131 ALLOCATE(vol(grid2d%NCELLS))
133 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
135 IF(abs(vtot-1671.3273382186890_gridman_dp).GT.1e-4)
THEN
136 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_VOLUMES",
137 w
" wrong total volume"
138 WRITE(*,*)
" VTOT ",vtot
139 stop
"TEST_GRID2D TERMINATED"
142 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
144 IF(abs(vtot-0.25*1671.3273382186890_gridman_dp).GT.1e-4)
THEN
145 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_VOLUMES",
146 w
" wrong total volume"
147 WRITE(*,*)
" VTOT ",vtot
148 stop
"TEST_GRID2D TERMINATED"
153 ALLOCATE(isconvex(grid2d%NCELLS))
155 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
157 IF(.NOT.all(isconvex))
THEN
158 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_ISCONVEX",
159 w
" shows that not all cells are convex"
160 stop
"TEST_GRID2D TERMINATED"
167 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
169 IF(.NOT.all(isconvex(1:9)))
THEN
170 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_ISCONVEX: ",
171 w
" shows that not all cells from 1st to 9th are convex"
172 stop
"TEST_GRID2D TERMINATED"
174 IF(isconvex(10))
THEN
175 WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_ISCONVEX",
176 w
" shows that 10th cell is convex"
177 stop
"TEST_GRID2D TERMINATED"
182 write(*,*)
"GRIDMAN_GRID2D_NORM "
184 ALLOCATE(vn(2,grid2d%NEDGES))
186 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
190 CALL test_normals(vn,grid2d%NEDGES)
194 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
196 WRITE(*,*)
"TEST_GRID2D COMPLETED"
198 END PROGRAM test_grid2d
203 SUBROUTINE test_normals(VN,N)
207 INTEGER(GRIDMAN_DP),
INTENT(IN) :: n
208 REAL(GRIDMAN_DP),
INTENT(IN) :: vn(2,n)
213 IF(abs(vn(1,i)).GT.0..OR.abs(vn(2,i)-1.0).GT.0.)
GOTO 100
215 IF(abs(vn(1,i)).GT.0..OR.abs(vn(2,i)-1.0).GT.0.)
GOTO 100
217 IF(abs(vn(1,i)+1.0).GT.0..OR.abs(vn(2,i)).GT.0.)
GOTO 100
219 IF(abs(vn(1,i)-1.0).GT.0..OR.abs(vn(2,i)).GT.0.)
GOTO 100
221 IF(abs(vn(1,i)+1.0).GT.0..OR.abs(vn(2,i)).GT.0.)
GOTO 100
223 IF(abs(vn(1,i)-1.0).GT.0..OR.abs(vn(2,i)).GT.0.)
GOTO 100
225 IF(abs(vn(1,i)).GT.0..OR.abs(vn(2,i)+1.0).GT.0.)
GOTO 100
227 IF(abs(vn(1,i)).GT.0..OR.abs(vn(2,i)+1.0).GT.0.)
GOTO 100
229 IF(abs(vn(1,i)+1.0).GT.0..OR.abs(vn(2,i)).GT.0.)
GOTO 100
231 IF(abs(vn(1,i)-1.0).GT.0..OR.abs(vn(2,i)).GT.0.)
GOTO 100
233 IF(abs(vn(1,i)).GT.0..OR.abs(vn(2,i)+1.0).GT.0.)
GOTO 100
235 IF(abs(vn(1,i)+0.554700196225229).GT.
gridman_tol.OR.
236 f abs(vn(2,i)-0.832050294337844).GT.
gridman_tol)
GOTO 100
238 IF(abs(vn(1,i)-0.554700196225229).GT.
gridman_tol.OR.
239 f abs(vn(2,i)-0.832050294337844).GT.
gridman_tol)
GOTO 100
243 100
WRITE(*,*)
"ERORR in GRIDMAN_GRID2D_NORM ",
244 w
"wrong direction of normal vector I ",i
245 stop
"TEST_GRID2D TERMINATED"
247 END SUBROUTINE test_normals
252 SUBROUTINE test_check(GRID2D)
260 INTEGER(GRIDMAN_SP) :: ip1,ip2
263 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
268 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
270 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_CHECK"
271 WRITE(*,*)
"Expected value 100, RES ",res
272 stop
"TEST_GRID2D TERMINATED"
277 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
279 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_CHECK"
280 WRITE(*,*)
"Expected value 100, RES ",res
281 stop
"TEST_GRID2D TERMINATED"
286 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
288 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_CHECK"
289 WRITE(*,*)
"Expected value 100, RES ",res
290 stop
"TEST_GRID2D TERMINATED"
297 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
298 IF(res.GT.100.OR.res.LT.1)
THEN
299 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_CHECK"
300 WRITE(*,*)
"Expected value 0<R<100, RES ",res
301 stop
"TEST_GRID2D TERMINATED"
306 grid2d%POINTS(1,23)=12
308 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
310 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_CHECK"
311 WRITE(*,*)
"Expected value 102, RES ",res
312 stop
"TEST_GRID2D TERMINATED"
317 ip1=grid2d%POINTS(1,23)
318 ip2=grid2d%POINTS(2,23)
319 grid2d%X(1,ip1)=grid2d%X(1,ip2)
320 grid2d%X(2,ip1)=grid2d%X(2,ip2)
322 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
324 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_CHECK"
325 WRITE(*,*)
"Expected value 103, RES ",res
326 stop
"TEST_GRID2D TERMINATED"
331 grid2d%POINTS(1,21)=11
332 grid2d%POINTS(2,21)=16
333 grid2d%POINTS(1,22)=15
334 grid2d%POINTS(2,22)=12
336 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
338 WRITE(*,*)
"ERROR in GRIDMAN_GRID2D_CHECK"
339 WRITE(*,*)
"Expected value 111, RES ",res
340 stop
"TEST_GRID2D TERMINATED"
345 IF(ierr.NE.0) stop
"TEST_GRID2D TERMINATED"
347 END SUBROUTINE test_check
logical, save, public gridman_check
Switch to enforce extra checks of input parameters.
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_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.
subroutine gridman_grid2d_center(GRID, XCN, IERR)
Calculate coordinates of the cell centers.
subroutine gridman_grid2d_isconvex(GRID, ISCONVEX, IERR)
Find if cells are convex polygons or not.
subroutine gridman_grid_copy(GRID2, GRID1, IERR)
Create a copy of the grid object.
subroutine gridman_grid2d_norm(GRID, VN, IERR)
Calculate unit normal vectors to grid edges.
logical, save, public gridman_dbg
Switch for debugging mode.
real(gridman_dp), parameter, public gridman_pi
PI number.
Definition of data types, global constants and variables.
subroutine gridman_grid2d_lengths(GRID, LEDGES, IERR)
Calculate lengths of the cell edges.
subroutine gridman_grid2d_crossect(GRID, SCELLS, IERR)
Calculate cross section area of the cells.