identifySubdomains does not write bulk_node_ids to the bulk mesh file

Hi! I have a question/problem with the identifySubdomains tool.

I’m trying to study a model with layered soul, and to run it I seem to need bulk_node_ids in the mesh describing the whole domain, as if I don’t do anything to the bulk mesh and try to run it I get an error saying

error: The required bulk node ids map does not exist in the boundary mesh ‘bulk’.

Compared to the unlayered case nothing in the boundary conditions changes, and there are no inconsistencies found in the mesh either visually or when running checkMesh: MaterialIDs are correct, the tool finds no errors and boundaries seem consistent.

Ok, I’m running the identifySubdomains as described in the example in documentation for my bulk mesh bulk.vtu and the two meshes I have boundary conditions on, bc1.vtu and bc2.vtu. Now, the syntax for having such subdomain inputs should be

identifySubdomains -m bulk.vtu -- bc1.vtu bc2.vtu

right?

If I run this, the output I get (besides the running time data) is

[ogs] [info] There is already a ‘bulk_node_ids’ property present in the subdomain mesh ‘bc1’ and it is equal to the newly computed values.
[ogs] [info] There is already a ‘bulk_element_ids’ property present in the subdomain mesh ‘bc1’ and it is equal to the newly computed values.
[ogs] [info] There is already a ‘bulk_node_ids’ property present in the subdomain mesh ‘bc2’ and it is equal to the newly computed values.
[ogs] [info] There is already a ‘bulk_element_ids’ property present in the subdomain mesh ‘bc2’ and it is equal to the newly computed values.

after which the tool only writes the subdomain meshes bc1.vtu and bc2.vtu while leaving the domain mesh bulk.vtu untouched. What is happening here?

I tried changing the order of the elements in the command but that ran into problems as expected. I also used the mesh for the whole boundary instead of the bc meshes, but the outcome was the same as above. I have also run the command with the modifier -f in front of, and without the double dash, but all outcomes are identical. The only change happens if I put the bulk mesh anywhere else but as the first, when the output is (slightly censored)

[ogs][critical] ogs/MeshGeoToolsLib/MeshNodeSearcher.cpp:148 getMeshNodeIDs ()
terminate called after throwing an instance of ‘std::runtime_error’
what(): No nodes could be found in the mesh for point 0 : (26, 0, 0) in the 1e-16 epsilon radius in the mesh ‘bc1’

I am running ogs version 6.4.4.

Hi Jere,

sometimes generated meshes (the bulk and corresponding boundary) are not identical in all points due to floating point errors. The default search radius of the identifySubdomains is 1e-16, which might be to tight. Try

identifySubdomains -m bulk.vtu -s 1e-10 -f -- bc1.vtu bc2.vtu

You can increase the tolerance as needed but you also run into the problem, that two unrelated points might be associated.

   -s <float>,  --searchlength <float>
     search length determining radius for the node search algorithm.
     Non-negative floating point number (default 1e-16)

If the boundary meshes already have the bulk_node_ids and bulk_element_ids, using -f will overwrite the values, that’s correct procedure.

I hope this helps, if not, upload the meshes, I’ll take closer look on them.

– d