Debug: Database connection successful OpenFOAM (Page 5) / Science, Technology, and Astronomy / New Mars Forums

New Mars Forums

Official discussion forum of The Mars Society and MarsNews.com

You are not logged in.

Announcement

Announcement: This forum is accepting new registrations via email. Please see Recruiting Topic for additional information. Write newmarsmember[at_symbol]gmail.com.

#101 Today 09:26:50

tahanson43206
Moderator
Registered: 2018-04-27
Posts: 22,563

Re: OpenFOAM

ChatGPT5 and I have agreed to fall back to Version 122.  We are resuming work with the new Version 126.

The versions 123, 124 and 125 gave ChatGPT5 the opportunity to try to create a "fixit" patch to the existing program. Unfortunately, each attempt only made things worse.  In response, we developed a new utility program.  I led the initiative, and ChatGPT5 did the work, until the program appears to be working. Here is output that (we think) describes the new cell #13875 that sits on top of cell #0 of the old mesh. I have physical models of both cells, so I can rotate them and line them up with each other.  The points at the corners of the faces line up (to the extent I've checked them) so I think the physical model is probably correct.

python3 probe_facesV06.py --cell 13875

cell 13875: six faces (X-/X+/Y-/Y+/Z-/Z+)
Face X-  id=55816  kind=boundary
  patch=frontAndBackPlanes
  file=faces  line0=55835  line1=55836
  owner=13875  neighbour=None
  owned-by-cell=yes
  center=(-0.650, 0.192, 0.000)
  bbox.x=[-0.650, -0.650]
  bbox.y=[0.184, 0.200]
  bbox.z=[-0.063, 0.063]
  points:
    p28428: (-0.650, 0.184, 0.063)
    p28430: (-0.650, 0.200, 0.063)
    p28431: (-0.650, 0.200, -0.063)
    p28429: (-0.650, 0.184, -0.063)
Face X+  id=27460  kind=internal
  patch=internal
  file=faces  line0=27479  line1=27480
  owner=0  neighbour=13875
  owned-by-cell=no
  center=(-0.400, 0.192, 0.000)
  bbox.x=[-0.400, -0.400]
  bbox.y=[0.184, 0.200]
  bbox.z=[-0.063, 0.063]
  points:
    p14117: (-0.400, 0.184, 0.063)
    p13563: (-0.400, 0.200, 0.063)
    p27753: (-0.400, 0.200, -0.063)
    p28307: (-0.400, 0.184, -0.063)
Face Y-  id=55814  kind=boundary
  patch=frontAndBackPlanes
  file=faces  line0=55833  line1=55834
  owner=13875  neighbour=None
  owned-by-cell=yes
  center=(-0.525, 0.184, 0.000)
  bbox.x=[-0.650, -0.400]
  bbox.y=[0.184, 0.184]
  bbox.z=[-0.063, 0.063]
  points:
    p14117: (-0.400, 0.184, 0.063)
    p28307: (-0.400, 0.184, -0.063)
    p28429: (-0.650, 0.184, -0.063)
    p28428: (-0.650, 0.184, 0.063)
Face Y+  id=55815  kind=boundary
  patch=frontAndBackPlanes
  file=faces  line0=55834  line1=55835
  owner=13875  neighbour=None
  owned-by-cell=yes
  center=(-0.525, 0.200, 0.000)
  bbox.x=[-0.650, -0.400]
  bbox.y=[0.200, 0.200]
  bbox.z=[-0.063, 0.063]
  points:
    p28431: (-0.650, 0.200, -0.063)
    p28430: (-0.650, 0.200, 0.063)
    p13563: (-0.400, 0.200, 0.063)
    p27753: (-0.400, 0.200, -0.063)
Face Z-  id=55818  kind=boundary
  patch=frontAndBackPlanes
  file=faces  line0=55837  line1=55838
  owner=13875  neighbour=None
  owned-by-cell=yes
  center=(-0.525, 0.192, -0.063)
  bbox.x=[-0.650, -0.400]
  bbox.y=[0.184, 0.200]
  bbox.z=[-0.063, -0.063]
  points:
    p28429: (-0.650, 0.184, -0.063)
    p28431: (-0.650, 0.200, -0.063)
    p27753: (-0.400, 0.200, -0.063)
    p28307: (-0.400, 0.184, -0.063)
