JP | EN | ZH
TOPError DatabaseMesh Errors

Mesh Error Resolution — FEA & CFD

Mesh quality problems silently corrupt your results or crash your solver before you even finish preprocessing. This guide covers every major mesh error type across FEA and CFD: what each metric means, how to detect bad elements, and exactly how to fix them — from negative Jacobians to OpenFOAM non-orthogonality to LS-DYNA hourglassing.

Element Quality Metrics — Reference Table

Before diving into specific errors, here's a reference for the key quality metrics used by the major solvers. Understanding what each metric measures helps you interpret warnings correctly.

Metric Definition Good Warning Critical
Aspect Ratio Ratio of longest to shortest edge (or equivalent for quads/hexes) < 5 5 – 20 > 20
Jacobian Ratio (FEA) Max/min Jacobian determinant at integration points — measures element distortion from ideal shape < 3 3 – 10 > 30
Warpage Angle For quad elements: deviation of nodes from coplanarity (0° = perfect quad, 90° = complete fold) < 5° 5° – 15° > 30°
Skewness (CFD) Deviation of cell from optimal shape: 0 = perfect, 1 = completely degenerate < 0.5 0.5 – 0.85 > 0.85
Non-Orthogonality (CFD) Angle between the cell-center vector and the face normal. Affects discretization accuracy of gradient terms. < 40° 40° – 70° > 70°
Parallel Deviation For hex elements: deviation of opposite face normals from parallelism. Large values indicate twisted cells. < 10° 10° – 45° > 60°

Part 1 — Negative Jacobian Elements

Warning: X elements have negative Jacobian
Abaqus / ANSYS / Nastran Preprocessing / Nonlinear Severity: Fatal if not fixed

What This Means

The Jacobian matrix \(\mathbf{J}\) maps the element's parent (isoparametric) coordinate system to the physical coordinate system. Its determinant \(\det(\mathbf{J})\) represents the local volume ratio. When \(\det(\mathbf{J}) < 0\), the element is inverted — physically inside-out. The solver cannot compute meaningful stiffness or mass matrices for inverted elements.

$$\mathbf{J} = \begin{bmatrix} \frac{\partial x}{\partial \xi} & \frac{\partial y}{\partial \xi} & \frac{\partial z}{\partial \xi} \\ \frac{\partial x}{\partial \eta} & \frac{\partial y}{\partial \eta} & \frac{\partial z}{\partial \eta} \\ \frac{\partial x}{\partial \zeta} & \frac{\partial y}{\partial \zeta} & \frac{\partial z}{\partial \zeta} \end{bmatrix}, \quad \det(\mathbf{J}) > 0 \text{ required}$$

How to Detect

Abaqus: Mesh module → Verify Mesh → Check Jacobians ANSYS: Mesh → Show Mesh Metrics → Jacobian Ratio HyperMesh: Quality Index → Jacobian LS-PrePost: Mesh → Check Quality → Jacobian

Fix — Step by Step

1
Identify all negative-Jacobian elements using the mesh verification tool. Export the element list and visualize them in 3D to understand the pattern — are they clustered at a geometric feature, or randomly distributed?
2
For solid elements: the inversion is usually caused by a midside node (quadratic element) that has been placed outside the element boundary. Check midside node positions, especially at curved surfaces. The midside node must stay within the straight-edge element boundary (never past the 1/4–3/4 span positions).
3
For hexahedral elements generated from surface extrusion: inversion occurs when the extrusion direction changes sharply (concave features). Use swept mesh with careful source/target surface selection, or switch to tetrahedral meshing for complex geometry and rely on hexes only for simple prismatic regions.
4
For hex meshes: run a mesh smoothing operation (Laplacian or optimization-based). In HyperMesh: 2D/3D → Smooth → Optimization-based with Jacobian criteria. This repositions nodes to maximize the minimum Jacobian without changing element connectivity.
5
If local fixes fail, remesh the affected region. Define a mesh volume around the problematic elements and regenerate with a smaller element size — finer elements are less prone to inversion in regions of high geometric curvature.
🧑‍🎓

I have 12 negative Jacobian elements in my ANSYS model, all in a hexahedral mesh around a fillet radius. The fillet is quite tight — about 2mm radius, and my element size is 1.5mm. Could the element size be too large relative to the curvature?

🎓

