GRIDMAN
grid managment library
gridman.f
Go to the documentation of this file.
1 C> @file gridman.f
2 C> Definition of data types, global constants and variables
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> \mainpage
24 C>
25 C> GRIDMAN stands for GRID MANagment.
26 C> This library contains universal grid description of unstructured grids
27 C> and a set of tools to store, merge, triangulate them etc.,
28 C> as well as converters to and from various legacy formats.
29 C> Essential element of the library is indexing of elements
30 C> which stays invariant through the transformations.
31 C>
32 C> \author Vladislav Kotov, v.kotov@fz-juelich.de
33 C>
34 C> Background ideas and maths are written down in this document
35 C> <a href="../gridman_spec.pdf">gridman_spec.pdf</a>
36 C>
37 C> CONVGRID is a versatile grid converter based on GRIDMAN.
38 C> See convgrid.parameters.description
39 C>
40 C> MERGERGRID is a simple interface for \ref GRIDMAN_GRID2D_MERGE.
41 C> See mergegrid.parameters.description
42 C>
43 C> CUTGRID is a simple interface for \ref GRIDMAN_GRID2D_CUT.
44 C> See cutgrid.parameters.description
45 C>
46 C> TRIANG generates combined EIRENE triangular grid, replacement of TRIAGEOM.
47 C> See triang.parameters.description
48 C>
49 C> \page ErrorCodes
50 C> Convention for error (>0) and warning (<0) codes
51 C> - 100 : wrong input
52 C> - -100 : wrong input, corrected
53 C> - 200 : memory allocation problem
54 C> - -200 : memory deallocation problem
55 C> - 300 : file reading/writing problem
56 C> - -300 : ...
57 C> - 400 : internal problem
58 C> - -400 : ...
59 C>
60 C> \page GeneralConventions
61 C> General conventions
62 C>
63 C> - For _GRID_ subroutines it is normal to assume
64 C> that the input grid object would pass GRIDMAN_GRID_CHECK
65 C> - For _INDEX_ subroutines it is normal to assume
66 C> that the input index would pass GRIDMAN_INDEX_CHECK
67 C> - For _GRID2D_ subroutines it is normal to assume that the input
68 C> grid object would pass GRIDMAN_GRID2D_CHECK
69 C>
70 C> Per default, integrity of input data structures is NOT checked.
71 C> To enforce checks use set GRIDMAN_CHECK=.TRUE.
72 C>
73 C> All text messages from all subroutines are aprinted into unit
74 C> defined by GRIDMAN_UNIT
75 C>
76 C> Extra debugging output is enforced by setting GRIDMAN_DBG=.TRUE.
77 C>
78 C> In case of abnormal termination (IERR>0) the data structures and arrays
79 C> which have to be created inside the subroutine
80 C> are returned in clean (deallocated) state
81 
82 C> Definition of data types, global constants and variables
83  MODULE gridman
84 
85  IMPLICIT NONE
86 
87 C***********************************************************************************
88 C CONSTANTS
89 C***********************************************************************************
90 
91 
92 C> Kind parameter for real numbers
93  INTEGER,PUBLIC,PARAMETER :: gridman_dp = selected_real_kind(13)
94 C> Kind parameter for integer numbers
95  INTEGER,PUBLIC,PARAMETER :: gridman_sp = selected_real_kind(7)
96 C> Index of the current version
97 C>
98 C> Format YYMMDD, E.g. 170412 means Year 2017, April (04), 12th
99  INTEGER(GRIDMAN_SP),PUBLIC,PARAMETER :: gridman_ver=170412
100 C> Length of the description strings
101  INTEGER,PUBLIC,PARAMETER :: gridman_length=1024
102 C> Length of the string COLUMNS in GRIDMAN_INDEX
103  INTEGER,PUBLIC,PARAMETER :: gridman_lword=64
104 
105 C> PI number
106  REAL(GRIDMAN_DP),PUBLIC,PARAMETER :: gridman_pi=atan(1.)*4.
107 C> 2PI number
108  REAL(GRIDMAN_DP),PUBLIC,PARAMETER :: gridman_2pi=atan(1.)*8.
109 
110 C***********************************************************************************
111 C GLOBAL VARIABLES
112 C***********************************************************************************
113 C> Index of the standard output unit
114 C>
115 C> Default value 6
116  INTEGER,PUBLIC,SAVE :: gridman_unit
117  DATA gridman_unit /6/
118 C> Switch for debugging mode
119 C>
120 C! Extra debugging output is printed if GRIDMAN_DBG=.TRUE. and
121 C! is omitted otherwise. Default value .FALSE.
122  LOGICAL,PUBLIC,SAVE :: gridman_dbg
123  DATA gridman_dbg /.false./
124 C> Tolerance parameter which is used to compare two real numbers
125 C>
126 C> Default value 1e-6
127  REAL(GRIDMAN_DP),PUBLIC,SAVE :: gridman_tol
128  DATA gridman_tol /1e-6/
129 C> Switch to enforce extra checks of input parameters
130 C>
131 C> Checks of input objects are enforced if GRIDMAN_CHECK=.TRUE. and
132 C! skipped otherwise. Default value .FALSE.
133  LOGICAL,PUBLIC,SAVE :: gridman_check
134  DATA gridman_check /.false./
135 
136 C***********************************************************************************
137 C DATA TYPES (OBJECTS)
138 C***********************************************************************************
139 
140 C-----------------------------------------------------------------------------------
141 C GRIDMAN_INDEX, see index.f
142 C-----------------------------------------------------------------------------------
143 C> Data-type which stores indices defined on the grid cells or edges
144  TYPE,PUBLIC :: gridman_index
146  INTEGER :: nindex
148  INTEGER(GRIDMAN_SP) :: nelements
153  INTEGER(GRIDMAN_SP),ALLOCATABLE :: indexes(:,:)
155  CHARACTER(LEN=GRIDMAN_LENGTH) :: description
157  CHARACTER(LEN=GRIDMAN_LWORD),ALLOCATABLE :: columns(:)
158  END TYPE gridman_index
159 
160 C-----------------------------------------------------------------------------------
161 C GRIDMAN_GRID, see grid.f
162 C-----------------------------------------------------------------------------------
163 C> Data-type which describes a grid as a set of edges, methods in grid.f
164 C>
165 C> Each edge is connected to (at max.) two cells. Each edge is
166 !! defined by a set of points. Here "point" does not necessarily meean
167 !! a geometrical point, but can be any parameter which defines edges
168  TYPE,PUBLIC :: gridman_grid
169 C> Index of the grid type
170 C>
171 C> - 2 : 2D unstructured grid
172 C> - 3 : 3D grid with triangular edges
173  INTEGER :: TYPE
174 C> String with human-readable description of the grid (title)
175  CHARACTER(LEN=GRIDMAN_LENGTH) :: description
176 C> Number of edges, must be > 0
177  INTEGER(GRIDMAN_SP) :: nedges
178 C> Number of cells, must be >=0 (can be = 0)
179  INTEGER(GRIDMAN_SP) :: ncells
180 C> Number of points required to define one edge
181 C>
182 C> EDIM depends on TYPE
183 C> - TYPE=2: EDIM=2
184 C> - TYPE=3: EDIM=3
185  INTEGER :: edim
186 C> Dimension of points
187 C>
188 C> PDIM depend on TYPE
189 C> - TYPE=2: PDIM=2
190 C> - TYPE=3: PDIM=3
191  INTEGER :: pdim
192 C> Number of points
193  INTEGER(GRIDMAN_SP) :: npoints
194 C> Indices of the neighbour cells or edges for each edge. CELLS(2,NEDGES).
195 !! Index>0 is the index cell to which the edge is connected
196 !! Index<0 is the index of edge to which the edge is connected
197 C> (periodicity or "teleportation")
198 !! Index=0 is the outer grid boundary
199  INTEGER(GRIDMAN_SP),ALLOCATABLE :: cells(:,:)
200 C> Indices of points which define each edge. POINTS(EDIM,NEDGES)
201  INTEGER(GRIDMAN_SP),ALLOCATABLE :: points(:,:)
202 C> Convertion factor into SI uinits (Meter or Radian) for each coordinate
203  REAL(GRIDMAN_DP) :: unit2si
204 C> Strings with human readable units
205  CHARACTER(LEN=GRIDMAN_LENGTH):: units
206 C> Cartesian coordinates of points, X(PDIM,NPOINTS)
207  REAL(GRIDMAN_DP),ALLOCATABLE :: x(:,:)
208 C> Number of indices (groups of indices) for edges
209  INTEGER :: nedgeindex
210 C> Number of indices (groups of indices) for cells
211  INTEGER :: ncellindex
212 C> Groups of indices for edges
213  TYPE(gridman_index),ALLOCATABLE :: edgeindex(:)
214 C> Groups of indices for cells
215  TYPE(gridman_index),ALLOCATABLE :: cellindex(:)
216  END TYPE gridman_grid
217 
218 C-----------------------------------------------------------------------------------
219 C GRIDMAN_INDLIST, see indlist.f
220 C-----------------------------------------------------------------------------------
221 C> Data-type which describes lists of elements with variable number of indices
222 C! for each element, methods in indlist.f
223 C>
224 C> Here a simple technique w/o pinters is applied
225  TYPE,PUBLIC :: gridman_indlist
226 C> Total number of elements
227  INTEGER(GRIDMAN_SP) :: n
228 C> Total number of indices
229  INTEGER(GRIDMAN_SP) :: l
230 C> Array of indices. IND(L)
231  INTEGER(GRIDMAN_SP),ALLOCATABLE :: ind(:)
232 C> First index in IND for each element
233 C>
234 C> IFIRST(I) is the first index in array IND which corresponds to element I
235  INTEGER(GRIDMAN_SP),ALLOCATABLE :: ifirst(:)
236 C> Last index in IND for each element
237 C>
238 C> IFLAST(I) is the last index in array IND which corresponds to element I
239  INTEGER(GRIDMAN_SP),ALLOCATABLE :: ilast(:)
240  END TYPE gridman_indlist
241 
242  END MODULE gridman
243 
244 C===================================================================================
245 C> Explicit interfaces to GRIDMAN subroutines and functions
246 C===================================================================================
247 C
248 C> Those interfaces cannot be placed in module GRIDMAN because for some reasson
249 C! Fortran does not understand derived types in the interface unless they are
250 C! defined in a module which is use associated
251  MODULE gridman_lib
252 
253  IMPLICIT NONE
254 
255 C***********************************************************************************
256 C INTERFACES, GRDIMAN_INDEX
257 C***********************************************************************************
258 
259  INTERFACE
260 
261 C
262  SUBROUTINE gridman_index_allocate(INDEX,NINDEX,NELEMENTS,IERR)
264  TYPE(gridman_index) :: index
265  INTEGER,INTENT(IN) :: nindex
266  INTEGER(GRIDMAN_SP),INTENT(IN) :: nelements
267  INTEGER,INTENT(OUT) :: ierr
268  END SUBROUTINE gridman_index_allocate
269 C
270  SUBROUTINE gridman_index_deallocate(INDEX,IERR)
271  USE gridman,ONLY:gridman_index
272  IMPLICIT NONE
273  TYPE(gridman_index) :: index
274  INTEGER,INTENT(OUT) :: ierr
275  END SUBROUTINE gridman_index_deallocate
276 C
277  SUBROUTINE gridman_index_check(INDEX,RES,IERR)
278  USE gridman,ONLY:gridman_index
279  TYPE(gridman_index) :: index
280  INTEGER,INTENT(OUT) :: res,ierr
281  END SUBROUTINE gridman_index_check
282 C
283  SUBROUTINE gridman_index_write(INDEX,IOUT,IERR)
284  USE gridman,ONLY:gridman_index
285  TYPE(gridman_index) :: index
286  INTEGER,INTENT(IN) :: iout
287  INTEGER,INTENT(OUT) :: ierr
288  END SUBROUTINE gridman_index_write
289 C
290  SUBROUTINE gridman_index_read(INDEX,IIN,IERR)
291  USE gridman,ONLY:gridman_index
292  TYPE(gridman_index) :: index
293  INTEGER,INTENT(IN) :: iin
294  INTEGER,INTENT(OUT) :: ierr
295  END SUBROUTINE gridman_index_read
296 C
297  SUBROUTINE gridman_index_compare(INDEX1,INDEX2,RES,IERR)
298  USE gridman,ONLY:gridman_index
299  TYPE(gridman_index) :: index1,index2
300  INTEGER,INTENT(OUT) :: res,ierr
301  END SUBROUTINE gridman_index_compare
302 C
303  SUBROUTINE gridman_index_copy(INDEX2,INDEX1,IERR)
304  USE gridman,ONLY:gridman_index
305  TYPE(gridman_index) :: index1,index2
306  INTEGER,INTENT(OUT) :: ierr
307  END SUBROUTINE gridman_index_copy
308 C
309  FUNCTION gridman_index_repeated_elements(INDEX,IERR)
310  USE gridman,ONLY:gridman_index
311  TYPE(gridman_index) :: index
312  INTEGER,INTENT(OUT) :: ierr
315 C
316  SUBROUTINE gridman_index_elmap(ELMAP,NMIN,NMAX,INDEX,IERR)
318  INTEGER(GRIDMAN_SP),ALLOCATABLE,INTENT(OUT) :: elmap(:)
319  INTEGER(GRIDMAN_SP),INTENT(OUT) :: nmin,nmax
320  TYPE(gridman_index) :: index
321  INTEGER,INTENT(OUT) :: ierr
322  END SUBROUTINE gridman_index_elmap
323 C
324  SUBROUTINE gridman_index_create121(INDEX,N,IERR)
326  TYPE(gridman_index) :: index
327  INTEGER(GRIDMAN_SP),INTENT(IN) :: n
328  INTEGER,INTENT(OUT) :: ierr
329  END SUBROUTINE gridman_index_create121
330 C
331  SUBROUTINE gridman_index_transform(INDEX2,INDEX1,IMAP12,N12,IERR)
333  TYPE(gridman_index) :: index2,index1
334  INTEGER(GRIDMAN_SP),INTENT(IN) :: n12
335  INTEGER(GRIDMAN_SP),INTENT(IN) :: imap12(2,n12)
336  INTEGER,INTENT(OUT) :: ierr
337  END SUBROUTINE gridman_index_transform
338 C
339  SUBROUTINE gridman_index_merge(INDEX,INDEX1,INDEX2,IERR)
340  USE gridman,ONLY:gridman_index
341  TYPE(gridman_index) ::index,index1,index2
342  INTEGER,INTENT(OUT) :: ierr
343  END SUBROUTINE gridman_index_merge
344 
345  END INTERFACE
346 
347 C***********************************************************************************
348 C INTERFACES, GRIDMAN_INDLIST
349 C***********************************************************************************
350 
351  INTERFACE
352 
353 C
354  SUBROUTINE gridman_indlist_allocate(INDLIST,L,N,IERR)
356  TYPE(gridman_indlist) :: indlist
357  INTEGER(GRIDMAN_SP),INTENT(IN) :: n,l
358  INTEGER,INTENT(OUT) :: ierr
359  END SUBROUTINE gridman_indlist_allocate
360 C
361  SUBROUTINE gridman_indlist_deallocate(CELLS,IERR)
362  USE gridman,ONLY:gridman_indlist
363  TYPE(gridman_indlist) :: cells
364  INTEGER,INTENT(OUT) :: ierr
365  END SUBROUTINE gridman_indlist_deallocate
366 
367  END INTERFACE
368 
369 C***********************************************************************************
370 C INTERFACES, GRDIMAN_GRID
371 C***********************************************************************************
372 
373  INTERFACE
374 C
375  SUBROUTINE gridman_grid_allocate(GRID,TYPE,NEDGES,NPOINTS,NCELLS,
376  s ierr,nedgeindex,ncellindex)
378  TYPE(gridman_grid) :: grid
379  INTEGER,INTENT(IN) :: TYPE
380  INTEGER(GRIDMAN_SP),INTENT(IN) :: ncells,nedges,npoints
381  INTEGER,INTENT(OUT) :: ierr
382  INTEGER,INTENT(IN),OPTIONAL :: nedgeindex,ncellindex
383  END SUBROUTINE gridman_grid_allocate
384 C
385  SUBROUTINE gridman_grid_deallocate(GRID,IERR)
386  USE gridman,ONLY:gridman_grid
387  TYPE(gridman_grid) :: grid
388  INTEGER,INTENT(OUT) :: ierr
389  END SUBROUTINE gridman_grid_deallocate
390 C
391  SUBROUTINE gridman_grid_check(GRID,RES,IERR)
392  USE gridman,ONLY:gridman_grid
393  TYPE(gridman_grid) :: grid
394  INTEGER,INTENT(OUT) :: res,ierr
395  END SUBROUTINE gridman_grid_check
396 C
397  SUBROUTINE gridman_grid_copy(GRID2,GRID1,IERR)
398  USE gridman,ONLY:gridman_grid
399  TYPE(gridman_grid) :: grid1,grid2
400  INTEGER,INTENT(OUT) :: ierr
401  END SUBROUTINE gridman_grid_copy
402 C
403  SUBROUTINE gridman_grid_comp(GRID1,GRID2,RES,IERR)
404  USE gridman,ONLY:gridman_grid
405  TYPE(gridman_grid) :: grid1,grid2
406  INTEGER,INTENT(OUT) :: res,ierr
407  END SUBROUTINE gridman_grid_comp
408 C
409  SUBROUTINE gridman_grid_take(GRID2,GRID1,IERR)
410  USE gridman,ONLY:gridman_grid
411  TYPE(gridman_grid) :: grid1,grid2
412  INTEGER,INTENT(OUT) :: ierr
413  END SUBROUTINE gridman_grid_take
414 C
415  SUBROUTINE gridman_grid_count(GRID,NCOUNT,IERR)
417  TYPE(gridman_grid) :: grid
418  INTEGER(GRIDMAN_SP),INTENT(OUT) :: ncount
419  INTEGER,INTENT(OUT) :: ierr
420  END SUBROUTINE gridman_grid_count
421 
422  END INTERFACE
423 
424 C
425  INTERFACE gridman_grid_write
426 
427  SUBROUTINE gridman_grid_unitwrite(GRID,IOUT,IERR)
428  USE gridman,ONLY:gridman_grid
429  TYPE(gridman_grid) :: grid
430  INTEGER,INTENT(IN) :: iout
431  INTEGER,INTENT(OUT) :: ierr
432  END SUBROUTINE gridman_grid_unitwrite
433 
434  SUBROUTINE gridman_grid_filewrite(GRID,FNAME,IERR)
435  USE gridman,ONLY:gridman_grid
436  TYPE(gridman_grid) :: grid
437  CHARACTER(*),INTENT(IN) :: fname
438  INTEGER,INTENT(OUT) :: ierr
439  END SUBROUTINE gridman_grid_filewrite
440 
441  END INTERFACE
442 
443 C
444  INTERFACE gridman_grid_read
445 
446  SUBROUTINE gridman_grid_unitread(GRID,IIN,IERR)
447  USE gridman,ONLY:gridman_grid
448  TYPE(gridman_grid) :: grid
449  INTEGER,INTENT(IN) :: iin
450  INTEGER,INTENT(OUT) :: ierr
451  END SUBROUTINE gridman_grid_unitread
452 
453  SUBROUTINE gridman_grid_fileread(GRID,FNAME,IERR)
454  USE gridman,ONLY:gridman_grid
455  TYPE(gridman_grid) :: grid
456  CHARACTER(*),INTENT(IN) :: fname
457  INTEGER,INTENT(OUT) :: ierr
458  END SUBROUTINE gridman_grid_fileread
459 
460  END INTERFACE
461 
462 C
463  INTERFACE
464 C
465  SUBROUTINE gridman_grid_combine(GRID,GRID1,GRID2,IERR)
466  USE gridman,ONLY:gridman_grid
467  TYPE(gridman_grid) :: grid, !RESULTING GRID
468  t grid1, !GRIDS TO BE COMBINED
469  t grid2
470  INTEGER,INTENT(OUT) :: ierr
471  END SUBROUTINE gridman_grid_combine
472 C
473  SUBROUTINE gridman_grid_cells(EDGES,GRID,IERR)
475  TYPE(gridman_indlist) :: edges
476  TYPE(gridman_grid) :: grid
477  INTEGER,INTENT(OUT) :: ierr
478  END SUBROUTINE gridman_grid_cells
479 C
480  SUBROUTINE gridman_grid_points(EDGES,GRID,IERR)
482  TYPE(gridman_indlist) :: edges
483  TYPE(gridman_grid) :: grid
484  INTEGER,INTENT(OUT) :: ierr
485  END SUBROUTINE gridman_grid_points
486 C
487  SUBROUTINE gridman_grid_eliminate_cells(GRID_NEW,GRID,LTAKE,IERR)
488  USE gridman,ONLY:gridman_grid
489  TYPE(gridman_grid) :: grid_new,grid
490  LOGICAL,INTENT(IN) :: ltake(grid%ncells)
491  INTEGER,INTENT(OUT) :: ierr
492  END SUBROUTINE gridman_grid_eliminate_cells
493 C
494  SUBROUTINE gridman_grid_eliminate_edges(GRID_NEW,GRID,LTAKE,IERR)
495  USE gridman,ONLY:gridman_grid
496  TYPE(gridman_grid) :: grid_new,grid
497  LOGICAL,INTENT(IN) :: ltake(grid%nedges)
498  INTEGER,INTENT(OUT) :: ierr
499  END SUBROUTINE gridman_grid_eliminate_edges
500 C
501  SUBROUTINE gridman_grid_remove_free_edges(GRID_NEW,GRID,IERR)
502  USE gridman,ONLY:gridman_grid
503  TYPE(gridman_grid) :: grid_new,grid
504  INTEGER,INTENT(OUT) :: ierr
505  END SUBROUTINE gridman_grid_remove_free_edges
506 
507  END INTERFACE
508 
509 C
510  INTERFACE gridman_grid_metadata
511 C
512  SUBROUTINE gridman_grid_metadata_text(GRID,TEXT,NT,IERR)
514  TYPE(gridman_grid) :: grid
515  CHARACTER(GRIDMAN_LENGTH),ALLOCATABLE :: text(:)
516  INTEGER,INTENT(OUT) :: nt
517  INTEGER,INTENT(OUT) :: ierr
518  END SUBROUTINE gridman_grid_metadata_text
519 C
520  SUBROUTINE gridman_grid_metadata_unit(GRID,IUNIT,IERR)
522  TYPE(gridman_grid) :: grid
523  INTEGER,INTENT(IN) :: iunit
524  INTEGER,INTENT(OUT) :: ierr
525  END SUBROUTINE gridman_grid_metadata_unit
526 
527  END INTERFACE gridman_grid_metadata
528 
529 C***********************************************************************************
530 C INTERFACES, BASIC GEOMETRICAL SUBROUTINES
531 C***********************************************************************************
532 C
533  INTERFACE
534 
535  FUNCTION gridman_triaarea(X1,Y1,X2,Y2,X3,Y3)
536  USE gridman,ONLY:gridman_dp
537  REAL(GRIDMAN_DP),INTENT(IN) :: x1,y1,x2,y2,x3,y3
538  REAL(GRIDMAN_DP) :: gridman_triaarea
539  END FUNCTION gridman_triaarea
540 
541 C
542  FUNCTION gridman_triavol(X1,Y1,X2,Y2,X3,Y3)
543  USE gridman,ONLY:gridman_dp
544  REAL(GRIDMAN_DP),INTENT(IN) :: x1,y1,x2,y2,x3,y3
545  REAL(GRIDMAN_DP) :: gridman_triavol
546  END FUNCTION gridman_triavol
547 
548 C
549  FUNCTION gridman_dist2d(X1,Y1,X2,Y2)
550  USE gridman,ONLY:gridman_dp
551  REAL(GRIDMAN_DP),INTENT(IN) :: x1,y1,x2,y2
552  REAL(GRIDMAN_DP) :: gridman_dist2d
553  END FUNCTION gridman_dist2d
554 
555 C
556  SUBROUTINE gridman_norm2d(X0,Y0,XN,YN)
557  USE gridman,ONLY:gridman_dp
558  REAL(GRIDMAN_DP),INTENT(IN) :: x0,y0
559  REAL(GRIDMAN_DP),INTENT(OUT) :: xn,yn
560  END SUBROUTINE gridman_norm2d
561 
562 C
563  FUNCTION gridman_conarea(X1,Y1,X2,Y2)
564  USE gridman,ONLY:gridman_dp
565  REAL(GRIDMAN_DP),INTENT(IN) :: x1,y1,x2,y2
566  REAL(GRIDMAN_DP) :: gridman_conarea
567  END FUNCTION gridman_conarea
568 
569 C
570  FUNCTION gridman_cross2d(X0,Y0,VX0,VY0,X1,Y1,X2,Y2,XI,YI)
571  USE gridman,ONLY:gridman_dp
572  REAL(GRIDMAN_DP),INTENT(IN) :: x0,y0,vx0,vy0,x1,y1,x2,y2
573  REAL(GRIDMAN_DP),INTENT(OUT) :: xi,yi
574  LOGICAL gridman_cross2d
575  END FUNCTION gridman_cross2d
576 
577 C
578  FUNCTION gridman_intersect2d(X11,Y11,X12,Y12,
579  f x21,y21,x22,y22,xi,yi)
580  USE gridman,ONLY:gridman_dp
581  REAL(GRIDMAN_DP),INTENT(IN) :: x11,y11,x12,y12,x21,y21,x22,y22
582  REAL(GRIDMAN_DP),INTENT(OUT) :: xi,yi
583  LOGICAL :: gridman_intersect2d
584  END FUNCTION gridman_intersect2d
585 
586 C
587  FUNCTION gridman_point_in_polygon(XP,YP,NP,X0,Y0)
588  USE gridman,ONLY:gridman_dp,gridman_sp
589  INTEGER(GRIDMAN_SP),INTENT(IN) :: np
590  REAL(GRIDMAN_DP) :: xp(np),yp(np),x0,y0
591  LOGICAL :: gridman_point_in_polygon
592  END FUNCTION gridman_point_in_polygon
593 
594 C
595  FUNCTION gridman_close2interval2d(X1,Y1,X2,Y2,X,Y,TOL)
596  USE gridman,ONLY:gridman_dp
597  REAL(GRIDMAN_DP),INTENT(IN) :: x1,y1,x2,y2,x,y,tol
598  LOGICAL :: gridman_close2interval2d
599  END FUNCTION gridman_close2interval2d
600 
601  END INTERFACE
602 
603 C***********************************************************************************
604 C INTERFACES, GRID2D
605 C***********************************************************************************
606  INTERFACE
607 C
608  SUBROUTINE gridman_grid2d_check(GRID,RES,IERR)
610  TYPE(gridman_grid) :: grid
611  INTEGER,INTENT(OUT) :: res,ierr
612  END SUBROUTINE gridman_grid2d_check
613 C
614  SUBROUTINE gridman_grid2d_chains(GRID,CHAINS,IERR)
616  TYPE(gridman_grid) :: grid
617  TYPE(gridman_indlist) :: chains
618  INTEGER,INTENT(OUT) :: ierr
619  END SUBROUTINE gridman_grid2d_chains
620 C
621  SUBROUTINE gridman_grid2d_lengths(GRID,LEDGES,IERR)
623  TYPE(gridman_grid) :: grid
624  REAL(GRIDMAN_DP) :: ledges(grid%nedges)
625  INTEGER,INTENT(OUT) :: ierr
626  END SUBROUTINE gridman_grid2d_lengths
627 C
628  SUBROUTINE gridman_grid2d_crossect(GRID,SCELLS,IERR)
630  TYPE(gridman_grid) :: grid
631  REAL(GRIDMAN_DP) :: scells(grid%ncells)
632  INTEGER,INTENT(OUT) :: ierr
633  END SUBROUTINE gridman_grid2d_crossect
634 C
635  SUBROUTINE gridman_grid2d_center(GRID,XCN,IERR)
637  TYPE(gridman_grid) :: grid
638  REAL(GRIDMAN_DP) :: xcn(2,grid%ncells)
639  INTEGER,INTENT(OUT) :: ierr
640  END SUBROUTINE gridman_grid2d_center
641 C
642  SUBROUTINE gridman_grid2d_norm(GRID,VN,IERR)
644  TYPE(gridman_grid) :: grid
645  REAL(GRIDMAN_DP) :: vn(2,grid%nedges)
646  INTEGER,INTENT(OUT) :: ierr
647  END SUBROUTINE gridman_grid2d_norm
648 C
649  SUBROUTINE gridman_grid2d_isconvex(GRID,ISCONVEX,IERR)
650  USE gridman,ONLY:gridman_grid
651  TYPE(gridman_grid) :: grid
652  LOGICAL :: isconvex(grid%ncells)
653  INTEGER,INTENT(OUT) :: ierr
654  END SUBROUTINE gridman_grid2d_isconvex
655 C
656  SUBROUTINE gridman_grid2d_cylareas(GRID,SEDGES,IERR,ANGLE)
658  TYPE(gridman_grid) :: grid
659  REAL(GRIDMAN_DP) :: sedges(grid%nedges)
660  INTEGER,INTENT(OUT) :: ierr
661  REAL(GRIDMAN_DP),OPTIONAL :: angle
662  END SUBROUTINE gridman_grid2d_cylareas
663 C
664  SUBROUTINE gridman_grid2d_cylvolumes(GRID,VCELLS,IERR,ANGLE)
666  TYPE(gridman_grid) :: grid
667  REAL(GRIDMAN_DP) :: vcells(grid%ncells)
668  INTEGER,INTENT(OUT) :: ierr
669  REAL(GRIDMAN_DP),OPTIONAL :: angle
670  END SUBROUTINE gridman_grid2d_cylvolumes
671 C
672  SUBROUTINE gridman_grid2d_triang(TRIA,GRID,IERR)
673  USE gridman,ONLY:gridman_grid
674  TYPE(gridman_grid) :: tria
675  TYPE(gridman_grid) :: grid
676  INTEGER,INTENT(OUT) :: ierr
677  END SUBROUTINE gridman_grid2d_triang
678 C
679  SUBROUTINE gridman_grid2d_merge(GRID,GRID1,GRID2,TOL,IERR)
681  TYPE(gridman_grid) :: grid,grid1,grid2
682  REAL(GRIDMAN_DP),INTENT(IN) :: tol
683  INTEGER,INTENT(OUT) :: ierr
684  END SUBROUTINE gridman_grid2d_merge
685 C
686  SUBROUTINE gridman_grid2d_cut(CUTGRID,GRID,XP,YP,NP,LEX,IERR)
688  TYPE(gridman_grid) :: cutgrid,grid
689  INTEGER(GRIDMAN_SP),INTENT(IN) :: np
690  REAL(GRIDMAN_DP),INTENT(IN) :: xp(np),yp(np)
691  LOGICAL,INTENT(IN) :: lex
692  INTEGER,INTENT(OUT) :: ierr
693  END SUBROUTINE gridman_grid2d_cut
694 
695  END INTERFACE
696 
697 C***********************************************************************************
698 C INTERFACES, FORMATS
699 C***********************************************************************************
700  INTERFACE gridman_tria_read
701 C
702  SUBROUTINE gridman_tria_read_array(FNAMES,NRKNOT,NTRII,XYTRIAN,
703  s necke,nchbar,nseite,itri,ierr)
704  USE gridman,ONLY:gridman_dp,gridman_sp
705  CHARACTER(*) :: fnames(3)
706  INTEGER(GRIDMAN_SP),INTENT(OUT) :: nrknot,ntrii
707  REAL(GRIDMAN_DP),ALLOCATABLE :: xytrian(:,:)
708  INTEGER(GRIDMAN_SP),ALLOCATABLE :: necke(:,:),nchbar(:,:),
709  i nseite(:,:),itri(:,:)
710  INTEGER,INTENT(OUT) :: ierr
711  END SUBROUTINE gridman_tria_read_array
712 C
713  SUBROUTINE gridman_tria_read_grid(GRID,FNAMES,IERR)
714  USE gridman,ONLY:gridman_grid
715  CHARACTER(*) :: fnames(3)
716  TYPE(gridman_grid) :: grid
717  INTEGER,INTENT(OUT) :: ierr
718  END SUBROUTINE gridman_tria_read_grid
719 
720  END INTERFACE gridman_tria_read
721 
722  INTERFACE gridman_tria_write
723 C
724  SUBROUTINE gridman_tria_write_array(FNAMES,NRKNOT,NTRII,XYTRIAN,
725  s necke,nchbar,nseite,itri,ierr)
726  USE gridman,ONLY:gridman_dp,gridman_sp
727  CHARACTER(*) :: fnames(3)
728  INTEGER(GRIDMAN_SP),INTENT(IN) :: nrknot,ntrii
729  REAL(GRIDMAN_DP),INTENT(IN) :: xytrian(2,nrknot)
730  INTEGER(GRIDMAN_SP),INTENT(IN) :: necke(3,ntrii),nchbar(3,ntrii),
731  i nseite(3,ntrii),itri(5,ntrii)
732  INTEGER,INTENT(OUT) :: ierr
733  END SUBROUTINE gridman_tria_write_array
734 C
735  SUBROUTINE gridman_tria_write_grid(GRID,FNAMES,IERR)
736  USE gridman,ONLY:gridman_grid
737  CHARACTER(*) :: fnames(3)
738  TYPE(gridman_grid) :: grid
739  INTEGER,INTENT(OUT) :: ierr
740  END SUBROUTINE gridman_tria_write_grid
741 
742  END INTERFACE gridman_tria_write
743 
744 C
745  INTERFACE gridman_carre_read30
746 C
747  SUBROUTINE gridman_carre_read30_array(FNAME,SONNETFILE,NX,NY,
748  s nncut,nxcut,nycut,
749  s nniso,nxiso,nyiso,br,bz,ierr)
750  USE gridman,ONLY:gridman_dp,gridman_sp
751  CHARACTER(*),INTENT(IN) :: fname
752  CHARACTER(*),INTENT(OUT) :: sonnetfile
753  INTEGER(GRIDMAN_SP),INTENT(OUT) :: nx,ny
754  INTEGER(GRIDMAN_SP),INTENT(OUT) :: nncut,nniso
755  INTEGER(GRIDMAN_SP),ALLOCATABLE :: nxcut(:,:),nycut(:,:),
756  i nxiso(:,:),nyiso(:,:)
757  REAL(GRIDMAN_DP),ALLOCATABLE :: br(:,:,:),bz(:,:,:)
758  INTEGER,INTENT(OUT) :: ierr
759  END SUBROUTINE gridman_carre_read30_array
760 C
761  SUBROUTINE gridman_carre_read30_grid(GRID,FNAME,IERR,LEIR)
762  USE gridman,ONLY:gridman_grid
763  CHARACTER(*),INTENT(IN) :: fname
764  TYPE(gridman_grid) :: grid
765  INTEGER,INTENT(OUT) :: ierr
766  LOGICAL,OPTIONAL :: leir
767  END SUBROUTINE gridman_carre_read30_grid
768 
769  END INTERFACE gridman_carre_read30
770 
771 C
772  INTERFACE gridman_carre_readsonnet
773 C
774  SUBROUTINE gridman_carre_readsonnet_array(FNAME,NX,NY,
775  s nncut,nxcut,nycut,
776  s nniso,nxiso,nyiso,
777  s rbt,br,bz,pit,bc,ierr)
778  USE gridman,ONLY:gridman_dp,gridman_sp
779  CHARACTER(*),INTENT(IN) :: fname
780  INTEGER(GRIDMAN_SP),INTENT(OUT) :: nx,ny
781  INTEGER(GRIDMAN_SP),INTENT(OUT) :: nncut, nniso
782  INTEGER(GRIDMAN_SP),ALLOCATABLE :: nxcut(:),nycut(:),
783  i nxiso(:),nyiso(:)
784  REAL(GRIDMAN_DP) :: rbt
785  REAL(GRIDMAN_DP),ALLOCATABLE :: br(:,:,:),bz(:,:,:),
786  r bc(:,:,:),pit(:,:)
787  INTEGER,INTENT(OUT) :: ierr
788  END SUBROUTINE gridman_carre_readsonnet_array
789 C
790  SUBROUTINE gridman_carre_readsonnet_grid(GRID,FNAME,IERR,LEIR)
791  USE gridman,ONLY:gridman_grid
792  CHARACTER(*),INTENT(IN) :: fname
793  TYPE(gridman_grid) :: grid
794  INTEGER,INTENT(OUT) :: ierr
795  LOGICAL,OPTIONAL :: leir
796  END SUBROUTINE gridman_carre_readsonnet_grid
797 
798  END INTERFACE gridman_carre_readsonnet
799 
800 C
801  INTERFACE gridman_addsurf2d_read
802 
803  SUBROUTINE gridman_addsurf2d_read_array(FNAME,NSURF,X,Y,ISRF,IERR)
804  USE gridman,ONLY:gridman_dp,gridman_sp
805  CHARACTER(*),INTENT(IN) :: fname
806  INTEGER(GRIDMAN_SP),INTENT(OUT) :: nsurf
807  REAL(GRIDMAN_DP),ALLOCATABLE :: x(:,:),y(:,:)
808  INTEGER(GRIDMAN_SP),ALLOCATABLE :: isrf(:)
809  INTEGER,INTENT(OUT) :: ierr
810  END SUBROUTINE gridman_addsurf2d_read_array
811 
812  SUBROUTINE gridman_addsurf2d_read_grid(GRID,FNAME,IERR)
813  USE gridman,ONLY:gridman_grid
814  IMPLICIT NONE
815  TYPE(gridman_grid) :: grid
816  CHARACTER(*),INTENT(IN) :: fname
817  INTEGER,INTENT(OUT) :: ierr
818  END SUBROUTINE gridman_addsurf2d_read_grid
819 
820  END INTERFACE gridman_addsurf2d_read
821 
822 C
823  INTERFACE gridman_addsurf3d_read
824 
825  SUBROUTINE gridman_addsurf3d_read_array(FNAME,NSURF,X,Y,Z,
826  s isrf,ierr)
827  USE gridman,ONLY:gridman_dp,gridman_sp
828  CHARACTER(*),INTENT(IN) :: fname
829  INTEGER(GRIDMAN_SP),INTENT(OUT) :: nsurf
830  REAL(GRIDMAN_DP),ALLOCATABLE :: x(:,:),y(:,:),z(:,:)
831  INTEGER(GRIDMAN_SP),ALLOCATABLE :: isrf(:)
832  INTEGER,INTENT(OUT) :: ierr
833  END SUBROUTINE gridman_addsurf3d_read_array
834 
835  SUBROUTINE gridman_addsurf3d_read_grid(GRID,FNAME,IERR)
836  USE gridman,ONLY:gridman_grid
837  TYPE(gridman_grid) :: grid
838  CHARACTER(*),INTENT(IN) :: fname
839  INTEGER,INTENT(OUT) :: ierr
840  END SUBROUTINE gridman_addsurf3d_read_grid
841 
842  END INTERFACE gridman_addsurf3d_read
843 
844 C
845  INTERFACE gridman_template_read
846 
847  SUBROUTINE gridman_template_read_array(FNAME,M,N,L,X,Y,IERR)
848  USE gridman,ONLY:gridman_dp,gridman_sp
849  CHARACTER(*),INTENT(IN) :: fname
850  INTEGER(GRIDMAN_SP),INTENT(OUT) :: m,l
851  INTEGER(GRIDMAN_SP),ALLOCATABLE :: n(:)
852  REAL(GRIDMAN_DP),ALLOCATABLE :: x(:),y(:)
853  INTEGER,INTENT(OUT) :: ierr
854  END SUBROUTINE gridman_template_read_array
855 
856  SUBROUTINE gridman_template_read_grid(GRID,FNAME,IERR)
857  USE gridman,ONLY:gridman_grid
858  TYPE(gridman_grid) :: grid
859  CHARACTER(*),INTENT(IN) :: fname
860  INTEGER,INTENT(OUT) :: ierr
861  END SUBROUTINE gridman_template_read_grid
862 
863  END INTERFACE gridman_template_read
864 
865  INTERFACE gridman_template_write
866 
867  SUBROUTINE gridman_template_write_array(FNAME,M,N,L,X,Y,IERR)
868  USE gridman,ONLY:gridman_dp,gridman_sp
869  IMPLICIT NONE
870  CHARACTER(*),INTENT(IN) :: fname
871  INTEGER(GRIDMAN_SP),INTENT(IN) :: m,n(m),l
872  REAL(GRIDMAN_DP),INTENT(IN) :: x(l),y(l)
873  INTEGER,INTENT(OUT) :: ierr
874  END SUBROUTINE gridman_template_write_array
875 
876 C
877  SUBROUTINE gridman_template_write_grid(GRID,FNAME,IERR)
878  USE gridman,ONLY:gridman_grid
879  TYPE(gridman_grid) :: grid
880  CHARACTER(*),INTENT(IN) :: fname
881  INTEGER,INTENT(OUT) :: ierr
882  END SUBROUTINE gridman_template_write_grid
883 
884  END INTERFACE gridman_template_write
885 
886  INTERFACE
887 C
888  SUBROUTINE gridman_vtk_write_grid(IOUT,HEADER,
889  s npoints,ncells,nvertex,nd,
890  s x,ifirst,lvertex,ivertex,
891  s ctype,ierr)
892  USE gridman,ONLY:gridman_sp,gridman_dp
893  INTEGER,INTENT(IN) :: iout
894  CHARACTER(*),INTENT(IN) :: header
895  INTEGER(GRIDMAN_SP),INTENT(IN) :: npoints,ncells,nvertex
896  INTEGER,INTENT(IN) :: nd
897  REAL(GRIDMAN_DP),INTENT(IN) :: x(nd,npoints)
898  INTEGER(GRIDMAN_SP),INTENT(IN) :: ifirst(ncells),lvertex(ncells),
899  i ivertex(nvertex)
900  INTEGER,INTENT(IN) :: ctype(ncells)
901  INTEGER,INTENT(OUT) :: ierr
902  END SUBROUTINE gridman_vtk_write_grid
903 
904 C
905  SUBROUTINE gridman_vtk_write_scalars(IOUT,DATANAME,N,S,IERR)
906  USE gridman,ONLY:gridman_sp,gridman_dp
907  INTEGER,INTENT(IN) :: iout
908  CHARACTER(*),INTENT(IN) :: dataname
909  INTEGER(GRIDMAN_SP),INTENT(IN) :: n
910  REAL(GRIDMAN_DP),INTENT(IN) :: s(n)
911  INTEGER,INTENT(OUT) :: ierr
912  END SUBROUTINE gridman_vtk_write_scalars
913 C
914  SUBROUTINE gridman_vtk_write_vectors(IOUT,DATANAME,N,ND,V,IERR)
915  USE gridman,ONLY:gridman_sp,gridman_dp
916  INTEGER,INTENT(IN) :: iout
917  CHARACTER(*) :: dataname
918  INTEGER(GRIDMAN_SP),INTENT(IN) :: n
919  INTEGER,INTENT(IN) :: nd
920  REAL(GRIDMAN_DP) :: v(nd,n)
921  INTEGER,INTENT(OUT) :: ierr
922  END SUBROUTINE gridman_vtk_write_vectors
923 C
924  SUBROUTINE gridman_vtk_write(FNAME,HEADER,
925  s npoints,ncells,nvertex,nd,
926  s x,ifirst,lvertex,ivertex,ctype,
927  s ncs,ncv,nps,npv,ierr,
928  s cell_scalar,csname,
929  s cell_vector,cvname,
930  s point_scalar,psname,
931  s point_vector,pvname)
932  USE gridman,ONLY:gridman_sp,gridman_dp
933  CHARACTER(*),INTENT(IN) :: fname,header
934  INTEGER(GRIDMAN_SP),INTENT(IN) :: npoints,ncells,nvertex
935  INTEGER,INTENT(IN) :: nd
936  REAL(GRIDMAN_DP),INTENT(IN) :: x(nd,npoints)
937  INTEGER(GRIDMAN_SP),INTENT(IN) :: ifirst(ncells),lvertex(ncells),
938  i ivertex(nvertex)
939  INTEGER,INTENT(IN) :: ctype(ncells)
940  INTEGER,INTENT(IN) :: ncs,ncv,nps,npv
941  INTEGER,INTENT(OUT) :: ierr
942  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL ::
943  r cell_scalar(ncells,ncs),
944  r cell_vector(nd,ncells,ncv),
945  r point_scalar(npoints,nps),
946  r point_vector(nd,npoints,npv)
947  CHARACTER(*),INTENT(IN),OPTIONAL :: csname(ncs),
948  c cvname(ncv),
949  c psname(nps),
950  c pvname(npv)
951  END SUBROUTINE gridman_vtk_write
952 
953  END INTERFACE
954 
955 C***********************************************************************************
956 C INTERFACES, CONVERT
957 C***********************************************************************************
958  INTERFACE
959 C
960  SUBROUTINE gridman_tria2grid(GRID,NRKNOT,NTRII,XYTRIAN,NECKE,
961  s nchbar,nseite,itri,ierr)
963  TYPE(gridman_grid) :: grid
964  INTEGER(GRIDMAN_SP),INTENT(IN) :: nrknot,ntrii
965  REAL(GRIDMAN_DP),INTENT(IN) :: xytrian(2,nrknot)
966  INTEGER(GRIDMAN_SP),INTENT(IN) ::
967  i necke(3,ntrii),nchbar(3,ntrii),
968  i nseite(3,ntrii),itri(5,ntrii)
969  INTEGER,INTENT(OUT) :: ierr
970  END SUBROUTINE gridman_tria2grid
971 C
972  SUBROUTINE gridman_grid2tria(GRID,XYTRIAN,NECKE,
973  s nchbar,nseite,itri,ierr)
975  TYPE(gridman_grid) :: grid
976  REAL(GRIDMAN_DP),INTENT(IN) :: xytrian(2,grid%npoints)
977  INTEGER(GRIDMAN_SP),INTENT(IN) ::
978  i necke(3,grid%NCELLS),nchbar(3,grid%NCELLS),
979  i nseite(3,grid%NCELLS),itri(5,grid%NCELLS)
980  INTEGER,INTENT(OUT) :: ierr
981  END SUBROUTINE gridman_grid2tria
982 
983 C
984  SUBROUTINE gridman_carre2grid_fort30(GRID,LXB,LYB,NXB,NYB,NNCUT,
985  s nxcut,nycut,nniso,
986  s nxiso,nyiso,br,bz,
987  s lx,ly,nxl,nyl,ierr,leir)
989  TYPE(gridman_grid) :: grid
990  INTEGER(GRIDMAN_SP),INTENT(IN) :: lxb,lyb,nxb,nyb,lx,ly,nxl,nyl
991  INTEGER(GRIDMAN_SP),INTENT(IN) :: nncut,nniso
992  INTEGER(GRIDMAN_SP),INTENT(IN) :: nxcut(2,nncut),nycut(2,nncut),
993  i nxiso(2,nniso),nyiso(2,nniso)
994  REAL(GRIDMAN_DP) :: br(lxb:nxb,lyb:nyb,4),bz(lxb:nxb,lyb:nyb,4)
995  INTEGER,INTENT(OUT) :: ierr
996  LOGICAL,OPTIONAL :: leir
997  END SUBROUTINE gridman_carre2grid_fort30
998 
999 C
1000  SUBROUTINE gridman_carre2grid(GRID,
1001  s lxb,lyb,nxb,nyb,nncut,nxcut,nycut,
1002  s nniso,nxiso,nyiso,br,bz,
1003  s lx,ly,nxl,nyl,ierr,leir)
1005  TYPE(gridman_grid) :: grid
1006  INTEGER(GRIDMAN_SP),INTENT(IN) :: lxb,lyb,nxb,nyb,lx,ly,nxl,nyl
1007  INTEGER(GRIDMAN_SP),INTENT(IN) :: nncut,nniso
1008  INTEGER(GRIDMAN_SP),INTENT(IN) :: nxcut(nncut),nycut(nncut),
1009  i nxiso(nniso),nyiso(nniso)
1010  REAL(GRIDMAN_DP) :: br(lxb:nxb,lyb:nyb,4),bz(lxb:nxb,lyb:nyb,4)
1011  INTEGER,INTENT(OUT) :: ierr
1012  LOGICAL,OPTIONAL :: leir
1013  END SUBROUTINE gridman_carre2grid
1014 
1015 C
1016  SUBROUTINE gridman_addsurf2grid_2d(GRID,NSURF,X,Y,ISRF,IERR)
1018  TYPE(gridman_grid) :: grid
1019  INTEGER(GRIDMAN_SP),INTENT(IN) :: nsurf
1020  REAL(GRIDMAN_DP) :: x(2,nsurf),y(2,nsurf)
1021  INTEGER(GRIDMAN_SP) :: isrf(nsurf)
1022  INTEGER :: ierr
1023  END SUBROUTINE gridman_addsurf2grid_2d
1024 
1025 C
1026  SUBROUTINE gridman_addsurf2grid_3d(GRID,NSURF,X,Y,Z,ISRF,IERR)
1028  TYPE(gridman_grid) :: grid
1029  INTEGER(GRIDMAN_SP),INTENT(IN) :: nsurf
1030  REAL(GRIDMAN_DP) :: x(3,nsurf),y(3,nsurf),z(3,nsurf)
1031  INTEGER(GRIDMAN_SP) :: isrf(nsurf)
1032  INTEGER :: ierr
1033  END SUBROUTINE gridman_addsurf2grid_3d
1034 
1035 C
1036  SUBROUTINE gridman_template2grid(GRID,M,N,L,X,Y,IERR)
1038  TYPE(gridman_grid) :: grid
1039  INTEGER(GRIDMAN_SP),INTENT(IN) :: m,l,n(m)
1040  REAL(GRIDMAN_DP),INTENT(IN) :: x(l),y(l)
1041  INTEGER,INTENT(OUT) :: ierr
1042  END SUBROUTINE gridman_template2grid
1043 
1044 C
1045  SUBROUTINE gridman_2dgrid2vtk_index(GRID,N,M,RINDEXES,
1046  s sindexes,ierr)
1048  u gridman_length
1049  TYPE(gridman_grid) :: grid
1050  INTEGER(GRIDMAN_SP),INTENT(OUT) :: n
1051  INTEGER,INTENT(OUT) :: m
1052  REAL(GRIDMAN_DP),ALLOCATABLE,INTENT(OUT) :: rindexes(:,:)
1053  CHARACTER(GRIDMAN_LENGTH) :: sindexes(:)
1054  INTEGER,INTENT(OUT) :: ierr
1055  END SUBROUTINE gridman_2dgrid2vtk_index
1056 
1057 C
1058  SUBROUTINE gridman_grid2template(GRID,M,N,L,X,Y,IERR)
1060  TYPE(gridman_grid) :: grid
1061  INTEGER(GRIDMAN_SP),INTENT(OUT) :: m,l
1062  INTEGER(GRIDMAN_SP),ALLOCATABLE :: n(:)
1063  REAL(GRIDMAN_DP),ALLOCATABLE :: x(:),y(:)
1064  INTEGER,INTENT(OUT) :: ierr
1065  END SUBROUTINE gridman_grid2template
1066 
1067 C
1068  SUBROUTINE gridman_2dgrid2vtk(GRID,NPOINTS,NCELLS,NVERTEX,
1069  s x,ifirst,lvertex,ivertex,ctype,
1070  s ierr,ntheta,theta)
1072  TYPE(gridman_grid) :: grid
1073  INTEGER(GRIDMAN_SP),INTENT(OUT) :: npoints,ncells,nvertex
1074  REAL(GRIDMAN_DP),ALLOCATABLE,INTENT(OUT) :: x(:,:)
1075  INTEGER(GRIDMAN_SP),ALLOCATABLE,INTENT(OUT) ::
1076  i ifirst(:),lvertex(:),ivertex(:)
1077  INTEGER,ALLOCATABLE,INTENT(OUT) :: ctype(:)
1078  INTEGER,INTENT(OUT) :: ierr
1079  INTEGER,INTENT(IN) :: ntheta
1080  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL :: theta(ntheta)
1081  END SUBROUTINE gridman_2dgrid2vtk
1082 
1083 C
1084  SUBROUTINE gridman_3dgrid2vtk(GRID,NPOINTS,NCELLS,NVERTEX,X,
1085  s ifirst,lvertex,ivertex,
1086  s ctype,ierr)
1088  TYPE(gridman_grid) :: grid
1089  INTEGER(GRIDMAN_SP),INTENT(OUT) :: npoints,ncells,nvertex
1090  REAL(GRIDMAN_DP),ALLOCATABLE,INTENT(OUT) :: x(:,:)
1091  INTEGER(GRIDMAN_SP),ALLOCATABLE,INTENT(OUT) ::
1092  i ifirst(:),lvertex(:),ivertex(:)
1093  INTEGER,ALLOCATABLE,INTENT(OUT) :: ctype(:)
1094  INTEGER,INTENT(OUT) :: ierr
1095  END SUBROUTINE gridman_3dgrid2vtk
1096 
1097 C
1098  SUBROUTINE gridman_3dgrid2vtk_index(GRID,N,M,RINDEXES,
1099  s sindexes,ierr)
1101  u gridman_length
1102  TYPE(gridman_grid) :: grid
1103  INTEGER(GRIDMAN_SP),INTENT(OUT) :: n
1104  INTEGER,INTENT(OUT) :: m
1105  REAL(GRIDMAN_DP),ALLOCATABLE,INTENT(OUT) :: rindexes(:,:)
1106  CHARACTER(GRIDMAN_LENGTH),ALLOCATABLE,INTENT(OUT) :: sindexes(:)
1107  INTEGER,INTENT(OUT) :: ierr
1108  END SUBROUTINE gridman_3dgrid2vtk_index
1109 
1110 C
1111  SUBROUTINE gridman_vtk_grid2d_write(FNAME,HEADER,
1112  s grid,nelements,
1113  s ncs,ncv,nps,npv,ierr,
1114  s cell_scalar,csname,
1115  s cell_vector,cvname,
1116  s point_scalar,psname,
1117  s point_vector,pvname)
1119  CHARACTER(*),INTENT(IN) :: fname,header
1120  TYPE(gridman_grid) :: grid
1121  INTEGER(GRIDMAN_SP),INTENT(IN) :: nelements
1122  INTEGER,INTENT(IN) :: ncs,ncv,nps,npv
1123  INTEGER,INTENT(OUT) :: ierr
1124  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL ::
1125  r cell_scalar(grid%NCELLS,ncs)
1126  CHARACTER(*),INTENT(IN),OPTIONAL :: csname(ncs)
1127  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL ::
1128  r cell_vector(2,grid%NCELLS,ncv)
1129  CHARACTER(*),INTENT(IN),OPTIONAL :: cvname(ncv)
1130  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL ::
1131  r point_scalar(grid%NPOINTS,nps)
1132  CHARACTER(*),INTENT(IN),OPTIONAL :: psname(nps)
1133  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL ::
1134  r point_vector(2,grid%NPOINTS,npv)
1135  CHARACTER(*),INTENT(IN),OPTIONAL :: pvname(npv)
1136  END SUBROUTINE gridman_vtk_grid2d_write
1137 
1138 C
1139  SUBROUTINE gridman_vtk_grid3d_write(FNAME,HEADER,
1140  s grid,nelements,
1141  s ncs,ncv,nps,npv,ierr,
1142  s cell_scalar,csname,
1143  s cell_vector,cvname,
1144  s point_scalar,psname,
1145  s point_vector,pvname)
1147  CHARACTER(*),INTENT(IN) :: fname,header
1148  TYPE(gridman_grid) :: grid
1149  INTEGER(GRIDMAN_SP),INTENT(IN) :: nelements
1150  INTEGER,INTENT(IN) :: ncs,ncv,nps,npv
1151  INTEGER,INTENT(OUT) :: ierr
1152  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL ::
1153  r cell_scalar(nelements,ncs)
1154  CHARACTER(*),INTENT(IN),OPTIONAL :: csname(ncs)
1155  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL ::
1156  r cell_vector(3,nelements,ncv)
1157  CHARACTER(*),INTENT(IN),OPTIONAL :: cvname(ncv)
1158  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL ::
1159  r point_scalar(grid%NPOINTS,nps)
1160  CHARACTER(*),INTENT(IN),OPTIONAL :: psname(nps)
1161  REAL(GRIDMAN_DP),INTENT(IN),OPTIONAL ::
1162  r point_vector(3,grid%NPOINTS,npv)
1163  CHARACTER(*),INTENT(IN),OPTIONAL :: pvname(npv)
1164  END SUBROUTINE gridman_vtk_grid3d_write
1165 
1166  END INTERFACE
1167 
1168  END MODULE gridman_lib
subroutine gridman_carre2grid(GRID, LXB, LYB, NXB, NYB, NNCUT, NXCUT, NYCUT, NNISO, NXISO, NYISO, BR, BZ, LX, LY, NXL, NYL, IERR, LEIR)
Convert B2 (CARRE, SONNET) grid into GRIDMAN_GRID grid object.
Definition: carre.f:72
subroutine gridman_grid_points(EDGES, GRID, IERR)
Create table of edges connected to each point.
Definition: grid2.f:361
logical, save, public gridman_check
Switch to enforce extra checks of input parameters.
Definition: gridman.f:133
subroutine gridman_grid_check(GRID, RES, IERR)
Check consistency of the grid data.
Definition: grid1.f:289
subroutine gridman_index_create121(INDEX, N, IERR)
Create index table for "one-to-one" mapping.
Definition: index.f:733
logical function gridman_intersect2d(X11, Y11, X12, Y12, X21, Y21, X22, Y22, XI, YI)
Intersection of two intervals on a plane.
Definition: geom.f:167
logical function gridman_cross2d(X0, Y0, V, U, X1, Y1, X2, Y2, XI, YI)
Intersection of "particle trajectory" with an interval (2D)
Definition: geom.f:108
subroutine gridman_vtk_write_scalars(IOUT, DATANAME, N, S, IERR)
Write scalar data in VTK format.
Definition: vtk.f:518
subroutine gridman_indlist_allocate(INDLIST, N, L, IERR)
Allocate list of elements.
Definition: indlist.f:32
subroutine gridman_index_check(INDEX, RES, IERR)
Check index object.
Definition: index.f:149
integer, parameter, public gridman_length
Length of the description strings.
Definition: gridman.f:101
integer, save, public gridman_unit
Index of the standard output unit.
Definition: gridman.f:116
subroutine gridman_grid2d_merge(GRID, GRID1, GRID2, TOL, IERR)
Merge two 2D grids by connecting their boundary edges.
Definition: merge.f:39
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
integer(gridman_sp), parameter, public gridman_ver
Index of the current version.
Definition: gridman.f:99
subroutine gridman_grid_eliminate_edges(GRID_NEW, GRID, LTAKE, IERR)
Eliminate edges the GRIDMAN_GRID object.
Definition: grid2.f:816
subroutine gridman_grid_eliminate_cells(GRID_NEW, GRID, LTAKE, IERR)
Eliminate cells from GRIDMAN_GRID object.
Definition: grid2.f:544
integer, parameter, public gridman_dp
Kind parameter for real numbers.
Definition: gridman.f:93
subroutine gridman_addsurf2d_read_grid(GRID, FNAME, IERR)
Read planar EIRENE Additional Surfaces and convert them into (2D) grid object.
Definition: addsurf.f:128
Explicit interfaces to GRIDMAN subroutines and functions.
Definition: gridman.f:251
subroutine gridman_template_write_grid(GRID, FNAME, IERR)
Write GRIDMAN_GRID object in a simple template format (DG template)
Definition: template.f:389
real(gridman_dp) function gridman_triavol(X1, Y1, X2, Y2, X3, Y3)
Volume of the solid of revolution obtained by rotating of a triangle around axis X=0.
Definition: geom.f:42
subroutine gridman_addsurf2grid_2d(GRID, NSURF, X, Y, ISRF, IERR)
Convert planar EIRENE Additional Surfaces into grid object.
Definition: addsurf.f:31
subroutine gridman_grid_allocate(GRID, TYPE, NEDGES, NPOINTS, NCELLS, IERR, NEDGEINDEX, NCELLINDEX)
Allocate GRIDMAN_GRID object.
Definition: grid1.f:30
subroutine gridman_index_compare(INDEX1, INDEX2, RES, IERR)
Compare two index objects.
Definition: index.f:423
subroutine gridman_grid2d_chains(GRID, CHAINS, IERR)
Find closed chain of points which form each cell.
Definition: grid2d.f:266
subroutine gridman_3dgrid2vtk_index(GRID, N, M, RINDEXES, SINDEXES, IERR)
Translate edge indices in VTK input in the sense of GRIDMAN_3DGRID2VTK (in the current implementation...
Definition: vtk.f:940
subroutine gridman_grid2d_cut(CUTGRID, GRID, XP, YP, NP, LEX, IERR)
Select part of a 2D grid cut by polygon.
Definition: cut.f:38
subroutine gridman_carre_read30_array(FNAME, STITLE, NX, NY, NNCUT, NXCUT, NYCUT, NNISO, NXISO, NYISO, BR, BZ, IERR)
Read B2 (CARRE, SONNET) grid from fort.30, return separate arrays.
Definition: carre.f:54
logical function gridman_close2interval2d(X1, Y1, X2, Y2, X, Y, TOL)
Find if point is close to the interval within prescribed tolerance.
Definition: geom.f:325
subroutine gridman_index_copy(INDEX2, INDEX1, IERR)
Create a copy of the index object.
Definition: index.f:538
subroutine gridman_grid_cells(EDGES, GRID, IERR)
Create a list of edges which belong to each cell.
Definition: grid2.f:177
subroutine gridman_grid_unitread(GRID, IIN, IERR)
Read grid object from file defined by unit number.
Definition: grid1.f:767
subroutine gridman_grid_take(GRID2, GRID1, IERR)
Take data from one grid object to another.
Definition: grid1.f:1283
subroutine gridman_grid_count(GRID, NCOUNT, IERR)
Return the number of cells plus the number of edges not belonging to any cell.
Definition: grid1.f:1360
subroutine gridman_grid2d_check(GRID, RES, IERR)
Check correctness of the 2D grid object.
Definition: grid2d.f:37
subroutine gridman_grid2d_cylareas(GRID, SEDGES, IERR, ANGLE)
Calculate cylindrical areas of the cell edges.
Definition: grid2d.f:944
subroutine gridman_vtk_write_grid(IOUT, HEADER, NPOINTS, NCELLS, NVERTEX, ND, X, IFIRST, LVERTEX, IVERTEX, CTYPE, IERR)
Write header and grid in VTK ASCII legacy format.
Definition: vtk.f:262
subroutine gridman_index_transform(INDEX2, INDEX1, IMAP12, N12, IERR)
Transform indices of elements - IND(0,:)
Definition: index.f:788
subroutine gridman_indlist_deallocate(INDLIST, IERR)
Deallocate list of indices.
Definition: indlist.f:106
subroutine gridman_tria_read_grid(GRID, FNAMES, IERR)
Read EIRENE triangular grid from fort.33-35, returns GRID object.
Definition: tria.f:558
real(gridman_dp) function gridman_conarea(X1, Y1, X2, Y2)
Area of the conical surface obtained by rotation of the interval (X1,Y1),(X2,Y2) around X=0...
Definition: geom.f:89
Data-type which describes a grid as a set of edges, methods in grid.f.
Definition: gridman.f:168
subroutine gridman_vtk_grid2d_write(FNAME, HEADER, GRID, NELEMENTS, NCS, NCV, NPS, NPV, IERR, CELL_SCALAR, CSNAME, CELL_VECTOR, CVNAME, POINT_SCALAR, PSNAME, POINT_VECTOR, PVNAME)
Write 2D grid and data in VTK ASCII legacy format.
Definition: vtk.f:611
subroutine gridman_grid_metadata_unit(GRID, IUNIT, IERR)
Print metadata into unit - shell for GRIDMAN_GRID_METADATA_TEXT.
Definition: grid1.f:1510
subroutine gridman_template_read_array(FNAME, M, N, L, X, Y, IERR)
Read planar coordinates from a simple template file (DG template)
Definition: template.f:54
subroutine gridman_grid2d_triang(TRIA, GRID, IERR)
Triangulation of 2D grid.
Definition: triang.f:55
subroutine gridman_grid2tria(GRID, XYTRIAN, NECKE, NCHBAR, NSEITE, ITRI, IERR)
Convert GRIDMAN_GRID grid object into EIRENE triangular grid.
Definition: tria.f:310
subroutine gridman_grid_deallocate(GRID, IERR)
Deallocate grid object.
Definition: grid1.f:184
subroutine gridman_grid2d_center(GRID, XCN, IERR)
Calculate coordinates of the cell centers.
Definition: grid2d.f:559
subroutine gridman_tria_write_array(FNAMES, NRKNOT, NTRII, XYTRIAN, NECKE, NCHBAR, NSEITE, ITRI, IERR)
Write EIRENE triangular grid - defined as set of arrays - into fort.33-35.
Definition: tria.f:270
subroutine gridman_tria2grid(GRID, NRKNOT, NTRII, XYTRIAN, NECKE, NCHBAR, NSEITE, ITRI, IERR)
Convert EIRENE triangular grid into GRIDMAN_GRID grid object (type=GRID2D)
Definition: tria.f:38
subroutine gridman_index_allocate(INDEX, NINDEX, NELEMENTS, IERR)
Allocate index object.
Definition: index.f:28
subroutine gridman_3dgrid2vtk(GRID, NPOINTS, NCELLS, NVERTEX, X, IFIRST, LVERTEX, IVERTEX, CTYPE, IERR)
Convert 3D grid into VTK format. Only grid w/o cells is implemented at the moment !!! ...
Definition: vtk.f:850
subroutine gridman_grid2template(GRID, M, N, L, X, Y, IERR)
Convert GRIDMAN_GRID object into arrays which can be stored in simple template format (DG template) ...
Definition: template.f:239
subroutine gridman_tria_write_grid(GRID, FNAMES, IERR)
Write EIRENE triangular grid - defined as GRID object - into fort.33-35.
Definition: tria.f:613
subroutine gridman_grid2d_isconvex(GRID, ISCONVEX, IERR)
Find if cells are convex polygons or not.
Definition: grid2d.f:830
subroutine gridman_grid_copy(GRID2, GRID1, IERR)
Create a copy of the grid object.
Definition: grid1.f:981
subroutine gridman_grid_unitwrite(GRID, IOUT, IERR)
Save grid object in a file defined by the unit index.
Definition: grid1.f:541
subroutine gridman_carre_readsonnet_array(FNAME, NX, NY, NNCUT, NXCUT, NYCUT, NNISO, NXISO, NYISO, RBT, BR, BZ, PIT, BC, IERR)
Read carre grid in SONNET format, return separate arrays.
Definition: carre.f:282
subroutine gridman_addsurf3d_read_grid(GRID, FNAME, IERR)
Read triangular EIRENE Additional Surfaces and convert them into (3D) grid object.
Definition: addsurf.f:284
subroutine gridman_grid2d_norm(GRID, VN, IERR)
Calculate unit normal vectors to grid edges.
Definition: grid2d.f:692
logical, save, public gridman_dbg
Switch for debugging mode.
Definition: gridman.f:122
subroutine gridman_index_elmap(ELMAP, NMIN, NMAX, INDEX, IERR)
Create an aray which maps elements into the table of indices.
Definition: index.f:643
subroutine gridman_template_write_array(FNAME, M, N, L, X, Y, IERR)
Write coordinates into simple template file (DG template)
Definition: template.f:243
logical function gridman_point_in_polygon(XP, YP, NP, X0, Y0)
Find if point lies inside a closed polygon.
Definition: geom.f:259
subroutine gridman_vtk_write_vectors(IOUT, DATANAME, N, ND, V, IERR)
Write vector data in VTK format.
Definition: vtk.f:575
Data-type which stores indices defined on the grid cells or edges.
Definition: gridman.f:144
real(gridman_dp), parameter, public gridman_2pi
2PI number
Definition: gridman.f:108
subroutine gridman_grid_combine(GRID, GRID1, GRID2, IERR)
Combine two grid objects into one.
Definition: grid2.f:31
Data-type which describes lists of elements with variable number of indices for each element...
Definition: gridman.f:225
subroutine gridman_grid_metadata_text(GRID, TEXT, NT, IERR)
Print metadata into text array.
Definition: grid1.f:1407
subroutine gridman_addsurf2grid_3d(GRID, NSURF, X, Y, Z, ISRF, IERR)
Convert triangular elements (EIRENE additional surfaces) into (3D) grid object.
Definition: addsurf.f:181
subroutine gridman_carre_readsonnet_grid(GRID, FNAME, IERR, LEIR)
Read CARRE grid in SONNET format, return GRID object.
Definition: carre.f:927
subroutine gridman_grid_fileread(GRID, FNAME, IERR)
Read grid object from file defined by file name.
Definition: grid1.f:931
real(gridman_dp) function gridman_triaarea(X1, Y1, X2, Y2, X3, Y3)
Area of a triangle.
Definition: geom.f:25
subroutine gridman_grid_filewrite(GRID, FNAME, IERR)
Save grid object in a file defined by the file name.
Definition: grid1.f:705
logical function gridman_index_repeated_elements(INDEX, IERR)
Check if the same element index appear more than once.
Definition: index.f:586
subroutine gridman_index_merge(INDEX, INDEX1, INDEX2, IERR)
Merge INDEX2 into INDEX1.
Definition: index.f:880
subroutine gridman_2dgrid2vtk_index(GRID, N, M, RINDEXES, SINDEXES, IERR)
Translate cell and edge indices in VTK input in the sense of GRIDMAN_2DGRID2VTK.
Definition: vtk.f:438
real(gridman_dp), parameter, public gridman_pi
PI number.
Definition: gridman.f:106
subroutine gridman_addsurf2d_read_array(FNAME, NSURF, X, Y, ISRF, IERR)
Read planar (2D) Additional Surfaces from EIRENE input file.
Definition: addsurf.f:37
subroutine gridman_index_read(INDEX, IIN, IERR)
Read index object from file.
Definition: index.f:327
subroutine gridman_index_write(INDEX, IOUT, IERR)
Save index object in a file.
Definition: index.f:234
Definition of data types, global constants and variables.
Definition: gridman.f:83
subroutine gridman_addsurf3d_read_array(FNAME, NSURF, X, Y, Z, ISRF, IERR)
Read triangular Additional Surfaces (3.0<=RLBND<4) from EIRENE input file.
Definition: addsurf.f:237
real(gridman_dp) function gridman_dist2d(X1, Y1, X2, Y2)
Distance between two points on a plane.
Definition: geom.f:58
subroutine gridman_index_deallocate(INDEX, IERR)
Allocate index object.
Definition: index.f:98
subroutine gridman_grid2d_lengths(GRID, LEDGES, IERR)
Calculate lengths of the cell edges.
Definition: grid2d.f:425
integer, parameter, public gridman_lword
Length of the string COLUMNS in GRIDMAN_INDEX.
Definition: gridman.f:103
subroutine gridman_norm2d(X0, Y0, XN, YN)
Vector (XY,YN) normal to (X0,Y0)
Definition: geom.f:73
subroutine gridman_vtk_grid3d_write(FNAME, HEADER, GRID, NELEMENTS, NCS, NCV, NPS, NPV, IERR, CELL_SCALAR, CSNAME, CELL_VECTOR, CVNAME, POINT_SCALAR, PSNAME, POINT_VECTOR, PVNAME)
Write 3D grid and data in VTK ASCII legacy format. Only grid w/o cells is implemented at the moment !...
Definition: vtk.f:1048
subroutine gridman_template2grid(GRID, M, N, L, X, Y, IERR)
Convert data read from a file in simple template format (DG template) into GRIDMAN_GRID object...
Definition: template.f:35
subroutine gridman_carre_read30_grid(GRID, FNAME, IERR, LEIR)
Read B2 (CARRE, SONNET) grid from fort.30, return GRID object.
Definition: carre.f:853
subroutine gridman_vtk_write(FNAME, HEADER, NPOINTS, NCELLS, NVERTEX, ND, X, IFIRST, LVERTEX, IVERTEX, CTYPE, NCS, NCV, NPS, NPV, IERR, CELL_SCALAR, CSNAME, CELL_VECTOR, CVNAME, POINT_SCALAR, PSNAME, POINT_VECTOR, PVNAME)
Write grid and data in VTK ASCII legacy format (interface)
Definition: vtk.f:34
subroutine gridman_grid_remove_free_edges(GRID_NEW, GRID, IERR)
Remove edges which do not belong to any cell from the GRIDMAN_GRID object.
Definition: grid2.f:999
subroutine gridman_grid2d_crossect(GRID, SCELLS, IERR)
Calculate cross section area of the cells.
Definition: grid2d.f:483
subroutine gridman_2dgrid2vtk(GRID, NPOINTS, NCELLS, NVERTEX, X, IFIRST, LVERTEX, IVERTEX, CTYPE, IERR, NTHETA, THETA)
Convert 2D grid into VTK format.
Definition: vtk.f:36
integer, parameter, public gridman_sp
Kind parameter for integer numbers.
Definition: gridman.f:95
subroutine gridman_tria_read_array(FNAMES, NRKNOT, NTRII, XYTRIAN, NECKE, NCHBAR, NSEITE, ITRI, IERR)
Read EIRENE triangular grid from fort.33-35, return set of arrays.
Definition: tria.f:38
subroutine gridman_template_read_grid(GRID, FNAME, IERR)
Read from a simple template file (DG template) into GRIDMAN_GRID object.
Definition: template.f:335