Metadata-Version: 2.1
Name: pyfoam2sdf
Version: 1.0
Summary: A Python package for converting foamMesh data to Signed Distance Fields (SDF).
Home-page: https://github.com/srl-ethz/Foam-mesh-reading
Author: ZHANG Rushan
Author-email: rzhangbq@gmail.com
License: MIT
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Dist: numpy


# PyFoam2SDF: Convert OpenFOAM mesh to SDF

This is a simple python package to convert OpenFOAM mesh to SDF. It also facilitates the reading of OpenFOAM mesh files for python.
The calculation of SDF is based on barycentric coordinate system.

(Github repository)[https://github.com/srl-ethz/Foam-mesh-reading]

## Installation

```bash
pip install pyfoam2sdf
```

in python:

```python
import pyfoam2sdf
```

## Documentation

```python
read_boundary(boundary_file_path: str) -> dict
```

Reads boundary data from the foam mesh boundary file and returns a dictionary storing the boundary data.

**Parameters:**

- `boundary_file_path` (str): Path to the boundary file, usually at constant/polyMesh/boundary.

**Returns:**

- `dict`: A dictionary storing the boundary data.

```python
faces_to_np(face_file_path : str) -> np.ndarray
```

Reads face data from the foam mesh face file and returns a 2D numpy array of shape num_faces x 4, storing the face indices.

**Parameters:**

- `face_file_path` (str): Path to the face file, usually at constant/polyMesh/faces.

**Returns:**

- `np.ndarray`: A 2D numpy array storing the face indices. Shape: (n_faces, 4)

```python
points_to_np(points_file_path : str) -> np.ndarray
```

Reads points data from the foam mesh points file and returns a 2D numpy array of shape num_points x 3, storing the point coordinates.

**Parameters:**

- `points_file_path` (str): Path to the points file, usually at <time_step>/polyMesh/points.

**Returns:**

- `np.ndarray`: A 2D numpy array storing the point coordinates. Shape: (n_points, 3)

```python
find_boundary_faces(boundary_file_path : str, face_file_path : str, boundary_name : str) -> np.ndarray
```

Finds the faces of a specific boundary patch and returns a 2D numpy array of shape num_boundary_faces x 4, storing the face indices of the specified boundary patch.

**Parameters:**

- `boundary_file_path` (str): Path to the boundary file, usually at constant/polyMesh/boundary.
- `face_file_path` (str): Path to the face file, usually at constant/polyMesh/faces.
- `boundary_name` (str): Name of the boundary patch, e.g., 'inlet', 'outlet', 'top', 'bottom', 'front', 'back'.

**Returns:**

- `np.ndarray`: A 2D numpy array storing the face indices of the specified boundary patch. Shape: (n_boundary_faces, 4)

```python
find_boundary_points(boundary_file_path : str, face_file_path : str, points_file_path : str, boundary_name : str) -> np.ndarray
```

Finds the points of a specific boundary patch and returns a 3D numpy array of shape num_boundary_faces x 4 x 3, storing the point coordinates of the specified boundary patch.

**Parameters:**

- `boundary_file_path` (str): Path to the boundary file, usually at constant/polyMesh/boundary.
- `face_file_path` (str): Path to the face file, usually at constant/polyMesh/faces.
- `points_file_path` (str): Path to the points file, usually at <time_step>/polyMesh/points.
- `boundary_name` (str): Name of the boundary patch, e.g., 'inlet', 'outlet', 'top', 'bottom', 'front', 'back'.

**Returns:**

- `np.ndarray`: A 3D numpy array storing the point coordinates of the specified boundary patch. Shape: (n_boundary_faces, 4, 3)

```python
quadrilateral_to_triangular(faces : np.ndarray) -> np.ndarray
```

Converts the quadrilateral mesh to a triangular mesh. It cuts a quadrilateral into two triangles, so the number of faces will be doubled.

**Parameters:**

- `faces` (np.ndarray): A 3D numpy array storing the point coordinates of the specified boundary patch, in triangular mesh format. Shape: (n_triangular_boundary_faces, 3, 3)

**Returns:**

- `np.ndarray`: A 3D numpy array storing the point coordinates of the resulting triangular mesh. Shape: (n_triangular_boundary_faces, 3, 3), where n_triangular_boundary_faces = 2 * n_boundary_faces

```python
calculate_sdf(face_points : np.ndarray, x_grid : np.ndarray, y_grid : np.ndarray, z_grid : np.ndarray) -> np.ndarray
```

Calculates the signed distance function (SDF) of a boundary patch.

**Parameters:**

- `face_points` (np.ndarray): A 3D numpy array storing the point coordinates of the specified boundary patch, in triangular mesh format. Shape: (n_triangular_boundary_faces, 3, 3)
- `x_grid` (np.ndarray): A 1D numpy array storing the x coordinates of the grid points.
- `y_grid` (np.ndarray): A 1D numpy array storing the y coordinates of the grid points.
- `z_grid` (np.ndarray): A 1D numpy array storing the z coordinates of the grid points. For 2D cases, this can be set to [0.].

**Returns:**

- `np.ndarray`: A 3D numpy array storing the SDF values of the grid points. Shape: (n_x, n_y, n_z)

```python
calculate_sdf_from_mesh_files(boundary_file_path : str, face_file_path : str, points_file_path : str, boundary_names : list, x_grid : np.ndarray, y_grid : np.ndarray, z_grid : np.ndarray) -> np.ndarray
```

Calculates the signed distance function (SDF) from mesh files for multiple boundary patches.

**Parameters:**

- `boundary_file_path` (str): Path to the boundary file, usually at constant/polyMesh/boundary.
- `face_file_path` (str): Path to the face file, usually at constant/polyMesh/faces.
- `points_file_path` (str): Path to the points file, usually at <time step>/polyMesh/points.
- `boundary_names` (list): List of boundary names to calculate SDF for.
- `x_grid` (np.ndarray): A 1D numpy array storing the x coordinates of the grid points.
- `y_grid` (np.ndarray): A 1D numpy array storing the y coordinates of the grid points.
- `z_grid` (np.ndarray): A 1D numpy array storing the z coordinates of the grid points. For 2D cases, this can be set to [0.].

**Returns:**

- `np.ndarray`: A 3D numpy array storing the SDF values of the grid points. Shape: (n_x, n_y, n_z)
