I create an ImplicitRegion from a box-shaped region with one face replaced by a function h[x,y]. If h[x,y] is a "normal" function, e.g.
h[x_,y_]:=y/(1+x^2)
solnRegn = ImplicitRegion[{z > h[x,y]},{{x, -60, 700}, {y, -60, 700}, {z, 110, 240}}];
then my region is a ConstantRegion. If it is created from an Interpolation, e.g.
data = {{539, 700, 135}, {586, 700, 135}, {413, 700, 113}, {277, 700,
110}, {441, 700, 120}, {154, 700, 115}, {0, 700, 121}, {539, 640,
135}, {586, 640, 135}, {413, 640, 113}, {277, 640, 110}, {441,
640, 120}, {154, 640, 115}, {0, 640, 121}, {0, 103, 170}, {0, 257,
155}, {0, 219, 160}, {0, 77, 200}, {0, 395, 133}, {0, 494,
128}, {0, 0, 235}, {0, -60, 235}, {-60, 700, 121}, {-60, 640,
121}, {-60, 103, 170}, {-60, 257, 155}, {-60, 219, 160}, {-60, 77,
200}, {-60, 395, 133}, {-60, 494, 128}, {-60, 0, 235}, {413, 0,
225}, {280, 0, 235}, {50, 0, 230}, {573, 0, 225}, {90, 0,
235}, {640, 0, 215}, {700, 0, 215}, {-60, -60, 235}, {413, -60,
225}, {280, -60, 235}, {50, -60, 230}, {573, -60, 225}, {90, -60,
235}, {640, -60, 215}, {640, 345, 200}, {640, 193, 224}, {640,
461, 135}, {640, 393, 160}, {640, 640, 125}, {640, 700,
125}, {700, -60, 215}, {700, 345, 200}, {700, 193, 224}, {700,
461, 135}, {700, 393, 160}, {700, 640, 125}, {700, 700,
125}, {436, 451, 125}, {252, 442, 125}, {252, 336, 125}, {336,
336, 125}, {220, 444, 135}, {196, 353, 135}, {347, 47, 225}, {151,
402, 175}, {90, 543, 120}, {518, 543, 130}, {566, 612,
165}, {583, 565, 165}, {169, 274, 150}, {420, 274, 150}, {169,
366, 150}, {409, 75, 220}, {236, 104, 185}, {205, 249, 140}, {472,
168, 175}, {426, 168, 175}, {426, 381, 138}, {138, 168,
215}, {259, 196, 140}, {473, 257, 205}, {259, 257, 130}, {473,
196, 175}, {299, 99, 200}, {400, 351, 140}, {299, 351, 121}, {400,
99, 195}, {260, 91, 200}, {369, 91, 185}, {527, 601, 125}, {149,
601, 115}, {527, 403, 205}, {320, 141, 160}, {537, 454,
190}, {320, 454, 116}, {537, 141, 225}, {32, 193, 160}, {32, 345,
142}, {112, 270, 200}, {597, 359, 205}, {112, 359, 195}, {597,
270, 220}, {128, 89, 210}, {468, 397, 160}, {128, 397, 175}, {468,
89, 222}, {151, 327, 150}, {151, 454, 145}, {450, 327,
205}, {490, 436, 150}, {159, 436, 163}, {490, 116, 220}, {158, 81,
235}, {579, 167, 229}, {224, 475, 145}, {286, 516, 130}, {224,
516, 130}, {286, 475, 125}, {70, 166, 165}, {179, 446, 160}, {481,
586, 130}, {432, 586, 130}, {481, 534, 130}, {464, 551,
136}, {529, 374, 210}, {432, 534, 130}, {45, 147, 160}, {68, 219,
165}, {361, 619, 110}, {361, 494, 114}, {68, 395, 140}, {59, 60,
180}, {98, 326, 193}, {59, 326, 155}, {98, 60, 200}, {589, 310,
215}, {589, 588, 160}, {558, 572, 160}, {503, 572, 127}, {558,
398, 205}, {325, 205, 135}, {325, 96, 182}, {255, 74, 220}, {105,
188, 190}, {155, 188, 201}, {82, 70, 180}, {486, 316, 215}, {525,
316, 217}, {486, 388, 190}, {410, 298, 150}, {513, 257,
220}, {513, 103, 225}, {170, 133, 223}, {198, 133, 210}, {519,
461, 161}, {590, 506, 167}, {519, 506, 136}, {590, 461,
180}, {434, 202, 150}, {150, 268, 172}, {163, 217, 164}, {347,
123, 160}, {387, 141, 155}, {411, 186, 155}, {411, 247,
150}, {446, 147, 205}, {446, 176, 165}, {95, 115, 175}, {95, 157,
175}, {271, 126, 160}, {377, 191, 140}, {377, 257, 140}, {328,
267, 130}, {232, 158, 158}, {208, 190, 159}, {247, 127,
160}, {211, 45, 235}, {557, 545, 160}, {557, 505, 160}, {125, 207,
208}, {278, 71, 225}, {436, 242, 160}};
data = 1. data;(*Fix precision*)
h =
Interpolation[data, InterpolationOrder -> 1];
Print["Test ", h[2, 3]];
Needs["NDSolve`FEM`"];
solnRegn =
ImplicitRegion[{z > h[x, y]}, {{x, -60, 700}, {y, -60, 700}, {z,
110, 240}}];
ConstantRegionQ[solnRegn]
ToBoundaryMesh[solnRegn]["Wireframe"]
then ConstantRegionQ returns "False":
although, as can be seen, the ToBoundaryMesh function does in fact work. But why is ConstantRegionQ False? Something wrong with my interpolation?
It is somewhat surprising (but perfectly fine, of course) that both ToBoundaryMesh and ToElementMesh work with this, since ConstantRegionQ is False and their documentation says that they require ConstantRegionQ=True.
data
,xMn
etc. $\endgroup$