Face Z+  id=55817  kind=boundary
  patch=frontAndBackPlanes
  file=faces  line0=55836  line1=55837
  owner=13875  neighbour=None
  owned-by-cell=yes
  center=(-0.525, 0.192, 0.063)
  bbox.x=[-0.650, -0.400]
  bbox.y=[0.184, 0.200]
  bbox.z=[0.063, 0.063]
  points:
    p28430: (-0.650, 0.200, 0.063)
    p28428: (-0.650, 0.184, 0.063)
    p14117: (-0.400, 0.184, 0.063)
    p13563: (-0.400, 0.200, 0.063)

(th)

Offline

Like button can go here

#102 Today 15:30:31

tahanson43206
Moderator
Registered: 2018-04-27
Posts: 22,563

Re: OpenFOAM

This post is about a consultation with Google's Gemini about the five month attempt to add a new layer of 25 cells to an existing mesh.

What is startling about this conversation is that Gemini instantly suggested an existing tool designed to extrude an existing mesh.  I had (obviously) never heard of this tool and (equally obviously) neither had ChatGPT5.

ChatGPT and Gemini have been competing, and in the early going ChatGPT was far advanced.   However, in recent times, I am seeing Gemini as equal or possibly better.  On the other hand, I gave this problem to Gemini without any pre-existing baggage, so perhaps it was able to match the problem to the solution more easliy that might be the case for ChatGPT, which is bogged down by five months of history as we worked on this problem.

Conversation with Gemini

OpenFOAM mesh extension - hello again! A friend and i have been trying to add a layer of cells to an OpenFOAM mesh. The existing mesh passes checkMesh with no errors. In our effort to add faces to the existing mesh, we are passing muster for some aspects of the new mesh, but checkMesh is reporting problems and we are wondering if there might be some guidance on how to do this? We have been trying to puzzle out the procedure, and seem to have made some progress, because checkMesh reports seeing the new cells. The issue of greatest interest is how to handle the existing boundary layer. One team member things the correct procedure is to convert the existing boundary faces to internal, and add them to the neighbour file. In the course of doing this, we seem to be changing the id of the faces. I am wondering if this is correct? My friend's argument seems reasonable. If we are adding these faces to the neighbour file, then the id of those faces must be changed to match the position in the neighbour file instead of the current position in the owner file. It seems to me the owner, neighbour and faces file are being disrupted, which may be why checkMesh is reporting problems with our new cells. Are you aware of guidance that may exist for how to do this correctly?
***

Hello! Handling the mesh files directly to add a layer of cells is complex and prone to errors, as you've discovered. Your friend's idea about converting boundary faces to internal is a valid part of the process, but the entire procedure is intricate and requires careful management of multiple files. The face IDs, especially in the owner and neighbour files, are crucial and must be consistent. Manually editing these files can easily lead to a corrupted mesh.

The core issue is that when you add new cells, you are not just adding to the end of the lists; you are fundamentally changing the geometric and topological relationships between all the elements. The existing faces that were on a boundary must indeed be converted to internal faces. This means they must be assigned an owner and a neighbour cell. The original boundary patch entries for these faces must also be removed.

A much safer and more reliable approach than manually editing the mesh files is to use OpenFOAM's built-in utilities. The most common tool for this type of operation is extrudeMesh. This utility is specifically designed to extrude an existing 2D surface mesh into a 3D volume mesh or to add layers of cells to an existing 3D mesh.

Using extrudeMesh
Prepare the Surface: Identify the faces on your existing mesh where you want to add the new cells. This surface, or patch, will be the 'source' for the extrusion.

Create the extrudeMeshDict: You'll need to create a dictionary file, extrudeMeshDict, in the system directory of your case. This file specifies the patch to extrude, the number of layers, and the extrusion direction and distance.

Run the Utility: Execute extrudeMesh from the command line within your case directory. The utility will handle the complex mesh manipulation for you, including:

Creating new cell and face entries.

Updating the owner and neighbour files for the newly created internal faces.

