6 #ifndef DUNE_GRIDGLUE_ADAPTER_GRIDGLUEAMIRAWRITER_HH
7 #define DUNE_GRIDGLUE_ADAPTER_GRIDGLUEAMIRAWRITER_HH
11 #include <dune/common/typetraits.hh>
24 template <
class Glue,
int s
ide>
25 static void writeIntersections(
const Glue& glue,
const std::string& filename)
27 static_assert((side==0 || side==1),
"'side' can only be 0 or 1");
31 fgrid.open(filename.c_str());
33 typedef typename Dune::conditional<(side==0), typename Glue::Grid0View, typename Glue::Grid1View>::type GridView;
34 const int dim = GridView::dimension;
35 const int domdimw = GridView::dimensionworld;
38 std::string coordinatePadding;
39 for (
int i=domdimw; i<3; i++)
40 coordinatePadding +=
" 0";
42 int overlaps = glue.size();
46 fgrid <<
"# HyperSurface 0.1 ASCII \n" << std::endl;
48 fgrid<<
"Parameters {\n";
49 fgrid<<
" Materials {\n";
50 fgrid<<
" outside {\n";
65 fgrid<<
"\nVertices "<< overlaps*(dim)<<
"\n";
66 auto isEnd = glue.template iend<side>();
67 for (
auto isIt = glue.template ibegin<side>(); isIt != isEnd; ++isIt)
69 const auto& geometry = isIt->geometry();
70 for (
int i = 0; i < geometry.corners(); ++i)
71 fgrid << geometry.corner(i) << coordinatePadding << std::endl;
78 fgrid<<
"NBranchingPoints 0\n";
79 fgrid<<
"NVerticesOnCurves 0\n";
80 fgrid<<
"BoundaryCurves 0\n";
83 fgrid<<
"InnerRegion inside\n";
84 fgrid<<
"OuterRegion outside\n";
85 fgrid<<
"BoundaryID 0\n";
86 fgrid<<
"BranchingPoints 0";
89 fgrid<<
"Triangles "<<overlaps<<std::endl;
91 for (
int i=0;i<overlaps; i++)
92 fgrid<<i*dim+1<<
" "<<i*dim+2<<
" "<<i*dim+3<<std::endl;
97 fgrid <<
"# AmiraMesh 3D ASCII 2.0 \n";
99 fgrid<<
"define Lines "<<3*overlaps<<
"\n";
100 fgrid<<
"nVertices "<<2*overlaps<<
"\n";
102 fgrid<<
"Parameters {\n";
103 fgrid<<
" ContentType \"HxLineSet\" \n";
106 fgrid<<
"Lines { int LineIdx } @1\n";
107 fgrid<<
"Vertices { float[3] Coordinates } @2\n";
109 fgrid<<
"# Data section follows\n";
111 for (
int i=0; i<overlaps;i++)
112 fgrid<<2*i<<
"\n"<<2*i+1<<
"\n"<<-1<<
"\n";
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";
128 template<
typename Glue>
129 static void write(
const Glue& glue,
const std::string& path,
int appendix=1)
131 std::ostringstream name0;
133 name0 <<
"/domain.surf" << std::setw(3) << std::setfill(
'0') << appendix;
136 writeIntersections<Glue,0>(glue,name0.str());
138 std::ostringstream name1;
140 name1 <<
"/target.surf" << std::setw(3) << std::setfill(
'0') << appendix;
142 writeIntersections<Glue,1>(glue, name1.str());
150 #endif // DUNE_GRIDGLUE_ADAPTER_GRIDGLUEAMIRAWRITER_HH
Definition: gridglue.hh:33
Write remote intersections to a AmiraMesh file for debugging purposes.
Definition: gridglueamirawriter.hh:18
static void write(const Glue &glue, const std::string &path, int appendix=1)
Definition: gridglueamirawriter.hh:129