It has to do with the ToElementMesh[]
function
In[1]:= Needs["NDSolve`FEM`"]
In[2]:= Clear[\[CapitalOmega]]
\[CapitalOmega] = ImplicitRegion[2 <= (x^2 + y^2 + z^2) <= 4, {x, y, z}]
Out[3]= ImplicitRegion[2 <= x^2 + y^2 + z^2 <= 4, {x, y, z}]
In[4]:= mesh = ToElementMesh[\[CapitalOmega], MaxCellMeasure -> 0.01];
During evaluation of In[4]:= ToElementMesh::fememib: The input has or generated an intersecting boundary and cannot be processed. >>
During evaluation of In[4]:= ToElementMesh::femtemnm: A mesh could not be generated. >>
this function has interesting options,
In[5]:= Options[ToElementMesh]
Out[5]= {"BoundaryMarkerFunction" -> None,
"BoundaryMeshGenerator" -> Automatic,
"CheckIncidentsCompletness" -> True, "CheckIntersections" -> True,
"CheckQuality" -> Automatic, "DeleteDuplicateCoordinates" -> True,
"ElementMeshGenerator" -> Automatic,
"ImproveBoundaryPosition" -> Automatic, "IncludePoints" -> {},
"MaxBoundaryCellMeasure" -> Automatic, "MeshElementBlocks" -> 1,
"MeshElementConstraint" -> Automatic, "MeshElementType" -> Automatic,
"MeshOrder" -> Automatic, "MessageHead" -> Automatic,
"NodeReordering" -> Automatic, "PointMarkerFunction" -> None,
"RegionHoles" -> Automatic, "RegionMarker" -> None,
"SteinerPoints" -> Automatic, AccuracyGoal -> Automatic,
MaxCellMeasure -> Automatic, MeshQualityGoal -> Automatic,
MeshRefinementFunction -> None, PrecisionGoal -> Automatic,
PerformanceGoal :> $PerformanceGoal}
some of them, like RegionHoles
are still undocumented. Nevertheless, the solid ball works in 3D out of the box
only the result has to be understood.