Signed Distance Function-biased flow importance sampling for implicit neural compression of flow fields
Omar A. Mures, Miguel Cid Montoya
🔥 [2025.07] Colab example released!
The bifis library is available using pip. We recommend using a virtual environment to avoid conflicts with other software on your machine.
pip install bifisTo run the demo:
python main.py -c configs/toy_case.jsonTo create a conda env for development:
conda env create -f environment.yamlSample configuration:
{
"domain": [
0.0,
1.0,
0.0,
1.0
],
"counts": [
[
4,
72,
4
],
[
8,
24,
8
]
],
"roi": [
0.15,
0.85,
0.25,
0.75
],
"preserve_surface": false
}domain is an array containing xmin, xmax, ymin, ymax coordinates representing the limits of the simulation domain. counts contains the number of samples per section and roi represents the min and max coordinates of each dimension (it follows the domain convention) when using VariableDensity sampling. preserve_surface lets the user choose to always preserve samples that belong to the surface of interest and choose the rest using the SDF when using BiFIS sampling.
Sample run script:
from bifis.utils import Config, console
from bifis.sampling import Uniform, VariableDensity, BiFIS
from scipy.interpolate import griddata
# Load configuration
config = Config("config.json")
# Get simulation data
cell_centers, surface = ...
uniform = Uniform(config, args.resolution[0], args.resolution[1], np.arange(len(cell_centers)))
uniform.show(cell_centers[:, 0], cell_centers[:, 1], write=False)
variable_density = VariableDensity(config, args.resolution[0], args.resolution[1], np.arange(len(cell_centers)))
variable_density.show(cell_centers[:, 0], cell_centers[:, 1], write=False)
bifis = BiFIS(config, args.resolution[0], args.resolution[1], np.arange(len(cell_centers)), samples=cell_centers, surface=surface, surface_idx=np.arange(len(surface)))
bifis.show(cell_centers[:, 0], cell_centers[:, 1], write=False)
# Use resulting grid
uni_pixel_data = griddata((cell_centers[:, 0], cell_centers[:, 1]), p_original, (uniform.grid_x, uniform.grid_y), method=interpolation_method)
var_dens_pixel_data = griddata((cell_centers[:, 0], cell_centers[:, 1]), p_original, (variable_density.grid_x, variable_density.grid_y), method=interpolation_method)
# BiFIS uses cell ids instead of interpolation to get pixel data
bifis_pixel_data = p_original[bifis.idx].reshape(bifis.img_shape)- Hello world! A simple sampling example
- Learn how to use the different sampling classes.
- Visualize their differences.
The repo is still under construction, thanks for your patience.
- Release of 3D volume sampling code.
- Release Colab example.
- Release pip package.
- Release of the sampling code.
@Article{mures2025signed,
author = {Mures, Omar A. and Cid Montoya, Miguel},
title = {Signed distance function-biased flow importance sampling for implicit neural compression of flow fields},
journal = {Computer-Aided Civil and Infrastructure Engineering},
volume = {40},
number = {17},
pages = {2434-2463},
year = {2025},
doi = {10.1111/mice.13526},
url = {https://doi.org/10.1111/mice.13526},
}