Skip to content

LBPM Tutorial, Step 4. Permeability Measurement

JamesEMcClure edited this page May 10, 2019 · 5 revisions

It is straightforward to apply the MRT LBM to measure permeability from a digital rock image. As in the previous example, we populate the input file to provide the parameters needed by the MRT model

MRT {
   tau = 1.0
   F = 0.0, 0.0, 1.0e-5
   timestepMax = 20000
   tolerance = 0.01
}
Domain {
   Filename = "mask_water_flooded_water_and_oil.raw"  
   ReadType = "16bit"  // data type
   N = 601, 594, 1311  // size of original image
   nproc = 2, 2, 2     // process grid
   n = 300, 297, 300   // sub-domain size
   voxel_length = 7.0  // voxel length (in microns)
   ReadValues = 0, 1, 2  // labels within the original image
   WriteValues = 0, 2, 1 // associated labels to be used by LBPM
   InletLayers = 0, 0, 10 // specify 10 layers along the z-inlet
   checkerSize = 10       // size of the checker to use
   BC = 0                 // boundary condition type (0 for periodic)
}

here we have added tolerance, which is simply a steady-state termination criterion. The absolute relative deviation in the total flow rate is computed at an interval of 1000 timesteps. If the deviation drops below tolerance the simulation will exit.

To launch the permeability simulation with the desired number of MPI processes, we use lbpm_permeability_simulator. Since we have defined the process grid based on nproc = 2, 2, 2, we must use 8 MPI processes.

mpirun -np 8 lbpm_permeability_simulator input.db

Successful application should produce output similar to the following

********************************************************
Running Single Phase Permeability Calculation 
********************************************************
MPI rank=0 will use GPU ID 0 / 4 
MPI rank=2 will use GPU ID 2 / 4 
MPI rank=1 will use GPU ID 1 / 4 
MPI rank=3 will use GPU ID 3 / 4 
voxel length = 7.000000 micron 
voxel length = 7.000000 micron 
Read input media... 
Initialize from segmented data: solid=0, NWP=1, WP=2 
Media porosity = 0.113193 
Initialized solid phase -- Converting to Signed Distance function 
Domain set.
Create ScaLBL_Communicator 
Set up memory efficient layout 
Allocating distributions 
Setting up device map and neighbor list 
Initializing distributions 
Beginning AA timesteps...
********************************************************
     1.772121
     1.661506
     1.617379
     1.592925
     1.577158
     1.566075
     1.557838
     1.551474
     1.546413
     1.542296
     1.538885
     1.536013
     1.533564
     1.531450
     1.529606
     1.527983
     1.526542
     1.525253
     1.524091
     1.523038
-------------------------------------------------------------------
********************************************************
CPU time = 0.014239 
Lattice update rate (per core)= 332.605597 MLUPS 
Lattice update rate (total)= 2660.844780 MLUPS 
********************************************************

Proceed to next step in tutorial