Exactly right — that's the cause. With quadratic hex elements (SOLID186 in ANSYS), the midside nodes are automatically projected onto the curved fillet surface during meshing. When the element is 1.5mm and the fillet radius is 2mm, the midside node projection can place it so far from the element edge midpoint that it creates a negative Jacobian at the element corner integration points.

The practical rule of thumb: for hexahedral elements on curved surfaces, you want at least 3–4 elements spanning the curvature arc to avoid this problem. For your 2mm radius fillet, try reducing element size to 0.5–0.6mm in that region using a local mesh sizing control.

Alternatively, switch to tetrahedral meshing for this part. Tet10 elements (quadratic tetrahedra) handle tight curvature much better than hex20 because the meshing algorithm is less constrained in how it can place elements around curved geometry. For stress analysis around fillets, Tet10 with a fine enough mesh is perfectly accurate and much easier to generate cleanly.


Part 2 — Free Edge / Free Surface Detection

Warning: X free edges detected at interior locations / Unattached nodes found
Abaqus / ANSYS / HyperMesh Mesh Connectivity Check Severity: Serious — may silently corrupt results

What This Means

In a solid or shell mesh, every interior edge (or face for 3D) should be shared by exactly two elements. A free edge is an edge belonging to only one element at what should be an interior location — indicating an unintended gap or crack in the mesh. Free edges at the intended external boundary are normal; free edges inside the model indicate a connectivity problem.

How to Detect

Abaqus: Mesh → Verify → Free Edges (shell) / Free Surfaces (solid) ANSYS: Mesh → Show → Free Faces HyperMesh: 2D → Edges → Display free edges

Root Causes

  • Import from CAD with small gap tolerances — adjacent surfaces meshed independently with non-matching nodes at the shared edge
  • Boolean operation in CAD failed, leaving a sliver face that wasn't recognized as shared
  • Multiple mesh regions merged by proximity tolerance but with some nodes slightly outside tolerance
  • Manually deleted elements leaving dangling nodes and edges

Fix — Step by Step

1
Visualize free edges — they typically appear as red highlighted edges or faces in the mesh quality display. Note whether they're isolated (single problem location) or extensive (systemic connectivity failure).
2
In HyperMesh/Hypermesh: use Tool → Check Elems → Free Edges, then Tool → Equivalence → Nodes with an appropriate tolerance (typically 0.01–0.1 mm depending on model scale). This merges nodes within tolerance, closing gaps.
3
In ANSYS Meshing: use Mesh → Connections → Contact to check if adjacent bodies are bonded. Free faces at body interfaces indicate the bodies aren't connected — add a Bonded contact pair or use Shared Topology in SpaceClaim to merge geometry before meshing.
4
For CAD import issues: go back to the CAD geometry and heal the surface. In SpaceClaim: Repair → Missing Faces and Repair → Extra Edges. Import with Shared Topology enabled so coincident surfaces are meshed as a single body with shared nodes.
5
After applying fixes, re-run the free edge check to confirm zero interior free edges before submitting for analysis.
🧑‍🎓

My Abaqus analysis converges and gives results, but the stress in one region seems way too high — like 10x higher than expected. Could free edges be the cause even if the solver doesn't crash?

🎓

This is one of the most dangerous types of mesh errors precisely because it doesn't crash the solver — it just gives you wrong results that might look plausible if you don't know what to expect. Yes, a free edge in the interior of a structural model is essentially a crack. Abaqus has no way to transfer stress across a free edge — the two elements on either side are mechanically disconnected even though they look connected visually.

What you'll see: the elements on one side of the free edge experience the full applied load with no structural support from the other side. This creates enormous artificial stress concentrations at the free edge tip — sometimes 10× or 100× higher than the true stress. The elements on the other side are essentially floating and will show very low or zero stress.

This is why you should always run the free edge check before submitting any analysis — not just when you see suspicious results. A systematic mesh quality check takes 30 seconds and can save days of re-analysis. The Abaqus warning "N free surfaces detected" in the preprocessing output is easy to overlook but critical to address.


Part 3 — OpenFOAM checkMesh Failures

checkMesh: FAILED — Max non-orthogonality: 83.2 deg (threshold: 70)
OpenFOAM (all solvers) CFD Mesh Quality Severity: Causes divergence or inaccuracy

What This Means

