LBPM (Lattice Boltzmann Methods for Porous Media) is an open source software framework designed to model flow processes based on digital rock physics, and is freely available through the Open Porous Media project. Digital rock physics refers to a growing class of methods that leverage microscopic data sources to obtain insight into the physical behavior of fluids in rock and other porous materials. LBPM simulation protocols are based on two-fluid lattice Boltzmann methods, focusing in particular on wetting phenomena. To learn more about LBPM and the computational methods it uses checkout "An Adaptive Volumetric Flux Boundary Condition for Lattice Boltzmann Methods".
Before running the NGC LBPM container please ensure your system meets the following requirements.
The following examples simulate water-flooding using the NGC LBPM container. In an experimental setting, water is pumped into a sample at a particular flow rate to displace oil from the pore space. The examples will use a flux boundary condition to mimic this same basic approach. LBPM Tutorial, Step 8. Simulating Water Flooding (Part I).
To run this simulation we must download three files:
input.db
: Information regarding the intended domain structure and domain decomposition provided to LBPMmask_water_flooded_water_and_oil.raw.morphdrain.raw
: A digital rock image stored as a raw binary filerun.sh
: A helper script that sets common command line arguments and should be placed within the benchmark data directoryAlthough the lbpm_*
command line utilities may be called directly within the NGC LBPM container this example will utilize a convenience script, run.sh
. The environment variable BENCHMARK_DIR
will be used throughout the example to refer to the directory containing the three files listed above.
export BENCHMARK_DIR=$PWD
wget https://gitlab.com/NVHPC/ngc-examples/-/raw/master/LBPM/single-node/input.db
wget https://gitlab.com/NVHPC/ngc-examples/-/raw/master/LBPM/single-node/run.sh
wget https://gitlab.com/NVHPC/ngc-examples/-/raw/master/LBPM/single-node/mask_water_flooded_water_and_oil.raw.morphdrain.raw
chmod +x run.sh
cd $BENCHMARK_DIR
docker run --rm --gpus all -v $BENCHMARK_DIR:/benchmark -w /benchmark nvcr.io/hpc/lbpm:2020.10 ./run.sh
Docker versions below 1.40 must enable GPU support with --runtime nvidia
.
cd $BENCHMARK_DIR
docker run --rm --runtime nvidia -v $BENCHMARK_DIR:/benchmark -w /benchmark nvcr.io/hpc/lbpm:2020.10 ./run.sh
cd $BENCHMARK_DIR
singularity run --nv -B $BENCHMARK_DIR:/benchmark --pwd /benchmark docker://nvcr.io/hpc/lbpm:2020.10 ./run.sh
There is currently an issue in Singularity versions below v3.5 causing the LD_LIBRARY_PATH
to be incorrectly set within the container environment. As a workaround The LD_LIBRARY_PATH
must be unset before invoking Singularity:
LD_LIBRARY_PATH="" singularity run --nv -B $PWD:/benchmark --pwd /benchmark docker://nvcr.io/hpc/lbpm:2020.10 ./run.sh
Clusters running the Slurm resource manager and Singularity container runtime may launch parallel LBPM experiments directly through srun
. The NGC LBPM container supports pmi2
, which is available within most Slurm installations, as well as pmix3
. A typical parallel experiment would take the following form.
srun --mpi=pmi2 [srun_flags] singularity run --nv [singularity_flags] [lbpm_executable] [lbpm_input.db]
An example Slrum batch script that may be modified for your specific cluster setup may be viewed here.
By pulling and using the container, you accept the terms and conditions of the LBPM License
An Adaptive Volumetric Flux Boundary Condition for Lattice Boltzmann Methods