Pre-processing filters

The pre_processing module of geos-processing package contains filters to pre-process meshes for GEOS simulation.

CellTypeCounterEnhanced filter

CellTypeCounterEnhanced module is a vtk filter that computes cell type counts.

Filter input is a vtkUnstructuredGrid, output is a vtkTable

To use the filter:

from geos.processing.pre_processing.CellTypeCounterEnhanced import CellTypeCounterEnhanced

# Filter inputs
inputMesh: vtkUnstructuredGrid
speHandler: bool  # defaults to False

# Instantiate the filter
cellTypeCounterEnhancedFilter: CellTypeCounterEnhanced = CellTypeCounterEnhanced( inputMesh, speHandler )

# Set the handler of yours (only if speHandler is True).
yourHandler: logging.Handler
cellTypeCounterEnhancedFilter.setLoggerHandler( yourHandler )

# Do calculations
try:
    cellTypeCounterEnhancedFilter.applyFilter()
except TypeError as e:
    cellTypeCounterEnhancedFilter.logger.error( f"The filter { cellTypeCounterEnhancedFilter.logger.name } failed due to: { e }" )
except Exception as e:
    mess: str = f"The filter { cellTypeCounterEnhancedFilter.logger.name } failed due to: { e }"
    cellTypeCounterEnhancedFilter.logger.critical( mess, exc_info=True )

# Get result
counts: CellTypeCounts = cellTypeCounterEnhancedFilter.GetCellTypeCountsObject()
outputTable: vtkTable = cellTypeCounterEnhancedFilter.getOutput()
class geos.processing.pre_processing.CellTypeCounterEnhanced.CellTypeCounterEnhanced(inputMesh, speHandler=False)[source]

Bases: object

CellTypeCounterEnhanced filter computes mesh stats.

Parameters:
  • inputMesh (vtkUnstructuredGrid) – The input mesh.

  • speHandler (bool, optional) – True to use a specific handler, False to use the internal handler. Defaults to False.

GetCellTypeCountsObject()[source]

Get CellTypeCounts object.

Returns:

CellTypeCounts object.

Return type:

CellTypeCounts

applyFilter()[source]

Apply CellTypeCounterEnhanced filter.

Raises:

TypeError – Errors with the type of the cells.

getOutput()[source]

Get the computed vtkTable.

setLoggerHandler(handler)[source]

Set a specific handler for the filter logger.

In this filter 4 log levels are use, .info, .error, .warning and .critical, be sure to have at least the same 4 levels.

Parameters:

handler (logging.Handler) – The handler to add.

MeshQualityEnhanced filter

MeshQualityEnhanced module is a vtk filter that computes mesh quality stats.

Mesh quality stats include those from vtkMeshQuality as well as .

Filter input is a vtkUnstructuredGrid.

To use the filter:

from geos.processing.pre_processing.MeshQualityEnhanced import MeshQualityEnhanced

# Filter inputs
inputMesh: vtkUnstructuredGrid
speHandler: bool # optional

# Instantiate the filter
meshQualityEnhancedFilter: MeshQualityEnhanced = MeshQualityEnhanced( inputMesh, speHandler )

# Use your own handler (if speHandler is True)
yourHandler: logging.Handler
meshQualityEnhancedFilter.setLoggerHandler( yourHandler )

# Set metrics to use
meshQualityEnhancedFilter.SetTriangleMetrics(triangleQualityMetrics)
meshQualityEnhancedFilter.SetQuadMetrics(quadQualityMetrics)
meshQualityEnhancedFilter.SetTetraMetrics(tetraQualityMetrics)
meshQualityEnhancedFilter.SetPyramidMetrics(pyramidQualityMetrics)
meshQualityEnhancedFilter.SetWedgeMetrics(wedgeQualityMetrics)
meshQualityEnhancedFilter.SetHexaMetrics(hexaQualityMetrics)
meshQualityEnhancedFilter.SetOtherMeshQualityMetrics(otherQualityMetrics)

# Do calculations
try:
    meshQualityEnhancedFilter.applyFilter()
except ( ValueError, IndexError, TypeError, AttributeError ) as e:
    meshQualityEnhancedFilter.logger.error( f"The filter { meshQualityEnhancedFilter.logger.name } failed due to: { e }" )
except Exception as e:
    mess: str = f"The filter { meshQualityEnhancedFilter.logger.name } failed due to: { e }"
    meshQualityEnhancedFilter.logger.critical( mess, exc_info=True )

# Get output mesh quality report
outputMesh: vtkUnstructuredGrid = meshQualityEnhancedFilter.getOutput()
outputStats: QualityMetricSummary = meshQualityEnhancedFilter.GetQualityMetricSummary()
class geos.processing.pre_processing.MeshQualityEnhanced.MeshQualityEnhanced(inputMesh, speHandler=False)[source]

Bases: object

Enhanced vtkMeshQuality filter.

Parameters:
  • inputMesh (vtkUnstructuredGrid) – Input mesh

  • speHandler (bool, optional) – True to use a specific handler, False to use the internal handler. Defaults to False.

GetQualityMetricSummary()[source]

Get QualityMetricSummary object.

Returns:

QualityMetricSummary object

Return type:

QualityMetricSummary

SetCellQualityMetrics(triangleMetrics=None, quadMetrics=None, tetraMetrics=None, pyramidMetrics=None, wedgeMetrics=None, hexaMetrics=None)[source]

Set all quality metrics to compute.