Non-orthogonality is the angle \(\phi\) between the vector connecting two adjacent cell centers (\(\mathbf{d}\)) and the face normal (\(\hat{\mathbf{n}}\)): $$\phi = \arccos\left(\frac{\mathbf{d} \cdot \hat{\mathbf{n}}}{|\mathbf{d}|}\right)$$ When \(\phi\) is large, the explicit surface gradient correction (non-orthogonal correction) used in the Gauss divergence theorem discretization becomes large relative to the implicit term. At \(\phi > 70°\), the correction is larger than the implicit term — the discretization becomes unstable without corrector iterations. At \(\phi > 85°\), no amount of correctors can stabilize it.

Typical checkMesh Output to Interpret

Mesh non-orthogonality Max: 83.2 average: 12.5
**** WARNING: 234 highly non-orthogonal faces (out of 1234567)
Maximum skewness = 0.92 OK.
Minimum cell volumes = 2.1e-12 OK.
**FAILED 1 mesh checks**

How to Detect Problem Cells

Run: checkMesh -allGeometry -allTopology Visualize in ParaView: cellFields → nonOrth / skewness

Fix — Step by Step

1
Find where the bad cells are: use the OpenFOAM writeCellCentres utility or the checkMesh -writeAllFields option to write non-orthogonality as a field. Visualize in ParaView to locate the regions above 70°.
2
If the bad cells are in the snappyHexMesh boundary layer: review the addLayersControls section of snappyHexMeshDict. Reduce expansionRatio from 1.3 to 1.1–1.15. High expansion ratios create highly compressed cells at the wall that become non-orthogonal. Also reduce nSurfaceLayers if needed.
3
For blockMesh-based meshes with bad non-orthogonality: review your block grading. If you're using a large grading ratio (e.g., 100:1) in a curved region, the transition between fine and coarse cells creates non-orthogonal faces. Apply the grading gradually (multiple blocks with increasing grading ratio).
4
As a solver-side mitigation (not a permanent fix): increase nNonOrthogonalCorrectors to 3–5 in fvSolution. This applies multiple pressure-correction sweeps per outer iteration, partially compensating for non-orthogonality. Required when max non-orthogonality is in the 70–85° range.
5
For the worst case (>85°): the mesh must be regenerated. No solver settings can compensate for severe non-orthogonality. Identify the CAD features causing the problem (re-entrant angles, T-junctions, thin gaps) and pre-process the geometry to remove them before remeshing.
🧑‍🎓

My snappyHexMesh ran successfully and checkMesh shows max non-orthogonality of 65°, average 8°. That's below 70°, so it passed. But my simpleFoam solution still diverges on pressure. Could 65° still be a problem?

🎓

65° is technically "acceptable" by checkMesh standards, but it's still quite high for practical solver stability — especially with turbulence models. The 70° threshold is not a sharp cliff; it's a rough guideline. At 65°, you should use at least 2 non-orthogonal correctors, and 3 is safer.

But the fact that the average is only 8° tells you something important: the 65° cells are isolated problem spots — probably a few cells at a re-entrant corner or a sharp geometric feature. These isolated bad cells can trigger localized pressure divergence that propagates throughout the domain.

Find those cells and look at the geometry. Are they at a sharp edge in your STL geometry? If so, you can often fix them by applying surface feature edge refinement in snappyHexMesh: add the feature edge to the features list in snappyHexMeshDict with a refinement level of 2–3. This puts finer hex cells around the sharp feature, which resolves the non-orthogonality. Also check: does your STL have any self-intersections or near-degenerate triangles? These cause snappyHexMesh to generate confused cell layers that produce non-orthogonal faces.


Part 4 — LS-DYNA Hourglassing in Under-Integrated Elements

Warning: Hourglass energy ratio exceeds 10% for part P at time T
LS-DYNA (Explicit) Reduced-Integration Elements Severity: Results invalid if hourglass energy is excessive

What This Means

Single-point (reduced) integration elements — the default in LS-DYNA for efficiency — use only one integration point at the element center to compute stiffness. This prevents the stiffness from resisting certain zero-energy deformation modes called hourglass modes — deformation patterns that produce no work at the integration point and therefore experience no restoring force. Left unchecked, these modes grow without bound and corrupt the solution.

The hourglass energy ratio is:

$$\text{Hourglass ratio} = \frac{E_{hourglass}}{E_{internal}} \times 100\% \quad \text{(should be} < 5\%\text{)}$$

