]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add class ImmersedSurfaceQuadrature 4305/head
authorSimon Sticko <simon.sticko@it.uu.se>
Mon, 24 Apr 2017 17:49:04 +0000 (19:49 +0200)
committerSimon Sticko <simon.sticko@it.uu.se>
Thu, 20 Jul 2017 07:33:50 +0000 (09:33 +0200)
Add a class representing an quadrature rule over a surface cutting arbitrary
through the unit cell. In order to map a quadrature rule over a surface from
the unit cell to physical space it is not sufficient to know only points and
scalar weights, since information about the normal is also required. In
addition to points and weights this class also stores the normal vectors.

doc/doxygen/images/immersed_surface_quadrature.svg [new file with mode: 0644]
include/deal.II/non_matching/immersed_surface_quadrature.h [new file with mode: 0644]
source/CMakeLists.txt
source/non_matching/CMakeLists.txt [new file with mode: 0644]
source/non_matching/immersed_surface_quadrature.cc [new file with mode: 0644]
tests/non_matching/CMakeLists.txt [new file with mode: 0644]
tests/non_matching/immersed_surface_quadrature.cc [new file with mode: 0644]
tests/non_matching/immersed_surface_quadrature.output [new file with mode: 0644]

diff --git a/doc/doxygen/images/immersed_surface_quadrature.svg b/doc/doxygen/images/immersed_surface_quadrature.svg
new file mode 100644 (file)
index 0000000..cbe33ab
--- /dev/null
@@ -0,0 +1,440 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="immersed_surface_quadrature.svg"
+   inkscape:version="0.91 r"
+   version="1.1"
+   id="svg2"
+   viewBox="0 0 755.86073 166.13071"
+   height="46.885777mm"
+   width="213.32071mm">
+  <sodipodi:namedview
+     fit-margin-bottom="0"
+     fit-margin-right="0"
+     fit-margin-left="0"
+     fit-margin-top="0"
+     inkscape:window-maximized="1"
+     inkscape:window-y="0"
+     inkscape:window-x="0"
+     inkscape:window-height="1028"
+     inkscape:window-width="1920"
+     showgrid="false"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="31.497175"
+     inkscape:cx="454.48977"
+     inkscape:zoom="1.4"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base" />
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker9034"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(-0.6,-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path9036"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6635"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(-0.6,-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path6637"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6597"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Send">
+      <path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path6599"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4230"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Send"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Send"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4218"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4206"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend-6"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4230-7"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4230-9"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(284.51009,-199.95445)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <g
+       transform="translate(-4.9264283,0)"
+       id="g6582">
+      <g
+         transform="translate(-10.606602,2.931307)"
+         id="g4753">
+        <rect
+           y="197.77315"
+           x="100.0051"
+           height="140.41121"
+           width="140.41121"
+           id="rect4136"
+           style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path4138"
+           d="m 100.0051,235.76427 c 77.73967,0.70676 128.54516,34.97648 140.15867,88.89343"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:5.10000014, 5.10000014;stroke-dashoffset:0;stroke-opacity:1" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.90847409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+           d="m 200.6025,264.1642 14.42241,-19.4157"
+           id="path4197"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         id="g6557"
+         transform="matrix(0.56688087,0,0,0.56688087,-62.404957,186.40544)">
+        <polygon
+           transform="matrix(1.0629921,0,0,-1.0629921,-207.7419,592.79698)"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           points="483,446.6 476.38,453.38 469.7,446.6 470.59,445.71 476.38,450.79 482.11,445.71 "
+           id="polygon6486" />
+        <path
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           inkscape:connector-curvature="0"
+           d="m 310.63683,124.2088 0,-0.0213 0,-0.0213 0,-0.0106 -0.0106,-0.0213 0,-0.0213 0,-0.0213 -0.0106,-0.0213 0,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0213,-0.0213 -0.0213,-0.0213 -0.0106,-0.0213 -0.0213,-0.0213 -0.0213,-0.0213 -0.0213,-0.0106 -0.0319,-0.0213 -0.0213,-0.0106 -0.0319,-0.0213 -0.0213,-0.0106 -0.0319,-0.0106 -0.0213,-0.0106 -0.0106,0 -0.0213,-0.0106 -0.0213,0 -0.0106,0 -0.0213,-0.0106 -0.0213,0 -0.0213,0 -0.0213,0 -0.0213,0 -0.0213,0 -0.0213,0 c -0.26575,0 -0.32953,0.0425 -0.95669,0.79724 l -2.54055,3.0189 c -1.38189,-2.4874 -4.13504,-3.81614 -7.57914,-3.81614 -6.72874,0 -13.0748,6.09094 -13.0748,12.50078 0,4.28386 2.81693,6.72874 5.5063,7.50473 l 5.65512,1.49882 c 1.96653,0.46771 4.88976,1.26496 4.88976,5.61259 0,4.77284 -4.35827,9.73701 -9.53504,9.73701 -3.39094,0 -9.26929,-1.16929 -9.26929,-7.72795 0,-1.27559 0.26575,-2.54055 0.3189,-2.85945 0.0425,-0.2126 0.0957,-0.26575 0.0957,-0.37205 0,-0.53149 -0.36142,-0.58464 -0.62717,-0.58464 -0.26574,0 -0.37204,0.0531 -0.53149,0.2126 -0.22323,0.2126 -3.17835,12.28819 -3.17835,12.437 0,0.3189 0.26575,0.5315 0.58465,0.5315 0.26574,0 0.31889,-0.0425 0.94606,-0.79724 l 2.60433,-2.99764 c 2.2748,3.07205 5.86772,3.79488 8.93976,3.79488 7.20709,0 13.45748,-7.03701 13.45748,-13.59567 0,-3.65669 -1.79645,-5.46378 -2.5937,-6.19724 -1.21181,-1.23307 -2.00905,-1.42441 -6.72874,-2.65748 -1.15866,-0.3189 -3.07204,-0.8504 -3.55039,-0.94607 -1.43504,-0.47834 -3.22087,-2.00905 -3.22087,-4.81535 0,-4.30512 4.23071,-8.80157 9.25866,-8.80157 4.41142,0 7.63229,2.2748 7.63229,8.21692 0,1.69016 -0.22323,2.64685 -0.22323,2.95512 0,0.0531 0,0.5315 0.64842,0.5315 0.5315,0 0.58465,-0.15945 0.78662,-1.06299 z"
+           id="path6488" />
+      </g>
+      <g
+         id="g6561"
+         transform="matrix(0.56688087,0,0,0.56688087,-7.8567196,156.10087)">
+        <path
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           inkscape:connector-curvature="0"
+           d="m 339.38013,124.83597 0,0 0,-0.0106 0,0 0,-0.0106 0,-0.0213 0,-0.0106 -0.0106,-0.0213 0,-0.0213 0,-0.0213 -0.0106,-0.0213 0,-0.0213 -0.0106,-0.0213 0,-0.0213 -0.0106,-0.0319 -0.0106,-0.0213 -0.0213,-0.0319 -0.0106,-0.0213 -0.0213,-0.0319 -0.0106,-0.0213 -0.0213,-0.0213 -0.0319,-0.0319 -0.0106,-0.0106 -0.0106,-0.0106 -0.0213,-0.0106 -0.0106,-0.0106 -0.0106,-0.0106 -0.0213,-0.0106 -0.0106,-0.0106 -0.0213,-0.0106 -0.0213,-0.0106 -0.0213,-0.0106 -0.0106,0 -0.0213,-0.0106 -0.0213,-0.0106 -0.0319,0 -0.0213,-0.0106 -0.0213,-0.0106 -0.0213,0 -0.0319,0 -0.0213,-0.0106 -0.0319,0 -0.0319,0 -0.0213,-0.0106 -0.0319,0 -0.0319,0 c -0.79725,0 -5.83583,0.48898 -6.72874,0.58465 -0.43583,0.0532 -0.7441,0.3189 -0.7441,1.00984 0,0.6378 0.47835,0.6378 1.27559,0.6378 2.54056,0 2.63623,0.36141 2.63623,0.89291 l -0.14882,1.06299 -3.18898,12.55394 c -0.94606,-1.95591 -2.4874,-3.38032 -4.85787,-3.38032 l 0.0425,1.15866 c 3.44409,0 4.18818,4.33701 4.18818,4.64528 0,0.34016 -0.0957,0.64842 -0.14881,0.91417 l -2.65748,10.38544 c -0.26575,0.94606 -0.26575,1.04173 -1.063,1.9559 -2.32795,2.9126 -4.49645,3.75236 -5.98464,3.75236 -2.63622,0 -3.38032,-2.90197 -3.38032,-4.9748 0,-2.64685 1.69016,-9.15236 2.90197,-11.59724 1.64764,-3.1252 4.03937,-5.08111 6.1441,-5.08111 l -0.0425,-1.15866 c -6.19725,0 -12.75591,7.77048 -12.75591,15.50906 0,4.98543 2.90197,8.47204 7.03701,8.47204 1.05236,0 3.70984,-0.22322 6.87756,-3.97559 0.43582,2.23229 2.2748,3.97559 4.81535,3.97559 1.86024,0 3.07205,-1.21181 3.92244,-2.91259 0.89292,-1.90276 1.59449,-5.14489 1.59449,-5.24055 0,-0.5315 -0.48898,-0.5315 -0.62716,-0.5315 -0.5315,0 -0.58465,0.2126 -0.75473,0.95669 -0.89291,3.4441 -1.86024,6.55866 -4.01811,6.55866 -1.42441,0 -1.59449,-1.37126 -1.59449,-2.43425 0,-1.26496 0.0957,-1.64764 0.3189,-2.54055 z"
+           id="path6490" />
+        <polygon
+           transform="matrix(1.0629921,0,0,-1.0629921,-207.7419,592.79698)"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           points="542.4,446.6 535.77,453.38 529.1,446.6 529.99,445.71 535.77,450.79 541.51,445.71 "
+           id="polygon6492" />
+        <path
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           inkscape:connector-curvature="0"
+           d="m 373.77856,124.2088 0,-0.0213 0,-0.0213 0,-0.0106 0,-0.0213 -0.0106,-0.0213 0,-0.0213 -0.0106,-0.0213 0,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 0,-0.0213 -0.0106,-0.0213 -0.0213,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0213,-0.0213 -0.0106,-0.0213 -0.0213,-0.0213 -0.0213,-0.0213 -0.0213,-0.0213 -0.0213,-0.0106 -0.0213,-0.0213 -0.0319,-0.0106 -0.0213,-0.0213 -0.0319,-0.0106 -0.0319,-0.0106 -0.0213,-0.0106 -0.0106,0 -0.0213,-0.0106 -0.0213,0 -0.0106,0 -0.0213,-0.0106 -0.0213,0 -0.0213,0 -0.0106,0 -0.0213,0 -0.0213,0 -0.0213,0 c -0.26575,0 -0.34015,0.0425 -0.96732,0.79724 l -2.54055,3.0189 c -1.38189,-2.4874 -4.13504,-3.81614 -7.57914,-3.81614 -6.71811,0 -13.06417,6.09094 -13.06417,12.50078 0,4.28386 2.8063,6.72874 5.49567,7.50473 l 5.66575,1.49882 c 1.9559,0.46771 4.87913,1.26496 4.87913,5.61259 0,4.77284 -4.34763,9.73701 -9.53504,9.73701 -3.39094,0 -9.26929,-1.16929 -9.26929,-7.72795 0,-1.27559 0.26575,-2.54055 0.3189,-2.85945 0.0532,-0.2126 0.0957,-0.26575 0.0957,-0.37205 0,-0.53149 -0.36142,-0.58464 -0.62717,-0.58464 -0.26574,0 -0.36141,0.0531 -0.53149,0.2126 -0.2126,0.2126 -3.16772,12.28819 -3.16772,12.437 0,0.3189 0.26575,0.5315 0.57402,0.5315 0.26575,0 0.31889,-0.0425 0.94606,-0.79724 l 2.61496,-2.99764 c 2.2748,3.07205 5.85709,3.79488 8.92913,3.79488 7.20709,0 13.45748,-7.03701 13.45748,-13.59567 0,-3.65669 -1.79645,-5.46378 -2.5937,-6.19724 -1.21181,-1.23307 -2.00905,-1.42441 -6.72874,-2.65748 -1.15866,-0.3189 -3.07204,-0.8504 -3.55039,-0.94607 -1.42441,-0.47834 -3.22087,-2.00905 -3.22087,-4.81535 0,-4.30512 4.23071,-8.80157 9.2693,-8.80157 4.40078,0 7.62165,2.2748 7.62165,8.21692 0,1.69016 -0.2126,2.64685 -0.2126,2.95512 0,0.0531 0,0.5315 0.6378,0.5315 0.53149,0 0.58464,-0.15945 0.78661,-1.06299 z"
+           id="path6494" />
+      </g>
+    </g>
+    <rect
+       y="200.70445"
+       x="329.31018"
+       height="140.41121"
+       width="140.41121"
+       id="rect4136-7"
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path4138-0"
+       d="m 329.31019,238.69558 c 77.73967,0.70676 128.54516,34.97648 140.15867,88.89343"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.8499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0.89999998;stroke-dasharray:3.85, 30.8;stroke-dashoffset:0;stroke-opacity:1" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.90847409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)"
+       d="M 429.90759,267.09551 444.33,247.67981"
+       id="path4197-9"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g7947"
+       transform="matrix(2.2852213,0,0,2.2852213,-203.48825,-912.67199)">
+      <path
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         inkscape:connector-curvature="0"
+         d="m 279.19522,498.82623 -0.008,-0.0122 -0.006,-0.0122 -0.006,-0.0101 -0.004,-0.0101 -0.006,-0.0101 -0.006,-0.0101 -0.006,-0.0101 -0.004,-0.008 -0.006,-0.008 -0.006,-0.008 -0.004,-0.008 -0.006,-0.006 -0.006,-0.008 -0.006,-0.006 -0.006,-0.006 -0.006,-0.006 -0.006,-0.004 -0.008,-0.006 -0.008,-0.004 -0.006,-0.004 -0.0101,-0.004 -0.008,-0.002 -0.0101,-0.004 -0.008,-0.002 -0.0122,-0.002 -0.0101,-0.002 -0.0122,-0.002 -0.0122,-0.002 -0.0142,0 -0.0142,-0.002 -0.0142,0 -0.008,0 -0.008,0 c -0.17232,0 -0.19056,0.0507 -0.25949,0.18043 l -0.0649,0.82916 2.71862,5.45548 -5.44534,0 2.72672,-5.45548 0.0649,-0.82916 -3.41601,6.84823 c -0.0507,0.0912 -0.0507,0.1115 -0.0507,0.11961 0,0.0831 0.0608,0.0831 0.223,0.0831 l 7.01042,0 c 0.16015,0 0.22097,0 0.22097,-0.0831 0,-0.008 0,-0.0284 -0.0507,-0.11961 z"
+         id="path7861" />
+      <polygon
+         transform="matrix(0.20273031,0,0,-0.20273031,182.38339,588.22624)"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         points="517.9,453.38 511.22,446.6 512.11,445.71 517.9,450.79 523.63,445.71 524.52,446.6 "
+         id="polygon7863" />
+      <path
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         inkscape:connector-curvature="0"
+         d="m 289.66422,498.85866 0,-0.004 0,-0.004 0,-0.002 -0.002,-0.004 0,-0.004 0,-0.004 -0.002,-0.004 0,-0.004 -0.002,-0.004 -0.002,-0.004 -0.002,-0.004 -0.002,-0.004 -0.002,-0.004 -0.002,-0.004 -0.002,-0.004 -0.004,-0.004 -0.004,-0.004 -0.002,-0.004 -0.004,-0.004 -0.004,-0.004 -0.004,-0.002 -0.006,-0.004 -0.004,-0.002 -0.006,-0.004 -0.004,-0.002 -0.006,-0.002 -0.004,-0.002 -0.004,0 -0.002,-0.002 -0.004,0 -0.004,0 -0.002,-0.002 -0.004,0 -0.004,0 -0.004,0 -0.004,0 -0.004,0 -0.004,0 c -0.0507,0 -0.0628,0.008 -0.18245,0.15205 l -0.48453,0.57575 c -0.26355,-0.47439 -0.78862,-0.7278 -1.44547,-0.7278 -1.28328,0 -2.49358,1.16164 -2.49358,2.38411 0,0.817 0.53521,1.28328 1.05014,1.43127 l 1.07853,0.28585 c 0.37505,0.0892 0.93256,0.24125 0.93256,1.07042 0,0.91026 -0.8312,1.85701 -1.81849,1.85701 -0.64671,0 -1.76781,-0.223 -1.76781,-1.47385 0,-0.24328 0.0507,-0.48453 0.0608,-0.54534 0.008,-0.0405 0.0182,-0.0507 0.0182,-0.071 0,-0.10137 -0.0689,-0.1115 -0.11961,-0.1115 -0.0507,0 -0.0709,0.0101 -0.10136,0.0405 -0.0426,0.0405 -0.60617,2.34357 -0.60617,2.37195 0,0.0608 0.0507,0.10136 0.11151,0.10136 0.0507,0 0.0608,-0.008 0.18043,-0.15204 l 0.49669,-0.5717 c 0.43384,0.58589 1.11907,0.72374 1.70496,0.72374 1.37451,0 2.56656,-1.34207 2.56656,-2.59292 0,-0.69739 -0.34261,-1.04203 -0.49466,-1.18191 -0.23111,-0.23517 -0.38316,-0.27166 -1.28328,-0.50683 -0.22098,-0.0608 -0.58589,-0.16218 -0.67712,-0.18043 -0.27369,-0.0912 -0.61427,-0.38316 -0.61427,-0.91837 0,-0.82106 0.80686,-1.67861 1.76578,-1.67861 0.8393,0 1.4556,0.43385 1.4556,1.56711 0,0.32234 -0.0426,0.5048 -0.0426,0.56359 0,0.0101 0,0.10137 0.12366,0.10137 0.10137,0 0.1115,-0.0304 0.15002,-0.20273 z"
+         id="path7865" />
+      <path
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         inkscape:connector-curvature="0"
+         d="m 292.94845,504.47429 0,-0.006 0.002,-0.006 0,-0.006 0.002,-0.006 0.002,-0.006 0,-0.006 0.002,-0.006 0.002,-0.008 0,-0.006 0.002,-0.008 0,-0.006 0.002,-0.006 0,-0.008 0,-0.006 0,-0.006 0,-0.008 c 0,-0.0446 -0.0284,-0.0973 -0.0912,-0.0973 -0.073,0 -0.36694,0.2372 -0.51088,0.46628 -0.0689,-0.14393 -0.3041,-0.46628 -0.75619,-0.46628 l 0,0.19665 c 0.49467,0 0.6305,0.54535 0.6305,0.61428 0,0.0345 -0.0162,0.0791 -0.0223,0.10339 l -0.33248,1.30964 c -0.0345,0.11961 -0.0345,0.13177 -0.12772,0.24733 -0.27572,0.32639 -0.60819,0.51493 -0.88391,0.51493 -0.25949,0 -0.5129,-0.18246 -0.5129,-0.6832 0,-0.37708 0.20273,-1.15354 0.36896,-1.43533 0.32235,-0.56765 0.68321,-0.67104 0.87985,-0.67104 l 0,-0.19665 c -0.90215,0 -1.82051,0.99541 -1.82051,2.01109 0,0.68523 0.45817,1.17178 1.06636,1.17178 0.40343,0 0.73591,-0.25341 0.88998,-0.38519 -0.006,0.0183 -0.22705,0.90823 -0.25544,1.02784 -0.0993,0.39127 -0.10542,0.39736 -0.54331,0.40344 -0.0851,0 -0.18246,0 -0.18246,0.15407 0,0.0446 0.0345,0.10137 0.10339,0.10137 0.23517,0 0.49466,-0.0284 0.73591,-0.0284 0.24125,0 0.53927,0.0284 0.75619,0.0284 0.0649,0 0.13988,-0.0223 0.13988,-0.15408 0,-0.10136 -0.0973,-0.10136 -0.18448,-0.10136 -0.15408,0 -0.34465,0 -0.34465,-0.0831 0,-0.0223 0,-0.0385 0.0345,-0.15408 z"
+         id="path7867" />
+    </g>
+    <g
+       transform="matrix(4.2858961,0,0,4.2858961,16.741376,-908.76476)"
+       id="g8041">
+      <g
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         id="content"
+         transform="matrix(0.20273031,0,0,-0.20273031,-35.477804,360.79218)"
+         xml:space="preserve"
+         stroke-miterlimit="10.433"
+         font-style="normal"
+         font-variant="normal"
+         font-weight="normal"
+         font-stretch="normal"
+         font-size-adjust="none"
+         letter-spacing="normal"
+         word-spacing="normal"><path
+           style="fill:#000000;stroke-width:0"
+           inkscape:connector-curvature="0"
+           d="m 491.49,428.71 0,0.1 -0.01,0.09 0,0.09 -0.01,0.09 -0.01,0.08 -0.01,0.08 -0.01,0.08 -0.01,0.07 -0.02,0.07 -0.01,0.07 -0.02,0.06 -0.02,0.06 -0.02,0.06 -0.02,0.05 -0.02,0.05 -0.03,0.05 -0.02,0.04 -0.03,0.04 -0.02,0.04 -0.03,0.04 -0.03,0.03 -0.03,0.03 -0.03,0.02 -0.03,0.03 -0.03,0.02 -0.03,0.02 -0.03,0.01 -0.03,0.01 -0.03,0.01 -0.03,0.01 -0.04,0 -0.03,0 c -0.2,0 -0.66,-0.2 -0.7,-1.34 -0.21,-3.44 -3.69,-5.48 -6.92,-5.48 -2.89,0 -5.39,1.54 -7.99,3.29 -2.69,1.78 -5.37,3.58 -8.61,3.58 -4.64,0 -8.33,-3.53 -8.33,-8.12 0,-1.1 0.41,-1.49 0.71,-1.49 0.5,0 0.7,0.94 0.7,1.14 0.25,4.19 4.33,5.69 6.92,5.69 2.89,0 5.38,-1.55 7.97,-3.3 2.69,-1.79 5.38,-3.59 8.63,-3.59 4.62,0 8.31,3.55 8.31,8.12 z"
+           id="path8044" /><path
+           style="fill:#000000;stroke-width:0"
+           inkscape:connector-curvature="0"
+           d="m 491.49,417.06 0,0.07 0,0.06 -0.01,0.06 0,0.07 0,0.06 -0.01,0.05 0,0.06 -0.01,0.05 0,0.05 -0.01,0.06 -0.01,0.04 -0.01,0.05 -0.01,0.05 -0.01,0.04 -0.01,0.04 -0.01,0.04 -0.01,0.04 -0.01,0.04 -0.01,0.04 -0.01,0.03 -0.01,0.03 -0.02,0.04 -0.01,0.03 -0.01,0.03 -0.02,0.02 -0.01,0.03 -0.03,0.05 -0.03,0.05 -0.03,0.04 -0.03,0.03 -0.03,0.04 -0.03,0.02 -0.03,0.03 -0.03,0.02 -0.03,0.02 -0.03,0.01 -0.02,0.02 -0.03,0.01 -0.02,0.01 -0.02,0 -0.02,0.01 -0.02,0 -0.02,0 -0.01,0 -0.01,0.01 c -0.2,0 -0.66,-0.25 -0.7,-1.35 -0.21,-3.44 -3.69,-5.48 -6.92,-5.48 -2.89,0 -5.39,1.54 -7.99,3.29 -2.69,1.79 -5.37,3.58 -8.61,3.58 -4.64,0 -8.33,-3.53 -8.33,-8.12 0,-1.1 0.41,-1.49 0.71,-1.49 0.5,0 0.7,0.94 0.7,1.14 0.25,4.19 4.33,5.69 6.92,5.69 2.89,0 5.38,-1.55 7.97,-3.3 2.69,-1.79 5.38,-3.57 8.63,-3.57 4.73,0 8.31,3.68 8.31,8.06 z"
+           id="path8046" /></g>    </g>
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path9024"
+       d="m 12.795863,348.14618 c 21.85942,23.94285 46.77953,22.55067 60,0"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9034)" />
+    <g
+       transform="matrix(1.1982549,0,0,1.1982549,231.09984,188.2577)"
+       id="g3456">
+      <g
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         id="g3458"
+         transform="matrix(0.51701603,0,0,-0.51701603,-90.477806,290.72149)"
+         xml:space="preserve"
+         stroke-miterlimit="10.433"
+         font-style="normal"
+         font-variant="normal"
+         font-weight="normal"
+         font-stretch="normal"
+         font-size-adjust="none"
+         letter-spacing="normal"
+         word-spacing="normal"><polygon
+           style="fill:#000000;stroke-width:0"
+           points="476.95,433.11 477.84,434 471.21,440.78 464.54,434 465.43,433.11 471.21,438.18 "
+           id="polygon3460" /><path
+           style="fill:#000000;stroke-width:0"
+           inkscape:connector-curvature="0"
+           d="m 472.16,421.25 0.03,0.13 0.03,0.15 0.04,0.16 0.05,0.18 0.05,0.19 0.06,0.21 0.07,0.22 0.07,0.22 0.08,0.23 0.09,0.24 0.09,0.25 0.11,0.24 0.11,0.25 0.12,0.25 0.13,0.25 0.13,0.25 0.15,0.24 0.16,0.24 0.16,0.23 0.18,0.22 0.19,0.22 0.2,0.2 0.21,0.19 0.22,0.18 0.23,0.16 0.24,0.14 0.13,0.07 0.13,0.06 0.13,0.05 0.14,0.05 0.14,0.05 0.14,0.04 0.15,0.03 0.15,0.03 0.15,0.02 0.15,0.02 0.16,0.01 0.16,0 c 0.25,0 1.44,0 2.49,-0.64 -1.39,-0.25 -2.39,-1.5 -2.39,-2.69 0,-0.79 0.54,-1.75 1.89,-1.75 1.09,0 2.69,0.89 2.69,2.89 0,2.6 -2.94,3.28 -4.63,3.28 -2.89,0 -4.64,-2.64 -5.23,-3.78 -1.25,3.28 -3.94,3.78 -5.38,3.78 -5.19,0 -8.03,-6.42 -8.03,-7.67 0,-0.5 0.5,-0.5 0.61,-0.5 0.39,0 0.55,0.11 0.64,0.55 1.69,5.28 4.98,6.53 6.67,6.53 0.96,0 2.69,-0.44 2.69,-3.33 0,-1.54 -0.84,-4.89 -2.69,-11.86 -0.8,-3.09 -2.53,-5.18 -4.73,-5.18 -0.3,0 -1.44,0 -2.49,0.65 1.25,0.24 2.35,1.28 2.35,2.69 0,1.34 -1.1,1.73 -1.85,1.73 -1.5,0 -2.75,-1.29 -2.75,-2.89 0,-2.28 2.5,-3.28 4.69,-3.28 3.3,0 5.08,3.49 5.24,3.78 0.59,-1.84 2.39,-3.78 5.37,-3.78 5.14,0 7.98,6.42 7.98,7.67 0,0.5 -0.45,0.5 -0.61,0.5 -0.43,0 -0.54,-0.2 -0.64,-0.54 -1.64,-5.33 -5.03,-6.53 -6.62,-6.53 -1.95,0 -2.75,1.59 -2.75,3.29 0,1.1 0.3,2.19 0.86,4.38 z"
+           id="path3462" /><path
+           style="fill:#000000;stroke-width:0"
+           inkscape:connector-curvature="0"
+           d="m 501.7,413.12 0,0.03 0.01,0.03 0,0.03 0.01,0.03 0.01,0.03 0,0.03 0.01,0.03 0.01,0.04 0,0.03 0.01,0.04 0,0.03 0.01,0.03 0,0.04 0,0.03 0,0.03 0,0.04 c 0,0.22 -0.14,0.48 -0.45,0.48 -0.36,0 -1.81,-1.17 -2.52,-2.3 -0.34,0.71 -1.5,2.3 -3.73,2.3 l 0,-0.97 c 2.44,0 3.11,-2.69 3.11,-3.03 0,-0.17 -0.08,-0.39 -0.11,-0.51 l -1.64,-6.46 c -0.17,-0.59 -0.17,-0.65 -0.63,-1.22 -1.35,-1.61 -3,-2.54 -4.35,-2.54 -1.29,0 -2.54,0.9 -2.54,3.37 0,1.86 1,5.69 1.82,7.08 1.59,2.8 3.37,3.31 4.34,3.31 l 0,0.97 c -4.45,0 -8.98,-4.91 -8.98,-9.92 0,-3.38 2.26,-5.78 5.26,-5.78 1.99,0 3.63,1.25 4.39,1.9 -0.03,-0.09 -1.12,-4.48 -1.26,-5.07 -0.49,-1.93 -0.52,-1.96 -2.68,-1.99 -0.42,0 -0.9,0 -0.9,-0.76 0,-0.22 0.17,-0.5 0.51,-0.5 1.16,0 2.44,0.14 3.63,0.14 1.19,0 2.66,-0.14 3.73,-0.14 0.32,0 0.69,0.11 0.69,0.76 0,0.5 -0.48,0.5 -0.91,0.5 -0.76,0 -1.7,0 -1.7,0.41 0,0.11 0,0.19 0.17,0.76 z"
+           id="path3464" /></g>    </g>
+    <g
+       id="g3606"
+       transform="translate(-118.14285,268.57143)">
+      <g
+         word-spacing="normal"
+         letter-spacing="normal"
+         font-size-adjust="none"
+         font-stretch="normal"
+         font-weight="normal"
+         font-variant="normal"
+         font-style="normal"
+         stroke-miterlimit="10.433"
+         xml:space="preserve"
+         transform="matrix(0.51701603,0,0,-0.51701603,-90.477806,290.72149)"
+         id="g3608"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><path
+           id="path3610"
+           d="m 470.61,422.39 4.83,0 c 3.75,0 4.14,-0.8 4.14,-2.24 0,-0.36 0,-0.95 -0.34,-2.44 -0.11,-0.25 -0.16,-0.45 -0.16,-0.56 0,-0.39 0.3,-0.59 0.6,-0.59 0.5,0 0.5,0.15 0.75,1.05 l 2.75,10.81 c 0.14,0.54 0.14,0.65 0.14,0.79 0,0.1 -0.1,0.55 -0.6,0.55 -0.5,0 -0.54,-0.25 -0.75,-1.05 -1.04,-3.87 -2.18,-4.78 -6.42,-4.78 l -4.53,0 3.19,12.66 c 0.43,1.75 0.5,1.94 2.68,1.94 l 6.58,0 c 6.13,0 7.27,-1.64 7.27,-5.47 0,-1.16 0,-1.35 -0.14,-2.7 -0.11,-0.65 -0.11,-0.74 -0.11,-0.9 0,-0.25 0.15,-0.59 0.61,-0.59 0.54,0 0.59,0.3 0.69,1.25 l 1,8.61 c 0.15,1.34 -0.1,1.34 -1.35,1.34 l -24.4,0 c -1,0 -1.5,0 -1.5,-1 0,-0.54 0.45,-0.54 1.39,-0.54 1.84,0 3.23,0 3.23,-0.89 0,-0.21 0,-0.3 -0.25,-1.21 l -6.56,-26.34 c -0.5,-1.95 -0.61,-2.34 -4.55,-2.34 -0.84,0 -1.39,0 -1.39,-0.96 0,-0.59 0.59,-0.59 0.75,-0.59 1.44,0 5.13,0.16 6.58,0.16 1.64,0 5.78,-0.16 7.42,-0.16 0.45,0 1.05,0 1.05,0.95 0,0.39 -0.3,0.49 -0.3,0.55 -0.16,0.05 -0.25,0.05 -1.39,0.05 -1.11,0 -1.36,0 -2.59,0.09 -1.46,0.16 -1.6,0.36 -1.6,1 0,0.09 0,0.41 0.19,1.14 z"
+           inkscape:connector-curvature="0"
+           style="fill:#000000;stroke-width:0" /><path
+           id="path3612"
+           d="m 507.5,412.76 -0.02,0.03 -0.01,0.02 -0.01,0.03 -0.01,0.02 -0.02,0.02 -0.01,0.02 -0.01,0.02 -0.01,0.02 -0.01,0.02 -0.01,0.02 -0.01,0.01 -0.01,0.02 0,0.02 -0.01,0.01 -0.01,0.01 -0.01,0.02 0,0.01 -0.01,0.01 -0.01,0.01 0,0.01 -0.01,0.01 0,0.01 0,0.01 -0.01,0 0,0.01 0,0.01 -0.01,0 0,0.01 0,0 0,0.01 0,0 0,0 c 0,0.08 0.03,0.11 0.84,0.68 l 3.52,2.46 c 4.59,3.24 6.76,4.77 9.23,4.99 0.38,0.03 0.8,0.06 0.8,0.76 0,0.29 -0.24,0.46 -0.45,0.46 -0.74,0 -1.65,-0.11 -2.41,-0.11 -0.94,0 -3.27,0.14 -4.21,0.14 -0.21,0 -0.73,0 -0.73,-0.77 0,-0.03 0,-0.45 0.52,-0.48 0.42,-0.03 0.87,-0.11 0.87,-0.49 0,-0.64 -1.08,-1.4 -1.53,-1.71 l -14.53,-10.24 2.75,10.97 c 0.31,1.19 0.34,1.47 3.06,1.47 0.56,0 1.05,0 1.05,0.73 0,0.32 -0.2,0.52 -0.56,0.52 -1,0 -3.55,-0.14 -4.57,-0.14 -0.59,0 -1.81,0 -2.4,0.03 -0.69,0.05 -1.53,0.11 -2.19,0.11 -0.2,0 -0.73,0 -0.73,-0.77 0,-0.48 0.39,-0.48 1.15,-0.48 0.55,0 0.69,0 1.31,-0.08 0.71,-0.06 0.79,-0.14 0.79,-0.48 0,-0.07 0,-0.24 -0.15,-0.77 l -4.64,-18.5 c -0.28,-1.19 -0.34,-1.47 -3.06,-1.47 -0.62,0 -1.05,0 -1.05,-0.76 0,-0.04 0,-0.49 0.57,-0.49 1,0 3.51,0.14 4.51,0.14 0.6,0 1.82,0 2.41,-0.03 0.7,-0.05 1.58,-0.11 2.23,-0.11 0.21,0 0.74,0 0.74,0.77 0,0.48 -0.42,0.48 -1.11,0.48 -0.05,0 -0.7,0 -1.33,0.08 -0.81,0.06 -0.81,0.17 -0.81,0.52 0,0.28 0.36,1.57 1.64,6.68 l 5.78,4.08 5.06,-9.78 c 0.24,-0.45 0.24,-0.5 0.24,-0.67 0,-0.8 -0.97,-0.91 -1.6,-0.91 -0.42,0 -0.9,0 -0.9,-0.76 0,-0.04 0.03,-0.49 0.59,-0.49 0.97,0 3.48,0.14 4.45,0.14 1.05,0 2.44,-0.14 3.42,-0.14 0.46,0 0.69,0.25 0.69,0.74 0,0.51 -0.45,0.51 -0.79,0.51 -0.63,0 -1.71,0.05 -2.3,1.16 z"
+           inkscape:connector-curvature="0"
+           style="fill:#000000;stroke-width:0" /></g>    </g>
+    <g
+       id="g4296"
+       transform="translate(-336.42857,-220)">
+      <g
+         id="g6571"
+         transform="translate(-231.57143,220)">
+        <g
+           id="g6452"
+           transform="translate(17.67767,-37.88072)">
+          <rect
+             style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.00748348;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+             id="rect4136-3"
+             width="252.40372"
+             height="139.90373"
+             x="298.61957"
+             y="238.83891" />
+          <path
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.27514815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.82544429, 6.82544429;stroke-dashoffset:0;stroke-opacity:1"
+             d="m 298.61957,276.69272 c 139.74512,0.70421 231.07327,34.85007 251.94976,88.57215"
+             id="path4138-5"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="cc" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path4197-6"
+             d="m 479.33882,304.06908 14.35103,-34.72846"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.21199703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Mend-6)" />
+        </g>
+        <g
+           transform="matrix(0.56688087,0,0,0.56688087,300.74488,163.17193)"
+           id="g6566">
+          <path
+             id="path6496"
+             d="m 402.39431,124.83597 0,0 0,-0.0106 0,0 0,-0.0106 0,-0.0213 0,-0.0106 0,-0.0213 -0.0106,-0.0213 0,-0.0213 0,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 0,-0.0213 -0.0106,-0.0319 -0.0106,-0.0213 -0.0213,-0.0319 -0.0106,-0.0213 -0.0213,-0.0319 -0.0106,-0.0213 -0.0213,-0.0213 -0.0319,-0.0319 -0.0106,-0.0106 -0.0106,-0.0106 -0.0106,-0.0106 -0.0213,-0.0106 -0.0106,-0.0106 -0.0213,-0.0106 -0.0106,-0.0106 -0.0213,-0.0106 -0.0213,-0.0106 -0.0213,-0.0106 -0.0106,0 -0.0213,-0.0106 -0.0213,-0.0106 -0.0213,0 -0.0319,-0.0106 -0.0213,-0.0106 -0.0213,0 -0.0319,0 -0.0213,-0.0106 -0.0319,0 -0.0213,0 -0.0319,-0.0106 -0.0319,0 -0.0319,0 c -0.79724,0 -5.83583,0.48898 -6.72874,0.58465 -0.43583,0.0532 -0.74409,0.3189 -0.74409,1.00984 0,0.6378 0.47834,0.6378 1.27559,0.6378 2.54055,0 2.64685,0.36141 2.64685,0.89291 l -0.15945,1.06299 -3.18898,12.55394 c -0.93543,-1.95591 -2.4874,-3.38032 -4.85787,-3.38032 l 0.0425,1.15866 c 3.44409,0 4.18819,4.33701 4.18819,4.64528 0,0.34016 -0.0957,0.64842 -0.14882,0.91417 l -2.65748,10.38544 c -0.26575,0.94606 -0.26575,1.04173 -1.06299,1.9559 -2.32796,2.9126 -4.49646,3.75236 -5.97402,3.75236 -2.64685,0 -3.39095,-2.90197 -3.39095,-4.9748 0,-2.64685 1.69016,-9.15236 2.90197,-11.59724 1.64764,-3.1252 4.03937,-5.08111 6.1441,-5.08111 l -0.0425,-1.15866 c -6.19725,0 -12.75591,7.77048 -12.75591,15.50906 0,4.98543 2.90197,8.47204 7.03701,8.47204 1.05236,0 3.70984,-0.22322 6.87756,-3.97559 0.43583,2.23229 2.2748,3.97559 4.81535,3.97559 1.86024,0 3.07205,-1.21181 3.92244,-2.91259 0.89292,-1.90276 1.59449,-5.14489 1.59449,-5.24055 0,-0.5315 -0.47834,-0.5315 -0.62716,-0.5315 -0.5315,0 -0.58465,0.2126 -0.75473,0.95669 -0.89291,3.4441 -1.86023,6.55866 -4.01811,6.55866 -1.42441,0 -1.59449,-1.37126 -1.59449,-2.43425 0,-1.26496 0.0957,-1.64764 0.3189,-2.54055 z"
+             inkscape:connector-curvature="0"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+          <polygon
+             id="polygon6498"
+             points="586.04,448.19 586.04,446.64 604.02,446.64 604.02,448.19 "
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+             transform="matrix(1.0629921,0,0,-1.0629921,-207.7419,592.79698)" />
+          <path
+             id="path6500"
+             d="m 436.79273,124.2088 0,-0.0213 0,-0.0213 0,-0.0106 -0.0106,-0.0213 0,-0.0213 0,-0.0213 -0.0106,-0.0213 0,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0106,-0.0213 -0.0213,-0.0213 -0.0213,-0.0213 -0.0106,-0.0213 -0.0213,-0.0213 -0.0213,-0.0213 -0.0213,-0.0106 -0.0319,-0.0213 -0.0213,-0.0106 -0.0319,-0.0213 -0.0213,-0.0106 -0.0319,-0.0106 -0.0213,-0.0106 -0.0213,0 -0.0106,-0.0106 -0.0213,0 -0.0213,0 -0.0106,-0.0106 -0.0213,0 -0.0213,0 -0.0213,0 -0.0213,0 -0.0213,0 -0.0213,0 c -0.26574,0 -0.32952,0.0425 -0.95669,0.79724 l -2.54055,3.0189 c -1.38189,-2.4874 -4.14567,-3.81614 -7.57913,-3.81614 -6.72874,0 -13.07481,6.09094 -13.07481,12.50078 0,4.28386 2.81693,6.72874 5.5063,7.50473 l 5.65512,1.49882 c 1.96654,0.46771 4.88976,1.26496 4.88976,5.61259 0,4.77284 -4.35826,9.73701 -9.53503,9.73701 -3.39095,0 -9.2693,-1.16929 -9.2693,-7.72795 0,-1.27559 0.26575,-2.54055 0.3189,-2.85945 0.0425,-0.2126 0.0957,-0.26575 0.0957,-0.37205 0,-0.53149 -0.36142,-0.58464 -0.62716,-0.58464 -0.26575,0 -0.37205,0.0531 -0.5315,0.2126 -0.22323,0.2126 -3.17835,12.28819 -3.17835,12.437 0,0.3189 0.26575,0.5315 0.58465,0.5315 0.26575,0 0.3189,-0.0425 0.94606,-0.79724 l 2.60433,-2.99764 c 2.27481,3.07205 5.86772,3.79488 8.93977,3.79488 7.20708,0 13.45748,-7.03701 13.45748,-13.59567 0,-3.65669 -1.79646,-5.46378 -2.5937,-6.19724 -1.21182,-1.23307 -2.00906,-1.42441 -6.72874,-2.65748 -1.15867,-0.3189 -3.07205,-0.8504 -3.5504,-0.94607 -1.43504,-0.47834 -3.23149,-2.00905 -3.23149,-4.81535 0,-4.30512 4.24133,-8.80157 9.26929,-8.80157 4.41141,0 7.63228,2.2748 7.63228,8.21692 0,1.69016 -0.22323,2.64685 -0.22323,2.95512 0,0.0531 0,0.5315 0.64843,0.5315 0.53149,0 0.58464,-0.15945 0.78661,-1.06299 z"
+             inkscape:connector-curvature="0"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        </g>
+        <path
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           inkscape:connector-curvature="0"
+           d="m 357.91223,246.71551 0,-0.0121 -0.006,-0.0121 0,-0.006 0,-0.0121 0,-0.0121 -0.006,-0.0121 0,-0.0121 -0.006,-0.0121 0,-0.0121 -0.006,-0.0121 -0.006,-0.0121 -0.006,-0.0121 -0.006,-0.0121 -0.006,-0.0121 -0.0121,-0.0121 -0.006,-0.0121 -0.0121,-0.0121 -0.0121,-0.0121 -0.0121,-0.0121 -0.0121,-0.0121 -0.0121,-0.006 -0.0121,-0.0121 -0.0121,-0.006 -0.0181,-0.0121 -0.0181,-0.006 -0.0181,-0.006 -0.006,-0.006 -0.0121,0 -0.006,-0.006 -0.0121,0 -0.0121,0 -0.0121,-0.006 -0.006,0 -0.0121,0 -0.0121,0 -0.0121,0 -0.0121,0 -0.0121,0 c -0.15065,0 -0.18681,0.0241 -0.54836,0.45194 l -1.44019,1.71135 c -0.77734,-1.41006 -2.34407,-2.16329 -4.29044,-2.16329 -3.8144,0 -7.41186,3.45283 -7.41186,7.08645 0,2.42844 1.59084,3.81439 3.11539,4.25429 l 3.21181,0.84965 c 1.11479,0.26513 2.77191,0.71708 2.77191,3.18167 0,2.70563 -2.47062,5.51972 -5.40523,5.51972 -1.92226,0 -5.25458,-0.66285 -5.25458,-4.38082 0,-0.72311 0.15064,-1.44019 0.17475,-1.62097 0.0301,-0.12052 0.0603,-0.15065 0.0603,-0.21091 0,-0.30129 -0.21091,-0.33142 -0.36156,-0.33142 -0.15065,0 -0.20488,0.0301 -0.30129,0.12052 -0.12052,0.12052 -1.79572,6.96594 -1.79572,7.0503 0,0.18077 0.15065,0.30129 0.33142,0.30129 0.15065,0 0.17475,-0.0241 0.53631,-0.45194 l 1.47634,-1.6993 c 1.28954,1.74148 3.3263,2.15124 5.06778,2.15124 4.08556,0 7.62276,-3.98914 7.62276,-7.70712 0,-2.07291 -1.01837,-3.09731 -1.47031,-3.5131 -0.68093,-0.699 -1.13287,-0.80747 -3.80837,-1.50647 -0.66285,-0.18078 -1.74149,-0.48208 -2.01868,-0.53631 -0.80747,-0.27116 -1.82585,-1.13889 -1.82585,-2.72973 0,-2.44049 2.40434,-4.98944 5.25459,-4.98944 2.49472,0 4.32057,1.28954 4.32057,4.65801 0,0.95812 -0.12052,1.50045 -0.12052,1.6752 0,0.0301 0,0.3013 0.36758,0.3013 0.3013,0 0.33143,-0.0904 0.43989,-0.60259 z"
+           id="path6502" />
+      </g>
+      <path
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         inkscape:connector-curvature="0"
+         d="m 64.049786,435.30721 -0.005,-0.0103 0,-0.0103 -0.005,-0.005 -0.005,-0.0103 0,-0.0103 -0.005,-0.0103 -0.005,-0.0155 -0.005,-0.0103 -0.005,-0.0103 -0.005,-0.0103 -0.005,-0.0155 -0.005,-0.0103 -0.0103,-0.0258 -0.0103,-0.031 -0.0103,-0.0258 -0.0103,-0.0258 -0.005,-0.0103 -0.005,-0.0155 -0.005,-0.0103 -0.005,-0.0103 -0.005,-0.0155 0,-0.0103 -0.005,-0.0103 0,-0.0103 -0.005,-0.0103 0,-0.0103 0,-0.005 0,-0.0103 c 0,-0.0207 0.46014,-0.38776 0.74967,-0.58939 l 4.50838,-3.47952 c 2.41446,-1.77854 3.42781,-1.87677 4.193,-1.95432 0.21198,-0.0259 0.47048,-0.0517 0.47048,-0.51702 0,-0.0982 -0.0827,-0.28436 -0.28436,-0.28436 -0.57388,0 -1.20981,0.0827 -1.8354,0.0827 -0.92546,0 -1.92847,-0.0827 -2.8591,-0.0827 -0.17579,0 -0.486,0 -0.486,0.51702 0,0.17578 0.12926,0.25851 0.31021,0.28436 0.56355,0.0465 0.79621,0.17578 0.79621,0.53769 0,0.46015 -0.77553,1.05989 -0.92546,1.18914 l -10.050786,7.72422 2.068056,-8.26709 c 0.22749,-0.92545 0.28436,-1.18396 2.15596,-1.18396 0.64627,0 0.8841,0 0.8841,-0.51702 0,-0.22749 -0.21198,-0.28436 -0.36709,-0.28436 -0.71865,0 -2.57474,0.0827 -3.29339,0.0827 -0.744496,0 -2.579906,-0.0827 -3.319236,-0.0827 -0.18613,0 -0.51702,0 -0.51702,0.49117 0,0.31021 0.23266,0.31021 0.73934,0.31021 0.34123,0 0.80137,0.0207 1.10641,0.0465 0.41361,0.0569 0.57389,0.12925 0.57389,0.41361 0,0.10341 -0.031,0.18613 -0.1034,0.49117 l -3.4485,13.83018 c -0.25851,1.00818 -0.31538,1.20981 -2.35242,1.20981 -0.4343,0 -0.71866,0 -0.71866,0.49634 0,0.30504 0.30504,0.30504 0.38777,0.30504 0.71865,0 2.55405,-0.0827 3.27271,-0.0827 0.54286,0 1.10641,0.0362 1.64928,0.0362 0.56355,0 1.12709,0.0465 1.66996,0.0465 0.18613,0 0.51702,0 0.51702,-0.51702 0,-0.28436 -0.23266,-0.28436 -0.71866,-0.28436 -0.95131,0 -1.66996,0 -1.66996,-0.46014 0,-0.18613 0.14994,-0.74967 0.22232,-1.13744 0.36708,-1.3339 0.69797,-2.69882 1.03403,-4.03789 l 3.836256,-2.98835 2.99352,6.92801 c 0.30504,0.69797 0.30504,0.7445 0.30504,0.89961 0,0.77552 -1.10641,0.7962 -1.33907,0.7962 -0.28436,0 -0.56872,0 -0.56872,0.51702 0,0.28436 0.31021,0.28436 0.36708,0.28436 1.0237,0 2.10426,-0.0827 3.13829,-0.0827 0.56872,0 1.95432,0.0827 2.52304,0.0827 0.12925,0 0.46531,0 0.46531,-0.51702 0,-0.28436 -0.28952,-0.28436 -0.51701,-0.28436 -1.05471,-0.0207 -1.3856,-0.2585 -1.77337,-1.15294 z"
+         id="path3463" />
+    </g>
+    <g
+       id="g3544"
+       transform="translate(-130,83.571433)">
+      <polygon
+         transform="matrix(0.51701603,0,0,-0.51701603,-78.334949,353.57863)"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         points="532.87,445.71 533.76,446.6 527.13,453.38 520.46,446.6 521.35,445.71 527.13,450.79 "
+         id="polygon3465" />
+      <path
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         inkscape:connector-curvature="0"
+         d="m 194.04978,133.16436 0,-0.0103 -0.005,-0.0103 -0.005,-0.005 0,-0.0103 -0.005,-0.0103 -0.005,-0.0103 -0.005,-0.0155 -0.005,-0.0103 -0.005,-0.0103 -0.005,-0.0103 -0.005,-0.0155 -0.005,-0.0103 -0.0103,-0.0258 -0.0103,-0.031 -0.0103,-0.0258 -0.0103,-0.0258 -0.005,-0.0103 -0.005,-0.0155 -0.005,-0.0103 -0.005,-0.0103 0,-0.0155 -0.005,-0.0103 -0.005,-0.0103 0,-0.0103 0,-0.0103 -0.005,-0.0103 0,-0.005 0,-0.0103 c 0,-0.0207 0.46015,-0.38776 0.74968,-0.58939 l 4.50838,-3.47952 c 2.41446,-1.77854 3.42781,-1.87677 4.193,-1.95432 0.21197,-0.0259 0.47048,-0.0517 0.47048,-0.51702 0,-0.0982 -0.0827,-0.28436 -0.28436,-0.28436 -0.57389,0 -1.20982,0.0827 -1.83541,0.0827 -0.92545,0 -1.92847,-0.0827 -2.85909,-0.0827 -0.17579,0 -0.48083,0 -0.48083,0.51702 0,0.17578 0.12925,0.25851 0.30504,0.28436 0.56355,0.0465 0.7962,0.17578 0.7962,0.53769 0,0.46015 -0.77552,1.05989 -0.92545,1.18914 l -10.0508,7.72422 2.06807,-8.26709 c 0.22749,-0.92545 0.28436,-1.18396 2.15596,-1.18396 0.64627,0 0.88409,0 0.88409,-0.51702 0,-0.22749 -0.21197,-0.28436 -0.36708,-0.28436 -0.71865,0 -2.57474,0.0827 -3.29339,0.0827 -0.7445,0 -2.57991,-0.0827 -3.31924,-0.0827 -0.18613,0 -0.51702,0 -0.51702,0.49117 0,0.31021 0.23266,0.31021 0.73933,0.31021 0.34123,0 0.80138,0.0207 1.10642,0.0465 0.41361,0.0569 0.57389,0.12925 0.57389,0.41361 0,0.10341 -0.031,0.18613 -0.10341,0.49117 l -3.44849,13.83018 c -0.25851,1.00818 -0.31538,1.20981 -2.35243,1.20981 -0.43429,0 -0.71865,0 -0.71865,0.49634 0,0.30504 0.30504,0.30504 0.38776,0.30504 0.71865,0 2.55406,-0.0827 3.27271,-0.0827 0.54287,0 1.10642,0.0362 1.64928,0.0362 0.56355,0 1.1271,0.0465 1.66997,0.0465 0.18612,0 0.51701,0 0.51701,-0.51702 0,-0.28436 -0.23265,-0.28436 -0.71865,-0.28436 -0.95131,0 -1.66996,0 -1.66996,-0.46014 0,-0.18613 0.14993,-0.74967 0.22232,-1.13744 0.36708,-1.3339 0.69797,-2.69882 1.03403,-4.03789 l 3.83626,-2.98835 2.99352,6.92801 c 0.30504,0.69797 0.30504,0.7445 0.30504,0.89961 0,0.77552 -1.10642,0.7962 -1.33907,0.7962 -0.28436,0 -0.56872,0 -0.56872,0.51702 0,0.28436 0.31021,0.28436 0.36708,0.28436 1.02369,0 2.10426,-0.0827 3.13829,-0.0827 0.56872,0 1.95432,0.0827 2.52304,0.0827 0.12925,0 0.46531,0 0.46531,-0.51702 0,-0.28436 -0.28953,-0.28436 -0.51702,-0.28436 -1.05471,-0.0207 -1.3856,-0.2585 -1.77336,-1.15294 z"
+         id="path3467" />
+    </g>
+  </g>
+</svg>
diff --git a/include/deal.II/non_matching/immersed_surface_quadrature.h b/include/deal.II/non_matching/immersed_surface_quadrature.h
new file mode 100644 (file)
index 0000000..9d168bc
--- /dev/null
@@ -0,0 +1,134 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 1998 - 2017 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+#ifndef dealii__non_matching_immersed_surface_quadrature
+#define dealii__non_matching_immersed_surface_quadrature
+
+#include <deal.II/base/config.h>
+#include <deal.II/base/point.h>
+#include <deal.II/base/tensor.h>
+#include <deal.II/base/subscriptor.h>
+#include <deal.II/base/quadrature.h>
+
+#include <vector>
+
+DEAL_II_NAMESPACE_OPEN
+namespace NonMatching
+{
+
+  /**
+   * Defines a quadrature formula for integration over an oriented surface,
+   * $\hat{S}$, immersed in the unit cell. By immersed it is meant that the
+   * surface may intersect the unit cell in an arbitrary way. The quadrature
+   * formula is described by a set of quadrature points, $\hat{x}_q$, weights,
+   * $w_q$, and normalized surface normals, $\hat{n}_q$.
+   *
+   * We typically want to compute surface integrals in real space.
+   * A surface $S$ intersecting a cell $K$ in real space, can be mapped onto a
+   * surface $\hat{S}$ intersecting the unit cell $\hat{K}$.
+   * Thus a surface integral over $S\cap K$ in real space can be transformed to
+   * a surface integral over $\hat{S} \cap \hat{K}$ according to
+   * @f[
+   * \int_{S\cap K} f(x) dS =
+   * \int_{S\cap K} f(x) |d\bar{S}| =
+   * \int_{\hat{S}\cap\hat{K}} f(F_{K}(\hat{x})) \det(J) |\left( J^{-1} \right )^T d\hat{S}|,
+   * @f]
+   * where $F_K$ is the mapping from reference to real space and $J$ is its
+   * Jacobian. This transformation is possible since the continuous surface
+   * elements are vectors: $d\bar{S}, d\hat{S} \in \mathbb{R}^{dim}$ which are
+   * parallel to the normals of $S$ and $\hat{S}$. So in order to compute the
+   * integral in real space one needs information about the normal to do the
+   * transformation.
+   *
+   * Thus, in addition to storing points and weights, this quadrature stores
+   * also the normalized normal for each quadrature point. This can be viewed
+   * as storing a discrete surface element,
+   * @f[
+   * \Delta \hat{S}_q := w_q \hat{n}_q \approx d\hat{S}(\hat{x}_q),
+   * @f]
+   * for each quadrature point. The surface integral in real space would then be
+   * approximated as
+   * @f[
+   * \int_{S\cap K} f(x) dS \approx
+   * \sum_{q} f \left(F_{K}(\hat{x}_{q}) \right) \det(J_q)
+   * |\left( J_q^{-1} \right)^T \hat{n}_q| w_q.
+   * @f]
+   *
+   * @image html immersed_surface_quadrature.svg
+   *
+   * @author Simon Sticko, 2017
+   */
+  template<int dim>
+  class ImmersedSurfaceQuadrature : public Quadrature<dim>
+  {
+  public:
+
+    /**
+     * Default constructor to initialize the quadrature with no quadrature
+     * points.
+     */
+    ImmersedSurfaceQuadrature()=default;
+
+    /**
+     * Construct a quadrature formula from vectors of points, weights and
+     * surface normals. The points, weights and normals should be with respect
+     * to reference space, and the normals should be normalized.
+     */
+    ImmersedSurfaceQuadrature(
+      const std::vector<Point<dim>> &points,
+      const std::vector<double> &weights,
+      const std::vector<Tensor<1,dim>> &normals);
+
+    /**
+     * Extend the given formula by an additional quadrature point.
+     * The point, weight and normal should be with respect to reference space,
+     * and the normal should be normalized.
+     *
+     * This function exists since immersed quadrature rules can be rather
+     * complicated to construct. Often the construction is done by
+     * partitioning the cell into regions and constructing points on each
+     * region separately. This can make it cumbersome to create the quadrature
+     * from the constructor since all quadrature points have to be known at
+     * time of creation of the object.
+     *
+     * @note This function should only be used during construction of the
+     * quadrature formula.
+     */
+    void push_back(const Point<dim> &point,
+                   const double weight,
+                   const Tensor<1, dim> &normal);
+
+    /**
+     * Return a reference to the <tt>i</tt>th surface normal.
+     */
+    const Tensor<1,dim> &normal_vector(const unsigned int i) const;
+
+    /**
+     * Return a reference to the whole %vector of normals.
+     */
+    const std::vector<Tensor<1,dim>> &get_normal_vectors() const;
+
+  protected:
+
+    /**
+     * %Vector of surface normals at each quadrature point.
+     */
+    std::vector<Tensor<1,dim>> normals;
+  };
+
+}
+DEAL_II_NAMESPACE_CLOSE
+
+#endif
index b78b0a0f1bcc030cf4cf744d10ec6fcc4edc2de8..36e209f704d0a0c71dd51f6e9b9f1c95a798be77 100644 (file)
@@ -49,6 +49,7 @@ ADD_SUBDIRECTORY(matrix_free)
 ADD_SUBDIRECTORY(meshworker)
 ADD_SUBDIRECTORY(opencascade)
 ADD_SUBDIRECTORY(physics)
