Hi everyone,
the Wolfram Language both in the cloud and in Mathematica 10 offers the possibility to solve PDEs on quite general surfaces. In the documentation it is shown that the Laplace equation can be solved on a 3D model of the space shuttle like this:
mr = DiscretizeGraphics[ExampleData[{"Geometry3D", "SpaceShuttle"}]];
uif = NDSolveValue[{Inactive[Laplacian][u[x, y, z], {x, y, z}] == 0,
DirichletCondition[u[x, y, z] == 1, z <= -1.3]},
u, {x, y, z} \[Element] mr];
Needs["NDSolve`FEM`"]
ElementMeshSurfacePlot3D[uif, Boxed -> False, ViewPoint -> {0, -4, 2}]
This is really nice and gives
The problem shows up when we take more irregular objects like
mr = DiscretizeGraphics[ExampleData[{"Geometry3D", "Cow"}]]
or
mr = DiscretizeGraphics[ExampleData[{"Geometry3D", "Horse"}]]
When you execute the integration you get:
NDSolveValue::fememib: The input has or generated an intersecting boundary and cannot be processed. >>
Similarly,
BoundaryDiscretizeGraphics[ExampleData[{"Geometry3D", "Cow"}]]
gives
BoundaryMeshRegion::binsect: "The boundary curves self-intersect or cross each other in BoundaryMeshRegion[{{0.10799399763345718`,0.08466669917106628`,-0.21893799304962158`},{0.1157900020480156`,0.08869930356740952`,-0.22847199440002441`},{0.10719799995422363`,0.09556479752063751`,-0.23278899490833282`},<<46>>,{-0.30769699811935425`,0.093573197722435`,-0.22068199515342712`},<<2853>>},{{},{},{Polygon[{<<1>>}]}}]. \!\(\*ButtonBox[\">>\",
Appearance->{Automatic, None},
BaseStyle->\"Link\",
ButtonData:>\"paclet:ref/BoundaryMeshRegion\",
ButtonNote->\"BoundaryMeshRegion::binsect\"]\)"
So the problem is that there are self-intersections of the surface. Is there any elegant approach to fixing that?
Cheers,
Marco