How to Detect

Plot GLSTAT: HGLASS vs IE (total energy ratio) LS-PrePost: Plot fringe → IEGLOS (element hourglass energy density)

Root Causes

  • Uniform pressure loading (bending loads in a single-layer hex mesh are particularly bad)
  • Mesh too coarse to resolve bending — using one element through thickness in a bending-dominated region
  • Soft materials (foam, rubber) with low stiffness — hourglass damping is too small relative to material response
  • Default hourglass control coefficient too small (default IHQ=1, QH=0.1 is often insufficient)

Fix — Step by Step

1
Check the hourglass energy for each part individually using *DATABASE_MATSUM. Identify which part(s) are contributing most to hourglass energy — don't just look at the global total.
2
For structural parts dominated by bending (beams, panels, ribs): use at least 3 elements through the bending thickness direction. Single-element through-thickness + reduced integration is the classic recipe for hourglass problems in bending.
3
Change hourglass control formulation. In *SECTION_SOLID (for solids) or *SECTION_SHELL (for shells):
  • Type 4 (Flanagan-Belytschko, stiffness form): good for metal forming
  • Type 5 (Flanagan-Belytschko, viscous form): better for high-velocity impact
  • Type 6 (Belytschko-Bindeman, fully integrated assumed strain): best quality, more expensive
  • ELFORM=2 (fully integrated hex): eliminates hourglass completely, 8× more expensive per element
4
For foam and rubber: increase the hourglass coefficient QH from the default 0.1 to 0.5 or higher. Soft materials need higher hourglass damping because the physical stiffness is so low that the default damping provides negligible resistance to spurious modes.
5
As a verification step: rerun the critical portion of the simulation with fully integrated elements (ELFORM=2) on the problematic part only. Compare results — if they match the reduced-integration solution, hourglass was controlled adequately. If they differ significantly, your original results are invalid and you need mesh refinement or a better hourglass control.
🧑‍🎓

I switched to fully integrated elements (ELFORM=2) to eliminate hourglass but now my simulation runs 10x slower. Is there a middle ground that gives good accuracy without the full cost penalty?

🎓

Yes — this is exactly the trade-off that LS-DYNA engineers deal with all the time. The recommended middle ground is ELFORM=−1 or ELFORM=−2 in recent LS-DYNA versions, which use the Assumed Strain formulation. These are single-point elements with enhanced strain modes that provide much better bending accuracy than standard Type 1 without the 8× cost of full integration. Typical cost is 1.5–2× a standard ELFORM=1 element.

Another practical approach: use fully integrated elements (ELFORM=2) only in the regions you care about most — the plastic deformation zones, the areas of high stress, the crush initiators — and use reduced integration elsewhere. In LS-DYNA this is done by assigning different *SECTION_SOLID cards to different parts. This targeted approach gives you accuracy where it matters without paying the full cost penalty everywhere.

For shell elements specifically, ELFORM=16 (fully integrated quadratic shell) gives excellent accuracy for bending and springback in stamping at only about 1.3× the cost of the standard Type 2 shell. Most automotive OEM crash simulations now use this for structural panels.


Part 5 — Abaqus: Elements Have Missing Property Definitions

Error: Elements have missing property definitions (section assignments)
Abaqus/Standard & Explicit Preprocessing / Setup Severity: Fatal — solver will not start

What This Means

One or more elements in the model have no section (property) assignment. In Abaqus, every element must belong to an element set that has a section assignment defining the element type, material, and geometry (thickness for shells, cross-section for beams, etc.). Without this, Abaqus cannot assemble the stiffness matrix for those elements.

Root Causes

  • Elements created by mesh refinement, partition, or import that fall outside any existing element set
  • Section assignment made to a named element set that was later deleted or renamed
  • Parts imported from external mesh files (Nastran, IGES mesh) without automatic section creation
  • Assembly operations that created new element regions not covered by existing section assignments
  • Orphan mesh parts that were never assigned to the assembly geometry

How to Detect

