Skip to content

feat: add Euler characteristic for surfaces#251

Open
bd713 wants to merge 1 commit intomainfrom
feat/bd713/eulerSurface
Open

feat: add Euler characteristic for surfaces#251
bd713 wants to merge 1 commit intomainfrom
feat/bd713/eulerSurface

Conversation

@bd713
Copy link
Copy Markdown
Contributor

@bd713 bd713 commented May 6, 2026

This PR extends the Euler characteristic option to handle not only the bulk 3d mesh, but also surfaces.
Making sure surfaces such as faults are fully connected is mandatory before using GEOS SurfaceGenerator.

Usage

mesh-doctor euler -i mesh.vtu --mode solid
mesh-doctor euler -i mesh.vtu --mode surface
mesh-doctor euler -i mesh.vtu --mode surface --tagArray FaultMask          # screen every fault
mesh-doctor euler -i mesh.vtu --mode surface --tagArray FaultMask --tagValue 12  # one fault
mesh-doctor euler -i mesh.vtu --mode all     --tagArray FaultMask          # solid + all faults in one go

Example

Typical output screening both the 3d mesh and the faults, showing that fault 12 has a disconnected triangular element that must be treated.

mesh-doctor - RESULTS - ================================================================================
mesh-doctor - RESULTS - SOLID EULER CHARACTERISTIC
mesh-doctor - RESULTS - ================================================================================
mesh-doctor - RESULTS - 3D mesh topology (from 2,936,953 3D cells):
mesh-doctor - RESULTS -   V = 625,716
mesh-doctor - RESULTS -   E = 3,736,664
mesh-doctor - RESULTS -   F = 6,047,902
mesh-doctor - RESULTS -   C = 2,936,953
mesh-doctor - RESULTS -   chi (V - E + F - C) = 1
mesh-doctor - RESULTS -   3D connected components: 1
mesh-doctor - RESULTS -   Boundary edges        : 0
mesh-doctor - RESULTS -   Non-manifold edges    : 0
mesh-doctor - RESULTS -   STATUS: PERFECT (chi=1, single closed manifold ball)
mesh-doctor - RESULTS - ================================================================================
mesh-doctor - RESULTS - SURFACE EULER CHARACTERISTIC
mesh-doctor - RESULTS - ================================================================================
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 1 (2,327 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0     2,327    1,224    3,550    2,327     1    119    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 2 (1,062 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0     1,062      566    1,627    1,062     1     68    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 3 (708 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0       708      396    1,103      708     1     82    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 4 (1,886 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0     1,886      994    2,879    1,886     1    100    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 5 (950 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0       950      517    1,466      950     1     82    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 6 (662 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0       662      373    1,034      662     1     82    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 7 (13,328 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0    13,328    6,824   20,151   13,328     1    318    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 8 (1,363 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0     1,363      724    2,086    1,363     1     83    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 9 (1,130 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0     1,130      620    1,749    1,130     1    108    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 10 (1,635 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0     1,635      867    2,501    1,635     1     97    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 11 (1,849 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0     1,849      979    2,827    1,849     1    107    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 12 (15,895 cells, 2 component(s))
mesh-doctor - RESULTS -   GLOBAL: V=8,120  E=24,013  F=15,895  chi=2  ∂E=341  NM=0
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0    15,894    8,117   24,010   15,894     1    338    0  disk
mesh-doctor - RESULTS -       1         1        3        3        1     1      3    0  disk
mesh-doctor - RESULTS -   WARNING: 2 components — verify isolated cells
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - FaultMask = 13 (987 cells, 1 component(s))
mesh-doctor - RESULTS -    comp     cells        V        E        F   chi     ∂E   NM  interpretation
mesh-doctor - RESULTS -   ----------------------------------------------------------------------------
mesh-doctor - RESULTS -       0       987      538    1,524      987     1     87    0  disk
mesh-doctor - RESULTS -
mesh-doctor - RESULTS - Input cell breakdown:
mesh-doctor - RESULTS -   3D cells   : 2,936,953
mesh-doctor - RESULTS -   2D cells   : 322,386
mesh-doctor - RESULTS -   Other cells: 0
mesh-doctor - RESULTS - ================================================================================

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant