Null pointer error?
I'm trying to model a tank, that has a fluid input through one pipe, and a fluid output through another pipe. So to model this, I have created a cylinder for the tank, and attached two smaller cylinders to a face for the inlet/outlets. I where the cylinders touch the tank, I deleted the face of the inlet and outlet pipes, and made a hole in the surface where the inlet/outlets touch the tank.
I then generate the mesh, and that works fine. However, when I open it in fluent, I get the following error:
WARNING: cell 15 or thread 22 has NULL face pointer 3. Clearing partially read grid.
It also gives me (x,y,z) coordinates of the offending cell, so I looked at where it was, and it appears to be around my outlet. I have attached a picture of the area, and dotted the cell with a green point.
Anyone have an idea why this isn't working?
You can't just delete shells
A null face pointer error means you are missing boundaries... Usually I see it in 2D cases where the user has forgotten to create line elements around the perimeter, but in your case, it is a direct result of deleting shell elements. FLUENT and many other solvers need these shell elements to determine the boundaries of the fluid.
You can't just delete shells to join two fluids together. You must either merge the regions (or mesh them simultaneously) to get a conformal mesh or you must keep the shells between the volumes as an internal wall and apply your non-conformal boco to that..
To check for this problem in ICEM CFD, you can run the edit mesh checks, particularly the one for "uncovered faces".
I tried merging the surfaces for the bottom of the tank, and the outlet and it was not successful.
I tried the route that did not involve deleting the opening to the outlet, but I can't figure out which boundary condition to apply for Fluent to give it the "non-conformal" boco.
Also, the uncovered faces check in ICEM came up with nothing exceptional.
Circle within the square...
Merge Meshes is very robust, but has very specific requirements, specifically that the merged part be shared properly and that both sides share a perimeter. I have several other posts about that. Basically, you can't merge a square to a circle, you must first have the perimeter of the circle imprinted on the square so that your square's mesh can include that perimeter. Then you don't merge the square with the circle, you merge the circle inside the square with the circle. Do you know what I mean?
Ask your fluent question on the Fluent Forum. Just say you have two separately meshed volumes that you want to share a non-conformal interface... Perhaps there is even a tutorial about that. I think the trick is the same thing that would have made your merge meshes successful. The Overlap region needs to share a perimeter on both sides. In other words, you would apply the boco to the circle and the circle within the square, but not to the square.
The uncovered faces check should either come up with uncovered faces (which would have lead to null pointer errors) or it won't. There are not degrees of "exceptional". A single uncovered face will cause a problem in Fluent.
The I meshed the volume simultaneously as the geometry and the meshing was done in ICEM. The resulting mesh will not open in Fluent.
The uncovered faces check did not come up with any uncovered faces, and the mesh still results in the null pointer error, which confuses me.
Uncovered to the Max
OK, after looking at your model, I see the problem right away... You have no shells at all. Fluent (and all CFD solvers that I know of) need shells to bound the volume and for placing bocos.
If you generated this in ICEM CFD, just do it again and DON'T delete the shells.
If you want to fix it without regenerating, then you must go in and run your diagnostics. It will tell you that you have uncovered faces. These are the faces of volume elements with no neighbors. Choose Fix and it will ask you for a part to put some new shell elements in (I called mine "TEMP"). It then covers these faces in shells of that part. Next, it will run a diagnostic for missing internal faces... Do the same here (I called mine "TEMPINT")
Great, so now we have all our volumes covered and separated. But we want to get these shells back into the parts of the underlaying surfaces so we can setup appropriate bocos. Go to "Edit Mesh (tab) => Repair Mesh => Associate Mesh"; For select elements, use the second last icon in the tool bar to select all the shells in the model (or hotkey = 2). This function takes a ray from the centroid of each element to the nearest surface and changes the element part to match the surface part... It usually does a pretty good job, but is not as good as simply not deleting your shells ;) so you may need to visually check for stragglers. I do this by turning on one part at a time and checking the shells. I guess your surfaces for HEADER and SURFACE overlap because some elements ended up in one or the other. You should decide and manually put those into the part you want them in (even if they are all just wall and it doesn't really matter). I moved the elements within the circle into "Header". There was a similar Overlap between the Parts "FLUID" (strange name for a surface) and "TANKWALLS", so I moved the "FLUID" shells into "TANKWALLS". Last bu not least, The "TEMPINTERNAL" Part still had a few elements in it... So I put those into a subset and added some layers to see what was going on around those elements. As this pic showed, these turned out to be elements who should have been in the Header part, but whose centroid fell in the gap between the "HEADER" and the "BRANCHES"... I fixed the problem by moving those to the "HEADER"
Start over strategy
In the end, as often happens, by the time I am finished fixing your model, I am getting an idea of what you probably intended to do. You probably intended to have 1, 2 or 3 volumes (not 10). To join these volumes together and not have shells between them, use Material points. Put the same material point in each volume that you want joined (like "union" for mesh flood fill). If you do that, and then remesh, you could save yourself some hassle. You may also want density regions or at least a "width" setting on those NOZZEOUTLETs.
If I assume that you wanted just one FLUID, separated by shells for the pipe walls (HEADER and BRANCHES) but no walls where the fluid flows thru, then you just need one material point (FLUID) in each volume and a Thinwall Flag on this important thin wall parts so the shells are not removed during Flood fill. Or in my case, I just deleted the extra surfaces and removed the surfaces between volumes (except NOZZEL OUTLET). I also deleted all the unnecessary points (all of them were unnecessary since your model had no corners) and the seam curves, etc. The unnecessary points just constrain the model and reduce quality. The seam curves do similar and can actually cause problems if left after removing the points.
After Meshing with the Octree Mesher (this is what you seem to have used last time, you may want to remesh the tetra region with Delaunay with TGLib and the AF refinement. In which case you should use the Density regions instead of the width setting.
And I didn't have the hour or two it would take to Hexa mesh this, but that would really be your best solution for a model like this.
Anyway, I will send you some files...
|All times are GMT -4. The time now is 10:41.|