Abaqus/CAE: Mesh module → Mesh → Verify → Check for missing sections In .inp file: search for elements without a *ELSET reference in any *SOLID SECTION/*SHELL SECTION Property module → Sections → Show element assignment by color

Fix — Step by Step

1
In the Abaqus/CAE Property module, use the Section Assignment Manager to identify which elements have no section. Unassigned elements appear as gray or uncolored in the color-coded view.
2
Create a new section assignment for the unassigned elements. If they should have the same material as nearby elements, select them and apply the same section definition. If the element type is different (e.g., shell vs. solid), you'll need a separate section.
3
For imported meshes (.inp files): check that the ELSET keyword at the top of each element block matches the ELSET referenced in the section definition. Section assignments are matched by element set name — a mismatch (case-sensitive in some versions) leaves elements without property.
4
For partitioned parts: when you create a partition (to create a local mesh region or refine the mesh), the partition may create new element types or mesh regions. Re-run the section assignment step in the Property module to capture these new regions.
5
Search the .inp file directly: grep -c "SOLID SECTION\|SHELL SECTION\|BEAM SECTION" job.inp counts section definitions; grep -c "^\*ELEMENT" job.inp counts element blocks. Every element block should be captured by a section definition. If counts don't match, find the gap manually.
🧑‍🎓

I assigned sections to all my parts in Abaqus/CAE but I still get "Elements have missing property definitions" when I submit the job. How can elements be missing sections if I assigned them in CAE?

🎓

This happens most often with orphan mesh parts and virtual topology. If you imported a mesh from an external file (Nastran, IGES, or a previous Abaqus result) into the Assembly as an Orphan Mesh Part, section assignments work differently — you must assign sections directly to element sets in the Mesh module using Mesh → Create Mesh Part and then assign sections in the Property module, not through the Part Manager.

Another common cause: you made mesh changes after assigning sections. If you re-meshed a part or added mesh refinement after completing the property assignment step, the new elements are not included in the element sets that were used for the section assignment. The section was valid when you made it, but the mesh changed out from under it.

The quickest diagnostic: write the input file from CAE (Job → Write Input), then open it in a text editor and search for all *ELEMENT blocks. Each block should have an ELSET= parameter. Then search for *SOLID SECTION / *SHELL SECTION and check that every ELSET referenced in the element blocks appears in a section definition. Any ELSET that appears in *ELEMENT but not in a section definition is your problem.

🧑‍🎓

Found it — I had an element set called "ELEM_SOLID" in the element definition but the section was assigned to "Elem_Solid" (different capitalization). Is Abaqus case-sensitive for element set names?

🎓

Yes — Abaqus is case-insensitive for keywords (like *SOLID SECTION), but case-sensitive for set names and part instance names in the .inp file. "ELEM_SOLID" and "Elem_Solid" are treated as two different element sets. This is a classic trap, especially when mixing CAE-generated input with manually edited .inp files, or when importing meshes that were generated with different naming conventions.

The fix is easy now that you've found it — just make the names match exactly, uppercase throughout is the safest convention since Abaqus internally converts CAE-generated names to uppercase. Going forward, when editing .inp files by hand, always use all-uppercase for set names to avoid this kind of mismatch.


Part 6 — Warpage and Parallel Deviation in Shell Meshes

🧑‍🎓

My shell mesh for a curved sheet metal part has lots of high warpage angle warnings — some elements showing 25–30°. The preprocessor says this is acceptable, but my colleague says it will hurt accuracy. Who's right?

🎓

Your colleague is right for anything above about 15° warpage. Here's why: a warped quad element is a non-planar quadrilateral. When the mesh quality tool "accepts" 25–30°, it means the solver won't crash — but the accuracy of the bending stiffness matrix is compromised because the flat-plate assumption built into most shell element formulations (like S4R or SHELL181) requires the element to be planar or nearly so.

For in-plane membrane behavior, warpage has little effect. But for bending — which is the primary behavior of sheet metal parts under load — a 25° warped quad can have bending stiffness errors of 15–25%. For a fatigue or springback analysis, that's significant.

The fix: on curved surfaces, use more elements to reduce the faceting error. A good target is that adjacent element normals differ by less than 10°. For a surface with radius R, the element size L should satisfy L/R < 0.17 (approximately). If your part has a 50mm radius and your elements are 10mm, the faceting angle per element is about 11° — right at the edge of acceptable. Going to 6mm elements will bring you well under 10°.

For unavoidable warped regions (compound curvature, double-curved surfaces), consider using triangular elements (S3R in Abaqus) in those zones — triangular shell elements are inherently planar by definition (three points define a plane) and have zero warpage.


Articles in This Section

Author: NovaSolver Contributors (Anonymous Engineers & AI)