+ADD_SUBDIRECTORY(non_matching)
 
 FOREACH(build ${DEAL_II_BUILD_TYPES})
   STRING(TOLOWER ${build} build_lowercase)
diff --git a/source/non_matching/CMakeLists.txt b/source/non_matching/CMakeLists.txt
new file mode 100644 (file)
index 0000000..085f7f8
--- /dev/null
@@ -0,0 +1,30 @@
+## ---------------------------------------------------------------------
+##
+## Copyright (C) 2012 - 2014 by the deal.II authors
+##
+## This file is part of the deal.II library.
+##
+## The deal.II library is free software; you can use it, redistribute
+## it, and/or modify it under the terms of the GNU Lesser General
+## Public License as published by the Free Software Foundation; either
+## version 2.1 of the License, or (at your option) any later version.
+## The full text of the license can be found in the file LICENSE at
+## the top level of the deal.II distribution.
+##
+## ---------------------------------------------------------------------
+
+INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
+
+SET(_src
+  immersed_surface_quadrature.cc
+  )
+
+SET(_inst
+  )
+
+FILE(GLOB _header
+  ${CMAKE_SOURCE_DIR}/include/deal.II/non_matching/*.h
+  )
+
+DEAL_II_ADD_LIBRARY(obj_non_matching OBJECT ${_src} ${_header} ${_inst})
+EXPAND_INSTANTIATIONS(obj_non_matching "${_inst}")
diff --git a/source/non_matching/immersed_surface_quadrature.cc b/source/non_matching/immersed_surface_quadrature.cc
new file mode 100644 (file)
index 0000000..288620d
--- /dev/null
@@ -0,0 +1,81 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 1998 - 2017 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+#include <deal.II/non_matching/immersed_surface_quadrature.h>
+
+DEAL_II_NAMESPACE_OPEN
+namespace NonMatching
+{
+
+  template<int dim>
+  ImmersedSurfaceQuadrature<dim>::ImmersedSurfaceQuadrature(
+    const std::vector<Point<dim> > &points,
+    const std::vector<double> &weights,
+    const std::vector<Tensor <1,dim>> &normals):
+    Quadrature<dim>(points,weights),
+    normals(normals)
+  {
+    AssertDimension (weights.size(), points.size());
+    AssertDimension (normals.size(), points.size());
+    for (auto normal : normals)
+      {
+        Assert(std::abs(normal.norm() - 1.0) < 1e-9,
+               ExcMessage("Normal is not normalized."));
+      }
+  }
+
+
+
+  template<int dim>
+  void ImmersedSurfaceQuadrature<dim>::push_back(
+    const Point<dim> &point,
+    const double weight,
+    const Tensor<1, dim> &normal)
+  {
+    this->quadrature_points.push_back(point);
+    this->weights.push_back(weight);
+    this->normals.push_back(normal);
+    Assert(std::abs(normal.norm() - 1.0) < 1e-9,
+           ExcMessage("Normal is not normalized."));
+  }
+
+
+
+  template<int dim>
+  const Tensor<1,dim> &
+  ImmersedSurfaceQuadrature<dim>::normal_vector(
+    const unsigned int i) const
+  {
+    AssertIndexRange(i, this->size());
+    return normals[i];
+  }
+
+
+
+  template<int dim>
+  const std::vector<Tensor<1,dim> > &
+  ImmersedSurfaceQuadrature<dim>::get_normal_vectors() const
+  {
+    return normals;
+  }
+
+
+
+  template class ImmersedSurfaceQuadrature<1>;
+  template class ImmersedSurfaceQuadrature<2>;
+  template class ImmersedSurfaceQuadrature<3>;
+
+}
+DEAL_II_NAMESPACE_CLOSE
diff --git a/tests/non_matching/CMakeLists.txt b/tests/non_matching/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f8ac3eb
--- /dev/null
@@ -0,0 +1,4 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
+INCLUDE(../setup_testsubproject.cmake)
+PROJECT(testsuite CXX)
+DEAL_II_PICKUP_TESTS()
diff --git a/tests/non_matching/immersed_surface_quadrature.cc b/tests/non_matching/immersed_surface_quadrature.cc
new file mode 100644 (file)
index 0000000..51307b8
--- /dev/null
@@ -0,0 +1,101 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 1998 - 2017 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+#include <deal.II/base/point.h>
+#include <deal.II/base/tensor.h>
+#include <deal.II/non_matching/immersed_surface_quadrature.h>
+#include "../tests.h"
+
+using namespace dealii;
+
+//Test that an ImmersedSurfaceQuadrature can be constructed for each dimension
+//and that quadrature points can be added to it.
+
+
+
+template<int dim>
+void print_quadrature(const NonMatching::ImmersedSurfaceQuadrature<dim> &quadrature)
+{
+  for (unsigned int i = 0; i < quadrature.size(); ++i)
+    {
+      deallog << quadrature.point(i) << ", " << quadrature.weight(i) << ", "
+              << quadrature.normal_vector(i) << std::endl;
+    }
+}
+
+
+
+//Check that get_normals() are callable and are of the same size as
+//points and weights.
+template<int dim>
+void check_get_normals(
+  const NonMatching::ImmersedSurfaceQuadrature<dim> &quadrature)
+{
+  const std::vector<Point<dim>> &points=
+                               quadrature.get_points();
+  const std::vector<Tensor<1,dim>> &normals=
+                                  quadrature.get_normal_vectors();
+  AssertThrow(points.size()==normals.size(),ExcInternalError())
+}
+
+
+
+template<int dim>
+void test_non_default_constructor()
+{
+  deallog<<"Using constructor"<<std::endl;
+  std::vector<Point<dim>> points(1);
+  std::vector<double> weights(1,1);
+  std::vector<Tensor<1,dim>> normals;
+  normals.push_back(Point<dim>::unit_vector(dim-1));
+  NonMatching::ImmersedSurfaceQuadrature<dim> quadrature(points,weights,normals);
+
+  print_quadrature(quadrature);
+}
+
+
+
+template<int dim>
+void test_push_back()
+{
+  deallog<<"Using push_back"<<std::endl;
+  const Point<dim> point;
+  const double weight=1;
+  const Tensor<1,dim> normal=Point<dim>::unit_vector(dim-1);
+
+  NonMatching::ImmersedSurfaceQuadrature<dim> quadrature;
+  quadrature.push_back(point,weight,normal);
+
+  print_quadrature(quadrature);
+}
+
+
+
+template<int dim>
+void construct_quadrature_and_print_points()
+{
+  test_push_back<dim>();
+  test_non_default_constructor<dim>();
+}
+
+
+
+int main()
+{
+  initlog();
+  construct_quadrature_and_print_points<1>();
+  construct_quadrature_and_print_points<2>();
+  construct_quadrature_and_print_points<3>();
+}
diff --git a/tests/non_matching/immersed_surface_quadrature.output b/tests/non_matching/immersed_surface_quadrature.output
new file mode 100644 (file)
index 0000000..7143d44
--- /dev/null
@@ -0,0 +1,13 @@
+
+DEAL::Using push_back
+DEAL::0.00000, 1.00000, 1.00000
+DEAL::Using constructor
+DEAL::0.00000, 1.00000, 1.00000
+DEAL::Using push_back
+DEAL::0.00000 0.00000, 1.00000, 0.00000 1.00000
+DEAL::Using constructor
+DEAL::0.00000 0.00000, 1.00000, 0.00000 1.00000
+DEAL::Using push_back
+DEAL::0.00000 0.00000 0.00000, 1.00000, 0.00000 0.00000 1.00000
+DEAL::Using constructor
+DEAL::0.00000 0.00000 0.00000, 1.00000, 0.00000 0.00000 1.00000

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.