dune-grid-glue 2.8.0
Loading...
Searching...
No Matches
gridglueamirawriter.hh
Go to the documentation of this file.
1
6#ifndef DUNE_GRIDGLUE_ADAPTER_GRIDGLUEAMIRAWRITER_HH
7#define DUNE_GRIDGLUE_ADAPTER_GRIDGLUEAMIRAWRITER_HH
8
9#include <fstream>
10#include <sstream>
11#include <type_traits>
12
13namespace Dune {
14namespace GridGlue {
15
19{
20
24 template <class Glue, int side>
25 static void writeIntersections(const Glue& glue, const std::string& filename)
26 {
27 static_assert((side==0 || side==1), "'side' can only be 0 or 1");
28
29 std::ofstream fgrid;
30
31 fgrid.open(filename.c_str());
32
33 using GridView = typename Glue::template GridView<side>;
34 const int dim = GridView::dimension;
35 const int domdimw = GridView::dimensionworld;
36
37 // coordinates have to be in R^3 in the VTK format
38 std::string coordinatePadding;
39 for (int i=domdimw; i<3; i++)
40 coordinatePadding += " 0";
41
42 int overlaps = glue.size();
43
44 if (dim==3) {
45
46 fgrid << "# HyperSurface 0.1 ASCII \n" << std::endl;
47 fgrid<<"\n";
48 fgrid<<"Parameters {\n";
49 fgrid<<" Materials {\n";
50 fgrid<<" outside {\n";
51 fgrid<<" Id 0\n";
52 fgrid<<" }\n";
53 fgrid<<" inside {\n";
54 fgrid<<" Id 1\n";
55 fgrid<<" }\n";
56 fgrid<<" }\n";
57 fgrid<<"\n";
58 fgrid<<"}\n";
59
60 // ////////////////////////////////////////////
61 // Write vertices
62 // ////////////////////////////////////////////
63
64 //use dim and not dim+1
65 fgrid<<"\nVertices "<< overlaps*(dim)<<"\n";
66 auto isEnd = glue.template iend<side>();
67 for (auto isIt = glue.template ibegin<side>(); isIt != isEnd; ++isIt)
68 {
69 const auto& geometry = isIt->geometry();
70 for (int i = 0; i < geometry.corners(); ++i)
71 fgrid << geometry.corner(i) << coordinatePadding << std::endl;
72 }
73
74 // ////////////////////////////////////////////
75 // Write triangles
76 // ////////////////////////////////////////////
77
78 fgrid<<"NBranchingPoints 0\n";
79 fgrid<<"NVerticesOnCurves 0\n";
80 fgrid<<"BoundaryCurves 0\n";
81 fgrid<<"Patches 1\n";
82 fgrid<<"{\n";
83 fgrid<<"InnerRegion inside\n";
84 fgrid<<"OuterRegion outside\n";
85 fgrid<<"BoundaryID 0\n";
86 fgrid<<"BranchingPoints 0";
87 fgrid<<"\n";
88
89 fgrid<<"Triangles "<<overlaps<<std::endl;
90
91 for (int i=0;i<overlaps; i++)
92 fgrid<<i*dim+1<<" "<<i*dim+2<<" "<<i*dim+3<<std::endl;
93 fgrid<<"}\n";
94
95 } else if (dim==2) {
96
97 fgrid << "# AmiraMesh 3D ASCII 2.0 \n";
98 fgrid<<"\n";
99 fgrid<<"define Lines "<<3*overlaps<<"\n";
100 fgrid<<"nVertices "<<2*overlaps<<"\n";
101 fgrid<<"\n";
102 fgrid<<"Parameters {\n";
103 fgrid<<" ContentType \"HxLineSet\" \n";
104 fgrid<<"}\n";
105 fgrid<<"\n";
106 fgrid<<"Lines { int LineIdx } @1\n";
107 fgrid<<"Vertices { float[3] Coordinates } @2\n";
108 fgrid<<"\n";
109 fgrid<<"# Data section follows\n";
110 fgrid<<"@1 \n";
111 for (int i=0; i<overlaps;i++)
112 fgrid<<2*i<<"\n"<<2*i+1<<"\n"<<-1<<"\n";
113 fgrid<<"\n";
114 fgrid<<"@2 \n";
115
116 auto isEnd = glue.template iend<side>();
117 for (auto isIt = glue.template ibegin<side>(); isIt != isEnd; ++isIt) {
118 const auto& geometry = isIt->geometry();
119 for (int i = 0; i <2; ++i)
120 fgrid << geometry.corner(i) <<" "<<0<<"\n";
121 }
122 }
123
124 fgrid.close();
125 }
126
127public:
128 template<typename Glue>
129 static void write(const Glue& glue, const std::string& path, int appendix=1)
130 {
131 std::ostringstream name0;
132 name0 << path;
133 name0 << "/domain.surf" << std::setw(3) << std::setfill('0') << appendix;
134
135 // Write extracted grid and remote intersection on the grid1-side
136 writeIntersections<Glue,0>(glue,name0.str());
137
138 std::ostringstream name1;
139 name1 << path;
140 name1 << "/target.surf" << std::setw(3) << std::setfill('0') << appendix;
141
142 writeIntersections<Glue,1>(glue, name1.str());
143 }
144
145};
146
147} // namespace GridGlue
148} // namespace Dune
149
150#endif // DUNE_GRIDGLUE_ADAPTER_GRIDGLUEAMIRAWRITER_HH
Definition: gridglue.hh:35
Write remote intersections to a AmiraMesh file for debugging purposes.
Definition: gridglueamirawriter.hh:19
static void write(const Glue &glue, const std::string &path, int appendix=1)
Definition: gridglueamirawriter.hh:129