29 CHARACTER(256) :: fnames(3)
30 INTEGER(GRIDMAN_SP) :: nrknot,ntrii,i,iy,icell
32 REAL(GRIDMAN_DP),
ALLOCATABLE :: xytrian(:,:),xytrian2(:,:)
33 INTEGER(GRIDMAN_SP),
ALLOCATABLE :: necke(:,:),nchbar(:,:),
34 i nseite(:,:),itri(:,:),
35 i necke2(:,:),nchbar2(:,:),
36 i nseite2(:,:),itri2(:,:)
37 TYPE(
gridman_grid) :: tria_grid,tria_grid_copy,tria1,tria2,tria
38 REAL(GRIDMAN_DP),
ALLOCATABLE :: vol(:),vol1(:),vol2(:)
39 REAL(GRIDMAN_DP) :: v1,v2,v0,v
40 LOGICAL,
ALLOCATABLE :: lcadd(:)
46 fnames(1)=
'./input/fort.33';
47 fnames(2)=
'./input/fort.34';
48 fnames(3)=
'./input/fort.35';
49 CALL gridman_tria_read(fnames,nrknot,ntrii,xytrian,
50 s necke,nchbar,nseite,itri,ierr)
51 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
54 s necke,nchbar,nseite,itri,ierr)
55 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
60 CALL gridman_tria_write(tria_grid,fnames,ierr)
61 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
65 CALL gridman_tria_write(tria_grid,fnames,ierr)
66 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
67 CALL gridman_grid_write(tria_grid,
'tria.grd',ierr)
68 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
71 CALL gridman_tria_read(tria_grid_copy,fnames,ierr)
72 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
75 ALLOCATE(xytrian2(2,tria_grid_copy%NPOINTS),
76 a necke2(3,tria_grid_copy%NCELLS),
77 a nchbar2(3,tria_grid_copy%NCELLS),
78 a nseite2(3,tria_grid_copy%NCELLS),
79 a itri2(5,tria_grid_copy%NCELLS))
83 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
84 DO icell=1,tria_grid_copy%NCELLS
85 IF(itri(1,icell).NE.itri2(1,icell).OR.
86 f itri(2,icell).NE.itri2(2,icell))
THEN
87 WRITE(*,*)
"ERROR: cell index mismatch"
88 WRITE(*,*)
" ICELL ",icell
89 WRITE(*,*)
" IX, IY ",itri(1,icell),itri(2,icell)
90 WRITE(*,*)
" IX2, IY2 ",itri2(1,icell),itri2(2,icell)
91 stop
"TEST_TRIA TERMINATED"
93 IF(sum(itri(3:5,icell)).NE.sum(itri2(3:5,icell)))
THEN
94 WRITE(*,*)
"ERROR: edge index mismatch"
95 WRITE(*,*)
" ICELL ",icell
96 WRITE(*,*)
" ITRI ",itri(3:5,icell)
97 WRITE(*,*)
" ITRI2 ",itri2(3:5,icell)
98 stop
"TEST_TRIA TERMINATED"
101 DEALLOCATE(xytrian2,necke2,nchbar2,nseite2,itri2)
104 ALLOCATE(vol1(tria_grid%NCELLS),vol2(tria_grid_copy%NCELLS))
107 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
109 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
112 IF(abs(v1-v2).GT.
gridman_tol*(abs(v1)+abs(v2)))
THEN
113 WRITE(*,*)
"ERROR: grids have different volumes"
114 WRITE(*,*)
"V1, V2 ",v1,v2
115 stop
"TEST_TRIA TERMINATED"
120 ALLOCATE(lcadd(tria_grid%NCELLS))
124 IF(iy.LT.11) lcadd(i)=.true.
127 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
133 IF(iy.GE.11) lcadd(i)=.true.
136 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
140 DEALLOCATE(vol1,vol2)
141 ALLOCATE(vol(tria_grid%NCELLS),
142 a vol1(tria1%NCELLS),vol2(tria2%NCELLS))
145 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
147 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
149 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
154 WRITE(*,*)
"ERROR: sum of volumes is not equal",
155 w
" to the volume of combined grid"
156 WRITE(*,*)
"V, V1+V2 ",v0,v1+v2
157 stop
"TEST_TRIA TERMINATED"
162 IF(ierr.NE.0) stop
"TEST_MERGE TERMINATED"
163 IF(tria%NCELLS.NE.tria_grid%NCELLS)
THEN
164 WRITE(*,*)
"ERROR: wrong merging"
165 stop
"TEST_TRIA TERMINATED"
168 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
171 WRITE(*,*)
"ERROR: mismatch between volumes ",
172 w
" of original and merged grids"
173 WRITE(*,*)
"V0, V ",v0,v
174 stop
"TEST_TRIA TERMINATED"
179 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
181 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
183 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
185 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
187 IF(ierr.NE.0) stop
"TEST_TRIA TERMINATED"
189 WRITE(*,*)
"TEST_TRIA COMPLETED"
191 END PROGRAM test_tria
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.
subroutine gridman_grid_eliminate_cells(GRID_NEW, GRID, LTAKE, IERR)
Eliminate cells from GRIDMAN_GRID object.
Explicit interfaces to GRIDMAN subroutines and functions.
Data-type which describes a grid as a set of edges, methods in grid.f.
subroutine gridman_grid2tria(GRID, XYTRIAN, NECKE, NCHBAR, NSEITE, ITRI, IERR)
Convert GRIDMAN_GRID grid object into EIRENE triangular grid.
subroutine gridman_grid_deallocate(GRID, IERR)
Deallocate grid object.
subroutine gridman_tria2grid(GRID, NRKNOT, NTRII, XYTRIAN, NECKE, NCHBAR, NSEITE, ITRI, IERR)
Convert EIRENE triangular grid into GRIDMAN_GRID grid object (type=GRID2D)
Definition of data types, global constants and variables.