32 u gridman_dbg,gridman_check
42 INTEGER,
INTENT(OUT) :: IERR
44 INTEGER ::
TYPE,NEDGEINDEX,NCELLINDEX,RES,IC,I,II,IERR0
45 INTEGER(GRIDMAN_SP) :: NCELLS,NEDGES,NPOINTS,
46 i iedge,iedge2,nedges1,ncells1
49 w
"Starting GRIDMAN_GRID_COMBINE"
53 IF(gridman_check)
THEN
55 IF(res.NE.0.OR.ierr.GT.0)
THEN
62 IF(res.NE.0.OR.ierr.GT.0)
THEN
70 IF(grid1%TYPE.NE.grid2%TYPE.OR.
71 f grid1%EDIM.NE.grid2%EDIM.OR.
72 f grid1%PDIM.NE.grid2%PDIM)
THEN
75 w
"ERROR in GRIDMAN_GRID_COMBINE: grids have different type"
77 w
" GRID1: TYPE, EDIM, PDIM ",grid1%TYPE,grid1%EDIM,grid1%PDIM
79 w
" GRID2: TYPE, EDIM, PDIM ",grid2%TYPE,grid2%EDIM,grid2%PDIM
84 ncells=grid1%NCELLS+grid2%NCELLS
85 nedges=grid1%NEDGES+grid2%NEDGES
86 npoints=grid1%NPOINTS+grid2%NPOINTS
87 nedgeindex=grid1%NEDGEINDEX+grid2%NEDGEINDEX
88 ncellindex=grid1%NCELLINDEX+grid2%NCELLINDEX
91 s nedgeindex,ncellindex)
92 IF(ierr.NE.0)
GOTO 1000
94 grid%CELLS(:,1:grid1%NEDGES)=grid1%CELLS(:,1:grid1%NEDGES)
97 DO iedge2=1,grid2%NEDGES
99 grid%CELLS(:,iedge)=grid2%CELLS(:,iedge2)
101 IF(grid%CELLS(ic,iedge).GT.0)
THEN
102 grid%CELLS(ic,iedge)=grid%CELLS(ic,iedge)+ncells1
103 ELSEIF(grid%CELLS(ic,iedge).LT.0)
THEN
104 grid%CELLS(ic,iedge)=grid%CELLS(ic,iedge)-nedges1
109 grid%POINTS(:,1:grid1%NEDGES)=grid1%POINTS(:,1:grid1%NEDGES)
114 grid%UNIT2SI=grid1%UNIT2SI
115 grid%UNITS=grid1%UNITS
117 grid%X(:,1:grid1%NPOINTS)=grid1%X(:,1:grid1%NPOINTS)
118 grid%X(:,grid1%NPOINTS+1:npoints)=
119 = grid2%X(:,1:grid2%NPOINTS)*grid%UNIT2SI/grid2%UNIT2SI
121 DO i=1,grid1%NEDGEINDEX
123 c grid1%EDGEINDEX(i),ierr)
124 IF(ierr.NE.0)
GOTO 1000
126 DO i=1,grid2%NEDGEINDEX
127 ii=i+grid1%NEDGEINDEX
129 c grid2%EDGEINDEX(ii),ierr)
130 IF(ierr.NE.0)
GOTO 1000
132 grid%EDGEINDEX(ii)%INDEXES(0,:)=
133 = grid%EDGEINDEX(ii)%INDEXES(0,:)+grid1%NEDGES
136 DO i=1,grid1%NCELLINDEX
138 c grid1%CELLINDEX(i),ierr)
139 IF(ierr.NE.0)
GOTO 1000
141 DO i=1,grid2%NCELLINDEX
142 ii=i+grid1%NCELLINDEX
144 c grid2%CELLINDEX(ii),ierr)
145 IF(ierr.NE.0)
GOTO 1000
147 grid%CELLINDEX(ii)%INDEXES(0,:)=
148 = grid%CELLINDEX(ii)%INDEXES(0,:)+grid1%NCELLS
151 IF(gridman_check)
THEN
153 IF(res.NE.0.OR.ierr.GT.0)
THEN
155 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_COMBINE: ",
156 w
"incorrect resulting grid"
163 w
"GRIDMAN_GRID_COMBINE finished"
166 1000
WRITE(
gridman_unit,*)
"GRIDMAN_GRID_COMBINE is terminated"
188 INTEGER,
INTENT(OUT) :: IERR
190 INTEGER(GRIDMAN_SP) :: ICELL,IEDGE,IND
198 IF(grid%NCELLS.LT.1)
THEN
204 IF(gridman_check)
THEN
206 IF(res.NE.0.OR.ierr.GT.0)
THEN
209 w
"ERROR in GRIDMAN_GRID_CELLS: ",
210 w
"incorrect grid object"
216 IF(ierr.NE.0)
GOTO 1000
218 ALLOCATE(edges%IFIRST(grid%NCELLS),
219 a edges%ILAST(grid%NCELLS),stat=st)
223 w
"ERROR in GRIDMAN_GRID_CELLS: ",
224 w
"can not allocate IFIRST, ILAST"
231 DO iedge=1,grid%NEDGES
233 icell=grid%CELLS(ic,iedge)
235 IF(icell.GT.grid%NCELLS)
THEN
238 w
"ERROR in GRIDMAN_GRID_CELLS: ",
239 w
"cell index is out of bounds"
241 w iedge,grid%CELLS(1:2,iedge),grid%NCELLS
244 edges%ILAST(icell)=edges%ILAST(icell)+1
255 edges%IFIRST(icell)=edges%IFIRST(icell-1)+edges%ILAST(icell-1)
258 ALLOCATE(edges%IND(edges%L),stat=st)
262 w
"ERROR in GRIDMAN_GRID_CELLS: ",
263 w
"can not allocate IND"
268 edges%ILAST=edges%IFIRST-1
269 DO iedge=1,grid%NEDGES
271 icell=grid%CELLS(ic,iedge)
273 edges%ILAST(icell)=edges%ILAST(icell)+1
274 ind=edges%ILAST(icell)
275 IF (ind.GT.edges%L)
THEN
278 w
"ERROR in GRIDMAN_GRID_CELLS: internal error"
279 WRITE(
gridman_unit,*)
" IEDGE, ICELL, IND ",iedge,icell,ind
297 1000
WRITE(
gridman_unit,*)
"GRIDMAN_GRID_CELLS terminated"
305 INTEGER(GRIDMAN_SP) :: ICELL1,ICELL2
308 IF(edges%IFIRST(icell+1).NE.edges%ILAST(icell)+1)
THEN
311 w
"ERROR in GRIDMAN_GRID_CELLS: internal error"
313 w icell, edges%IFIRST(icell+1),
314 w edges%ILAST(icell)+1
318 IF(edges%ILAST(edges%N).NE.edges%L)
THEN
321 w
"ERROR in GRIDMAN_GRID_CELLS: internal error"
322 WRITE(
gridman_unit,*)
" L, ILAST ",edges%L,edges%ILAST(edges%N)
327 DO ind=edges%IFIRST(icell),edges%ILAST(icell)
329 IF(iedge.LT.1.OR.iedge.GT.grid%NEDGES)
THEN
332 w
"ERROR in GRIDMAN_GRID_CELLS: internal error"
334 w icell, iedge, grid%NEDGES
337 icell1=grid%CELLS(1,iedge)
338 icell2=grid%CELLS(2,iedge)
339 IF(icell1.NE.icell.AND.icell2.NE.icell)
THEN
342 w
"ERROR in GRIDMAN_GRID_CELLS: internal error"
344 w icell, iedge, icell1, icell2
371 INTEGER,
INTENT(OUT) :: IERR
373 INTEGER(GRIDMAN_SP) :: NPOINTS,IEDGE,IPOINT,IND
381 IF(gridman_check)
THEN
383 IF(res.NE.0.OR.ierr.GT.0)
THEN
386 w
"incorrect grid object"
393 IF(npoints.LT.1)
THEN
395 WRITE(*,*)
"ERROR in GRIDMAN_GRID_POINTS: ",
396 w
"number of points is out of range"
397 WRITE(*,*)
" NPOINTS ",npoints
402 IF(ierr.NE.0)
GOTO 1000
404 ALLOCATE(edges%IFIRST(npoints),edges%ILAST(npoints),stat=st)
408 w
"ERROR in GRIDMAN_GRID_POINTS: ",
409 w
"can not allocate IFIRST, ILAST"
416 DO iedge=1,grid%NEDGES
418 ipoint=grid%POINTS(ip,iedge)
420 IF(ipoint.GT.npoints)
THEN
423 w
"point index is out of bounds"
425 w iedge, ip, ipoint, npoints
428 edges%ILAST(ipoint)=edges%ILAST(ipoint)+1
438 edges%IFIRST(ipoint)=edges%IFIRST(ipoint-1)+edges%ILAST(ipoint-1)
441 ALLOCATE(edges%IND(edges%L),stat=st)
445 w
"can not allocate IND"
450 edges%ILAST=edges%IFIRST-1
451 DO iedge=1,grid%NEDGES
453 ipoint=grid%POINTS(ip,iedge)
455 edges%ILAST(ipoint)=edges%ILAST(ipoint)+1
456 ind=edges%ILAST(ipoint)
457 IF (ind.GT.edges%L)
THEN
460 w
"ERROR in GRIDMAN_GRID_POINTS: internal error"
461 WRITE(
gridman_unit,*)
" IEDGE, IPOINT, IND ",iedge,ipoint,ind
479 1000
WRITE(
gridman_unit,*)
"GRIDMAN_GRID_POINTS terminated"
488 INTEGER(GRIDMAN_SP) :: IPOINT1
490 DO ipoint=1,edges%N-1
491 IF(edges%IFIRST(ipoint+1).NE.edges%ILAST(ipoint)+1)
THEN
494 w
"ERROR in GRIDMAN_GRID_POINTS: internal error"
496 w ipoint,edges%IFIRST(ipoint+1),
497 w edges%ILAST(ipoint)+1
501 IF(edges%ILAST(edges%N).NE.edges%L)
THEN
504 w
"ERROR in GRIDMAN_GRID_POINTS: internal error"
506 w edges%L,edges%ILAST(edges%N)
511 DO ind=edges%IFIRST(ipoint),edges%ILAST(ipoint)
513 IF(iedge.LT.1.OR.iedge.GT.grid%NEDGES)
THEN
516 w
"ERROR in GRIDMAN_GRID_POINTS: internal error"
518 w ipoint, iedge, grid%NEDGES
522 ipoint1=grid%POINTS(ip,iedge)
523 IF(ipoint1.EQ.ipoint)
GOTO 77
527 w
"ERROR in GRIDMAN_GRID_POINTS: internal error"
529 w ipoint, iedge, grid%POINTS(:,iedge)
545 u gridman_dbg,gridman_check
557 LOGICAL,
INTENT(IN) :: LTAKE(grid%ncells)
559 INTEGER,
INTENT(OUT) :: IERR
562 INTEGER(GRIDMAN_SP) :: NCELLS,NEDGES,NPOINTS,
563 i icell,iedge,ipoint,
564 i iedge0,icell0,ipoint0,
566 INTEGER(GRIDMAN_SP) :: INEWCELL(grid%ncells),
567 i inewedge(grid%NEDGES),
568 i inewpoint(grid%NPOINTS)
569 LOGICAL :: LTAKE_POINT(grid%npoints)
570 INTEGER :: IC,IP,II,RES
573 f
WRITE(
gridman_unit,*)
"Starting GRIDMAN_GRID_ELIMINATE_CELLS"
577 IF(grid%NCELLS.LT.1)
THEN
579 w
"WARNING from GRIDMAN_GRID_ELIMINATE_CELLS: ",
580 w
"grid has no cells"
585 IF(gridman_check)
THEN
587 IF(res.NE.0.OR.ierr.GT.0)
THEN
589 w
"ERROR in GRIDMAN_GRID_ELIMINATE_CELLS: ",
590 w
"incorrect input grid"
599 DO icell=1,grid%NCELLS
600 IF(ltake(icell))
THEN
602 inewcell(icell)=ncells
609 DO iedge=1,grid%NEDGES
610 IF(take_edge(iedge))
THEN
612 inewedge(iedge)=nedges
618 DO iedge=1,grid%NEDGES
619 IF(inewedge(iedge).EQ.0) cycle
621 ipoint=grid%POINTS(ip,iedge)
623 ltake_point(ipoint)=.true.
631 DO ipoint=1,grid%NPOINTS
632 IF(ltake_point(ipoint))
THEN
634 inewpoint(ipoint)=npoints
639 s nedges,npoints,ncells,ierr,
640 s grid%NEDGEINDEX,grid%NCELLINDEX)
643 DO iedge0=1,grid%NEDGES
644 iedge=inewedge(iedge0)
647 icell0=grid%CELLS(ic,iedge0)
649 icell=inewcell(icell0)
650 ELSEIF(icell0.LT.0)
THEN
651 icell=inewedge(-icell0)
655 grid_new%CELLS(ic,iedge)=icell
658 ipoint0=grid%POINTS(ip,iedge0)
659 IF(ipoint0.GT.0)
THEN
660 ipoint=inewpoint(ipoint0)
662 grid_new%POINTS(ip,iedge)=ipoint
673 DO ipoint0=1,grid%NPOINTS
674 ipoint=inewpoint(ipoint0)
675 IF(ipoint.GT.0) grid_new%X(:,ipoint)= grid%X(:,ipoint0)
679 grid_new%DESCRIPTION=trim(grid%DESCRIPTION)//
680 /
" >> after GRIDMAN_GRID_ELIMINATE_CELLS"
681 grid_new%UNIT2SI=grid%UNIT2SI
682 grid_new%UNITS=grid%UNITS
685 DO ii=1,grid%NEDGEINDEX
687 DO ie0=1,grid%EDGEINDEX(ii)%NELEMENTS
688 iedge0=grid%EDGEINDEX(ii)%INDEXES(0,ie0)
689 IF(iedge0.LT.0.OR.iedge0.GT.grid%NEDGES)
GOTO 300
690 iedge=inewedge(iedge0)
691 IF(iedge.GT.0) nelements=nelements+1
694 c grid%EDGEINDEX(ii)%NINDEX,
696 IF(ierr.NE.0)
GOTO 1000
698 DO ie0=1,grid%EDGEINDEX(ii)%NELEMENTS
699 iedge0=grid%EDGEINDEX(ii)%INDEXES(0,ie0)
700 iedge=inewedge(iedge0)
703 grid_new%EDGEINDEX(ii)%INDEXES(0,ie)=iedge
704 grid_new%EDGEINDEX(ii)%INDEXES(1:,ie)=
705 = grid%EDGEINDEX(ii)%INDEXES(1:,ie0)
708 grid_new%EDGEINDEX(ii)%DESCRIPTION=grid%EDGEINDEX(ii)%DESCRIPTION
709 grid_new%EDGEINDEX(ii)%COLUMNS=grid%EDGEINDEX(ii)%COLUMNS
713 DO ii=1,grid%NCELLINDEX
715 DO ie0=1,grid%CELLINDEX(ii)%NELEMENTS
716 icell0=grid%CELLINDEX(ii)%INDEXES(0,ie0)
717 IF(icell0.LT.0.OR.icell0.GT.grid%NCELLS)
GOTO 400
718 icell=inewcell(icell0)
719 IF(icell.GT.0) nelements=nelements+1
722 c grid%CELLINDEX(ii)%NINDEX,
724 IF(ierr.NE.0)
GOTO 1000
726 DO ie0=1,grid%CELLINDEX(ii)%NELEMENTS
727 icell0=grid%CELLINDEX(ii)%INDEXES(0,ie0)
728 icell=inewcell(icell0)
731 grid_new%CELLINDEX(ii)%INDEXES(0,ie)=icell
732 grid_new%CELLINDEX(ii)%INDEXES(1:,ie)=
733 = grid%CELLINDEX(ii)%INDEXES(1:,ie0)
736 grid_new%CELLINDEX(ii)%DESCRIPTION=grid%CELLINDEX(ii)%DESCRIPTION
737 grid_new%CELLINDEX(ii)%COLUMNS=grid%CELLINDEX(ii)%COLUMNS
741 IF(res.NE.0.OR.ierr.GT.0)
THEN
742 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_CELLS: ",
743 w
"incorrect resulting grid"
749 f
WRITE(
gridman_unit,*)
"GRIDMAN_GRID_ELIMINATE_CELLS completed"
753 100
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_CELLS: ",
754 w
"incorrect point index"
760 200
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_CELLS: ",
762 WRITE(
gridman_unit,*)
" IEDGE, IEDGE0, IP, IPOINT0, IPOINT ",
763 w iedge, iedge0, ip, ipoint0, ipoint
767 300
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_CELLS: ",
768 w
"edge index is out of range"
770 w ii, ie0, iedge0, grid%NEDGES
774 400
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_CELLS: ",
775 w
"cell index is out of range"
777 w ii, ie0, icell0, grid%NCELLS
781 1000
WRITE(
gridman_unit,*)
"GRIDMAN_GRID_ELIMINATE_CELLS terminated"
789 FUNCTION take_edge(IEDGE)
791 INTEGER(GRIDMAN_SP),
INTENT(IN) :: IEDGE
792 INTEGER(GRIDMAN_SP) :: ICELL1,ICELL2
794 icell1=grid%CELLS(1,iedge)
795 icell2=grid%CELLS(2,iedge)
799 IF(ltake(icell1)) take_edge=.true.
802 IF(ltake(icell2)) take_edge=.true.
804 IF(icell1.LT.1.AND.icell2.LT.1) take_edge=.true.
806 END FUNCTION take_edge
817 u gridman_dbg,gridman_check
830 LOGICAL,
INTENT(IN) :: LTAKE(grid%nedges)
832 INTEGER,
INTENT(OUT) :: IERR
835 INTEGER(GRIDMAN_SP) :: IEDGE,IPOINT,NEDGES,NPOINTS,
836 i iedge1,ipoint1,ie,ie1,nelements
837 INTEGER(GRIDMAN_SP) :: INEWEDGE(grid%nedges),
838 i inewpoint(grid%NPOINTS)
839 LOGICAL :: LTAKE_POINT(grid%npoints)
840 INTEGER :: IP,RES,II,IERR0
843 f
WRITE(
gridman_unit,*)
"Starting GRIDMAN_GRID_ELIMINATE_EDGES"
847 IF(gridman_check)
THEN
849 IF(res.NE.0.OR.ierr.GT.0)
THEN
850 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_EDGES: ",
851 w
"incorrect input grid object"
859 DO iedge=1,grid%NEDGES
860 IF(ltake(iedge))
THEN
862 inewedge(iedge)=nedges
867 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_EDGES: ",
868 w
"no edges left - the resulting grid would be empty"
874 DO iedge=1,grid%NEDGES
875 IF(inewedge(iedge).GT.0)
THEN
877 ipoint=grid%POINTS(ip,iedge)
878 ltake_point(ipoint)=.true.
885 DO ipoint=1,grid%NPOINTS
886 IF(ltake_point(ipoint))
THEN
888 inewpoint(ipoint)=npoints
893 c nedges,npoints,grid%NCELLS,ierr,
894 c grid%NEDGEINDEX,grid%NCELLINDEX)
896 c
WRITE(
gridman_unit,*)
"GRIDMAN_GRID_ELIMINATE_EDGES terminated"
898 DO iedge=1,grid%NEDGES
899 iedge1=inewedge(iedge)
901 grid_new%CELLS(:,iedge1)=grid%CELLS(:,iedge)
903 ipoint=grid%POINTS(ip,iedge)
904 ipoint1=inewpoint(ipoint)
905 IF(ipoint1.LT.1)
GOTO 400
906 grid_new%POINTS(ip,iedge1)=ipoint1
910 DO ipoint=1,grid%NPOINTS
911 ipoint1=inewpoint(ipoint)
912 IF(ipoint1.GT.0) grid_new%X(:,ipoint1)=grid%X(:,ipoint)
915 grid_new%DESCRIPTION=trim(grid%DESCRIPTION)//
916 /
" >> after GRIDMAN_GRID_ELIMINATE_EDGES"
918 grid_new%UNITS=grid%UNITS
919 grid_new%UNIT2SI=grid%UNIT2SI
921 DO ii=1,grid%NCELLINDEX
923 c grid%CELLINDEX(ii),ierr)
924 IF(ierr.NE.0)
GOTO 200
927 DO ii=1,grid%NEDGEINDEX
929 DO ie=1,grid%EDGEINDEX(ii)%NELEMENTS
930 iedge=grid%EDGEINDEX(ii)%INDEXES(0,ie)
931 IF(iedge.LT.1.OR.iedge.GT.grid%NEDGES)
GOTO 100
932 iedge1=inewedge(iedge)
933 IF(iedge1.GT.0) nelements=nelements+1
936 c grid%EDGEINDEX(ii)%NINDEX,
938 IF(ierr.NE.0)
GOTO 210
940 DO ie=1,grid%EDGEINDEX(ii)%NELEMENTS
941 iedge=grid%EDGEINDEX(ii)%INDEXES(0,ie)
942 iedge1=inewedge(iedge)
945 grid_new%EDGEINDEX(ii)%INDEXES(0,ie1)=iedge1
946 grid_new%EDGEINDEX(ii)%INDEXES(1:,ie1)=
947 = grid%EDGEINDEX(ii)%INDEXES(1:,ie)
950 grid_new%EDGEINDEX(ii)%DESCRIPTION=grid%EDGEINDEX(ii)%DESCRIPTION
951 grid_new%EDGEINDEX(ii)%COLUMNS=grid%EDGEINDEX(ii)%COLUMNS
955 IF(res.NE.0.OR.ierr.GT.0)
THEN
956 WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_EDGES: ",
957 w
"incorrect resulting grid"
964 f
WRITE(
gridman_unit,*)
"GRIDMAN_GRID_ELIMINATE_EDGES finished"
968 100
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_EDGES: ",
969 w
"incorerct input edge index"
973 210
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_EDGES: ",
974 w
"creation of celledge index failed, II ",ii
977 200
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_EDGES: ",
978 w
"creation of cell index failed, II ",ii
981 400
WRITE(
gridman_unit,*)
"ERROR in GRIDMAN_GRID_ELIMINATE_EDGES: ",
983 WRITE(
gridman_unit,*)
" Mismatch between INEWEDGE and INEWPOINT"
985 WRITE(
gridman_unit,*)
" IP, IPOINT, IPOINT1 ",ip,ipoint,ipoint1
1008 INTEGER,
INTENT(OUT) :: IERR
1010 LOGICAL :: LTAKE(grid%nedges)
1011 INTEGER(GRIDMAN_SP) :: IEDGE
1014 f
WRITE(
gridman_unit,*)
"Starting GRIDMAN_GRID_REMOVE_FREE_EDGES"
1016 DO iedge=1,grid%NEDGES
1017 IF(grid%CELLS(1,iedge).LT.1.AND.
1018 f grid%CELLS(2,iedge).LT.1)
THEN
1019 ltake(iedge)=.false.
1028 w
"GRIDMAN_GRID_REMOVE_FREE_EDGES terminated"
1031 f
WRITE(
gridman_unit,*)
"GRIDMAN_GRID_REMOVE_FREE_EDGES finished"
subroutine gridman_grid_points(EDGES, GRID, IERR)
Create table of edges connected to each point.
subroutine gridman_grid_check(GRID, RES, IERR)
Check consistency of the grid data.
integer, save, public gridman_unit
Index of the standard output unit.
subroutine gridman_grid_eliminate_edges(GRID_NEW, GRID, LTAKE, IERR)
Eliminate edges the GRIDMAN_GRID object.
subroutine gridman_grid_eliminate_cells(GRID_NEW, GRID, LTAKE, IERR)
Eliminate cells from GRIDMAN_GRID object.
Explicit interfaces to GRIDMAN subroutines and functions.
subroutine gridman_grid_allocate(GRID, TYPE, NEDGES, NPOINTS, NCELLS, IERR, NEDGEINDEX, NCELLINDEX)
Allocate GRIDMAN_GRID object.
subroutine gridman_index_copy(INDEX2, INDEX1, IERR)
Create a copy of the index object.
subroutine gridman_grid_cells(EDGES, GRID, IERR)
Create a list of edges which belong to each cell.
subroutine gridman_indlist_deallocate(INDLIST, IERR)
Deallocate list of indices.
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_index_allocate(INDEX, NINDEX, NELEMENTS, IERR)
Allocate index object.
logical, save, public gridman_dbg
Switch for debugging mode.
subroutine gridman_grid_combine(GRID, GRID1, GRID2, IERR)
Combine two grid objects into one.
Data-type which describes lists of elements with variable number of indices for each element...
Definition of data types, global constants and variables.
subroutine gridman_index_deallocate(INDEX, IERR)
Allocate index object.
subroutine gridman_grid_remove_free_edges(GRID_NEW, GRID, IERR)
Remove edges which do not belong to any cell from the GRIDMAN_GRID object.
integer, parameter, public gridman_sp
Kind parameter for integer numbers.