Parameters:
  • triangleMetrics (Iterable[int]) –

    Triangle metrics to compute.

    Defaults to [vtkMeshQuality.QualityMeasureTypes.NONE,].

  • quadMetrics (Iterable[int]) –

    Quad metrics to compute.

    Defaults to [vtkMeshQuality.QualityMeasureTypes.NONE,].

  • tetraMetrics (Iterable[int]) –

    Tetrahedron metrics to compute.

    Defaults to [vtkMeshQuality.QualityMeasureTypes.NONE,].

  • pyramidMetrics (Iterable[int]) –

    Pyramid metrics to compute.

    Defaults to [vtkMeshQuality.QualityMeasureTypes.NONE,].

  • wedgeMetrics (Iterable[int]) –

    Wedge metrics to compute.

    Defaults to [vtkMeshQuality.QualityMeasureTypes.NONE,].

  • hexaMetrics (Iterable[int]) –

    Hexahedron metrics to compute.

    Defaults to [vtkMeshQuality.QualityMeasureTypes.NONE,].

SetHexaMetrics(metrics=None)[source]

Set triangle quality metrics to compute.

Parameters:

metrics (Iterable[int]) – Metrics to compute

SetOtherMeshQualityMetrics(metrics)[source]

Set additional metrics unrelated to cell types.

Parameters:

metrics (set[QualityMetricOtherEnum]) – Set of QualityMetricOtherEnum

SetPyramidMetrics(metrics=None)[source]

Set triangle quality metrics to compute.

Parameters:

metrics (Iterable[int]) – Metrics to compute

SetQuadMetrics(metrics=None)[source]

Set triangle quality metrics to compute.

Parameters:

metrics (Iterable[int]) – Metrics to compute

SetTetraMetrics(metrics=None)[source]

Set triangle quality metrics to compute.

Parameters:

metrics (Iterable[int]) – Metrics to compute

SetTriangleMetrics(metrics)[source]

Set triangle quality metrics to compute.

Parameters:

metrics (Iterable[int]) – Metrics to compute

SetWedgeMetrics(metrics=None)[source]

Set triangle quality metrics to compute.

Parameters:

metrics (Iterable[int]) – Metrics to compute

applyFilter()[source]

Apply MeshQualityEnhanced filter.

getComputedMetricsFromCellType(cellType)[source]

Get the set of metrics computed for input cell type.

Parameters:

cellType (int) – Cell type index

Returns:

Set of computed quality metrics

Return type:

Optional[set[int]]

getOutput()[source]

Get the mesh computed with the stats.

setLoggerHandler(handler)[source]

Set a specific handler for the filter logger.

In this filter 4 log levels are use, .info, .error, .warning and .critical, be sure to have at least the same 4 levels.

Parameters:

handler (logging.Handler) – The handler to add.

geos.processing.pre_processing.MeshQualityEnhanced.QUALITY_ARRAY_NAME = 'Quality'

name of output quality array from vtkMeshQuality filter

geos.processing.pre_processing.MeshQualityEnhanced.getQualityMetricArrayName(metric)[source]

Get the name of the array from quality metric index.

Parameters:

metric (int) – Metric index

Returns:

Name of output array

Return type:

str

TetQualityAnalysis filter

TetQualityAnalysis module is a filter that performs an analysis of tetrahedras quality of one or several meshes and generates a plot as summary. Metrics computed include aspect ratio, shape quality, volume, min and max edges, edge ratio, min and max dihedral angles, quality score.

The meshes are compared based on their median quality score and the change from the best one is evaluated for these metrics.

Filter input should be vtkUnstructuredGrid.

To use the filter:

from geos.processing.pre_processing.TetQualityAnalysis import TetQualityAnalysis

# Filter inputs
inputMesh: dict[str, vtkUnstructuredGrid]
speHandler: bool # optional

# Instantiate the filter
tetQualityAnalysisFilter: TetQualityAnalysis = TetQualityAnalysis( inputMesh, speHandler )

# Use your own handler (if speHandler is True)
yourHandler: logging.Handler
tetQualityAnalysisFilter.setLoggerHandler( yourHandler )

# Change output filename [optional]
tetQualityAnalysisFilter.setFilename( filename )

# Do calculations
try:
    tetQualityAnalysisFilter.applyFilter()
except Exception as e:
    tetQualityAnalysisFilter.logger.error( f"The filter { tetQualityAnalysisFilter.logger.name } failed due to: { e }" )
class geos.processing.pre_processing.TetQualityAnalysis.TetQualityAnalysis(meshes, speHandler=False)[source]

Bases: object

Tetrahedra Quality Analysis.

Parameters:
  • meshes (dict[str,vtkUnstructuredGrid]) – Meshes to analyze.

  • speHandler (bool, optional) – True to use a specific handler, False to use the internal handler. Defaults to False.

applyFilter()[source]

Apply Tetrahedra Analysis.

compareIssuesFromBest()[source]

Compare issues values vs [BEST] mesh.

computeDeltasFromBest()[source]

Compute and print the.

createComparisonDashboard()[source]

Create the comparison dashboard.

printDistributionStatistics()[source]

Print the distribution statistics for various metrics.

printExtremeOutlierAnalysis()[source]

Print the extreme outlier analysis results.

printOverallQualityScore()[source]

Print the quality score distribution from excellent to poor.

printPercentileAnalysis(fmt='.2f')[source]

Print percentile analysis.

Parameters:

fmt (str) – Display formatting.

printQualityIssueSummary()[source]

Print the quality issues.

printSummary()[source]

Print the summary.

setFilename(filename)[source]

Set comparison dashboard output filename.

Parameters:

filename (str) – Output filename.

setLoggerHandler(handler)[source]

Set a specific handler for the filter logger.

In this filter 4 log levels are use, .info, .error, .warning and .critical, be sure to have at least the same 4 levels.

Parameters:

handler (logging.Handler) – The handler to add.

setSampleForPlot(data, n)[source]

Set sampling for a given metric of mesh n.

Parameters:
  • data (npt.NDArray[Any]) – Metric array to sample.

  • n (int) – Mesh id.