Steady-state fractional flowΒΆ

In this example we simulate a steady-state flow with a constant driving force. This will enforce a periodic boundary condition in all directions. While the driving force may be set in any direction, we will set it in the z-direction to be consistent with the convention for pressure and velocity boundary conditions.

For the case considered in example/DiscPack we specify the following information in the input file

Domain {
   Filename = "discs_3x128x128.raw.morphdrain.raw"
   ReadType = "8bit"    // data type
   N = 3, 128, 128       // size of original image
   nproc = 1, 2, 2       // process grid
   n = 3, 64, 64         // sub-domain size
   voxel_length = 1.0    // voxel length (in microns)
   ReadValues = 0, 1, 2  // labels within the original image
   WriteValues = 0, 1, 2 // associated labels to be used by LBPM
   BC = 0                // fully periodic BC
   Sw = 0.35             // target saturation for morphological tools
}

Color {
   protocol = "fractional flow"
   capillary_number = -1e-5           // capillary number for the displacement, positive="oil injection"
   timestepMax = 200000               // maximum timtestep
   alpha = 0.01                       // controls interfacial tension
   rhoA = 1.0                         // controls the density of fluid A
   rhoB = 1.0                         // controls the density of fluid B
   tauA = 0.7                         // controls the viscosity of fluid A
   tauB = 0.7                         // controls the viscosity of fluid B
   F = 0, 0, 1e-5                     // body force
   WettingConvention = "SCAL"
   ComponentLabels = 0        // image labels for solid voxels
   ComponentAffinity = 0.9  // controls the wetting affinity for each label
   Restart = false
}
Analysis {
   analysis_interval = 1000           // logging interval for timelog.csv
   subphase_analysis_interval = 500000  // loggging interval for subphase.csv
   N_threads = 4                      // number of analysis threads (GPU version only)
   visualization_interval = 10000    // interval to write visualization files
   restart_interval = 10000000         // interval to write restart file
   restart_file = "Restart"           // base name of restart file
}
Visualization {
   format = "hdf5"
   write_silo = true        // write SILO databases with assigned variables
   save_8bit_raw = true      // write labeled 8-bit binary files with phase assignments
   save_phase_field = true  // save phase field within SILO database
   save_pressure = true     // save pressure field within SILO database
   save_velocity = false     // save velocity field within SILO database
}
FlowAdaptor {
   max_steady_timesteps = 25000       // maximum number of timesteps per steady point
   min_steady_timesteps = 25000       // minimum number of timesteps per steady point
   fractional_flow_increment = 0.0003 // parameter that controls rate of mass seeding
   skip_timesteps = 10000             // number of timesteps to spend in flow adaptor
}

Once this has been set, we launch lbpm_color_simulator in the same way as other parallel tools

mpirun -np 4 $LBPM_BIN/lbpm_color_simulator input.db

Successful output looks like the following

********************************************************
Running Color LBM
********************************************************
voxel length = 1.000000 micron
voxel length = 1.000000 micron
Input media: discs_3x128x128.raw.morphdrain.raw
Relabeling 3 values
oldvalue=0, newvalue =0
oldvalue=1, newvalue =1
oldvalue=2, newvalue =2
Dimensions of segmented image: 3 x 128 x 128
Reading 8-bit input data
Read segmented data from discs_3x128x128.raw.morphdrain.raw
Label=0, Count=11862
Label=1, Count=26430
Label=2, Count=10860
Distributing subdomains across 4 processors
Process grid: 1 x 2 x 2
Subdomain size: 3 x 64 x 64
Size of transition region: 0
Media porosity = 0.758667
Initialized solid phase -- Converting to Signed Distance function
Domain set.
Create ScaLBL_Communicator
Set up memory efficient layout, 9090 | 9120 | 21780
Allocating distributions
Setting up device map and neighbor list
Component labels: 1
   label=0, affinity=-0.900000, volume fraction==0.417582
Initializing distributions
Initializing phase field
Affinities - rank 0:
Main: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Thread 1: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Thread 2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Thread 3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Thread 4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Affinities - rank 0:
Main: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Thread 1: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Thread 2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Thread 3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Thread 4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
********************************************************
CPU time = 0.001501
Lattice update rate (per core)= 6.074861 MLUPS
Lattice update rate (per MPI process)= 6.074861 MLUPS
   (flatten density field)