Correctly re-indexing all affected faces and cells.

Handling the new boundary patches that are created on the 'other' side of the new layers.

Using extrudeMesh avoids the manual errors you're encountering, such as incorrect face IDs or disrupted topological data. It's the standard, supported method for this task within the OpenFOAM community.

Why Manual Editing Fails

Your team is correct in identifying that the owner, neighbour, and faces files are the source of the issues. The face IDs are not arbitrary; they correspond to the line number in the faces file. The owner file's entries are a direct lookup for the owner cell of each face, and the neighbour file does the same for the neighbour cell (for internal faces only).

When you convert a boundary face to an internal face, you are correct that it needs to be added to the neighbour file. However, this is just one piece of the puzzle. You also need to:

Correctly append the new cells to the end of the points, faces, and cells lists.

Update all face-to-cell references in the owner and neighbour files to account for the new cells.

Ensure that the new face IDs and their corresponding owner/neighbour relationships are all in perfect sync.

This is an extremely tedious and error-prone process. The change in a single ID can lead to a cascade of errors, which is likely why checkMesh is reporting problems. checkMesh is highly sensitive to the topological consistency of the mesh, and even a minor mismatch will be flagged.

I strongly recommend using extrudeMesh as it is designed for exactly this purpose and will ensure the topological integrity of your mesh.
***

Thank you for this inspiring suggestion! Somehow we've never heard of this tool, but it sounds perfect for our application. We've spent 5 months building a python script to perform all these operations, and it is discouraging to have checkMesh complain when we finally seem close to the goal line. That said, if there is an existing tool that has been debugged by other generous volunteers, we will accept the gift with appreciation!
***

That's a very common experience in the OpenFOAM community! It's great that you're embracing the challenge, but it's even better when you can leverage a tool that's already built for the task. It's a testament to the community's collaborative spirit.

The Challenge of Manual Mesh Manipulation

Your experience with your Python script highlights a key challenge with OpenFOAM mesh files: they're not simple text files you can just edit. They represent a complex, interconnected topology. The owner and neighbour files, in particular, are structured to be extremely efficient for the solver. The ID of a face in the faces file must exactly match its position in the owner and neighbour files. When you manually insert or move things, it's very easy for a mismatch to occur, even by one number. Your team's intuition about the IDs being disrupted is exactly right. The checkMesh utility is a strict enforcer of this topological integrity, and it's doing its job by flagging these inconsistencies.

Why extrudeMesh is Your Best Friend

The extrudeMesh utility is a powerful tool because it understands all these internal relationships. Instead of you writing a script to manually modify the mesh files, extrudeMesh reads the existing files, understands the topology of the selected boundary patch, and then mathematically and topologically creates the new layers. It handles all the complex tasks:

Creates New Points and Faces: It generates the coordinates for the new points and defines the new faces connecting them.

Updates Connectivity: This is the most critical part. It correctly assigns owner and neighbour cells for the new internal faces and updates the existing boundary faces to become internal.

Maintains Consistency: It ensures that every new face has a corresponding entry in the owner and neighbour files, and that all IDs are correctly indexed.

Think of it this way: your Python script is like building a car by manually welding every single piece. extrudeMesh, on the other hand, is like using an automated assembly line that has been perfected over many iterations to build the car with precision every time.

By switching to extrudeMesh, you're not abandoning your work; you're just using a more efficient and reliable tool to get past the finish line. ?
***

Again, thank you ** very ** much for this helpful advice! In our struggle with the challenge of trying to extrude the mesh, we have learned a great deal about the existing mesh, about OpenFOAM procedures and tools, and (of course) a great deal about Python. I will report your advice to our team immediately.
***

I'm glad I could help! That's the perfect attitude to have. The knowledge and skills you've gained from building the Python script will be incredibly valuable for future projects, even if you don't use the script itself for this specific task. Understanding the internal structure of the mesh files is a key part of becoming an advanced OpenFOAM user.

Your team will now be able to move forward more efficiently and focus on the physics of your simulation, which is the ultimate goal. Good luck with the project!

(th)

Offline

Like button can go here

Board footer

Powered by FluxBB