Hi all, I encountered some problems when using TH2M module of OGS6 compiled by myself. In the center of my area containing triangle elements there is a line embed as the preset fracture. When I run the prj file, the error is:
critical: D:\OGS6\OGS6_SourceCode\source_code_2\ogs-master\ProcessLib\Utils\GenericLocalAssemblerFactory.h:66 ProcessLib::GenericLocalAssemblerFactory<struct ProcessLib::TH2M::LocalAssemblerInterface,bool,unsigned int const &,struct ProcessLib::TH2M::TH2MProcessData<2> &>::operator ()()
error: You are trying to build a local assembler for an unknown mesh element type (class MeshLib::TemplateElement<class MeshLib::LineRule3>). Maybe you have disabled this mesh element type in your build configuration, or a mesh element order does not match shape function order given in the project file.
I have used both linear and quadratic elements, but it can’t work. Actually in my previous simulations, this error will always appear when there are more than one element types in my vtu files. The .vtu files I used have been attached. I wonder is there anything wrong with my compiling process(actually I hope not). I found a similar issue in the discourse which says there may be a corruption in the vtu file.:
https://discourse.opengeosys.org/t/unknwon-mesh-element-type-rm-benchmark-bishops-effective-stress/849
But I wonder how it get corrupted. Maybe the author of the above post link, @lurpi , could give me some advice?
Thanks for your all attention.
Regards,
Yuhao
2D-model-line.zip (793.2 KB)
I noticed that in all benchmarks of TH2M there exists <jacobian_assembler>
, in which the component_magnitudes
can only be defined for only one element type. So…maybe in TH2M process can’ t accept more than one type of elements?
Hi @tjlyh777
I think the problem is that you have 1D elements (quadratic edge) in your 2D bulk mesh.
Hi @joergbuchwald ,Yes, it is. I also tried to insert 1D elements (line type) in my 2D bulk mesh, it doesn’t work, either. So that’s why I think TH2M process can’ t accept more than one type of elements . All the elements in the mesh have to be in the same dimension(all 2D or all 3D). Am I right? However, I have seen some benchmarks in OGS5 that permit the existence of two types of elements with different dimensions. Maybe some adaptations can be done in the future?
Hm, I have no idea about OGS5.
OGS6 distinguishes between bulk and boundary meshes. Therefore, bulk meshes should only contain bulk elements with the bulk dimension. In contrast, boundary meshes contain boundary elements with boundary dimensions. Coming from this concept, I don’t see any reason why one should have lower order elements in the bulk mesh. Perhaps you can elaborate a bit more on why you think it would make sense to include them into the bulk mesh.
The reason I want to insert line elements in my bulk mesh is to define a preset fracture for hydraulic fracturing. Usually, the initial aperture of preset fracture is about 0.01m, in which way I think the mesh will be too dense if I create the fracture as a 2D bulk elements. It will have a too thin distance in one direction. At the same time, I don’ t care the aperture change during the process, so I choose to use line elements instead of the 2D elements to define the preset fracture for a relatively coarser mesh.
By the way, if I define a 2D plane as a preset fracture in a 3D bulk mesh, I guess it can’ t work, either?
I do not have a detailed understanding of your model, but you had an additional mesh which was called preset-fracture.vtu
which was not part of your zip file and I thought that you have this additional mesh exactly for the purpose of setting a preset fracture. This is a ‘boundary’ mesh, and it can contain lower dimensional elements. So, you can have lower dimensional elements within your model domain, although it is not exactly sitting at a boundary, but you can’t have them in your bulk mesh.
Sorry for not containing my “preset-fracture.vtu” mesh in the zip file…my fault
Yes, I extract it from the center of my 2D-model-1,vtu using removeMeshElements
tool as a boundray mesh to set a pressure/temperature boundary condition or source term during injection. But my bulk mesh still have line elements(the extraction won’t change the original mesh file) so that I get the error.
Thanks a lot for your advice. I will continue to find a way to solve my problem.
You can remove them, e.g., with ParaView. Select the edges (via spread sheet view), invert the selection and apply the ExtractSelection filter.
Following your idea, first I extract line elements as “preset-fracture.vtu” in the “2D-model-1.vtu”. Then I remove the line in “2D-model-1.vtu” and save it as “2D-model-without-line.vtu”. Then I use identifySubdomains
tool to get bulk_node_ids
and bulk_element_ids
from “preset-fracture.vtu” to “2D-model-without-line.vtu”. However, the “preset-fracture.vtu” has bulk_node_ids
, but doesn’t have bulk_element_ids
. It just has number_bulk_elements. When I run ogs, the error is:
error: Element not found in the input range; Required mesh with name 'preset-fracture.vtu' not found.
I think the absence of bulk_element_ids
is the reason for my present error. But I don’t know how to get it. In the past, when I use identifySubdomains
tool for 2D subdomain mesh to 2D domain mesh, bulk_node_ids
and bulk_element_ids
can be both obtained.
mesh-new.zip (556.2 KB)
Now, you converted the elements to linear elements. Probably you mixed something up and that is the reason. bulk_element_ids
are not needed.
Yes, you are right, I checked my prj file and found some spelling mistakes. Now all the meshes can work well.
Thank you very much for solving my problem!
Best,
Yuhao