214 lines
9.5 KiB
ReStructuredText
214 lines
9.5 KiB
ReStructuredText
********************************
|
|
Membrane Charging Dynamics
|
|
********************************
|
|
|
|
In this example, we consider membrane charging dynamics for a simple cell.
|
|
|
|
For the case considered in ``example/SingleCell`` an input membrane geometry is provided in the
|
|
file ``Bacterium.swc``, which specifies an oblong cell shape, relying on the ``.swc`` file format that
|
|
is commonly used to approximate neuron structures. The case considered is the four ion membrane transport
|
|
problem considered in Figure 4 from McClure & Li
|
|
|
|
The cell simulation is performed by the executable ``lbpm_nernst_planck_cell_simulator``, which is launched
|
|
in the same way as other parallel tools
|
|
|
|
.. code:: bash
|
|
|
|
mpirun -np 2 $LBPM_BIN/lbpm_nernst_planck_cell_simulator Bacterium.db
|
|
|
|
|
|
The input file ``Bacterium.db`` specifies the following
|
|
|
|
.. code:: c
|
|
|
|
MultiphysController {
|
|
timestepMax = 25000
|
|
num_iter_Ion_List = 4
|
|
analysis_interval = 100
|
|
tolerance = 1.0e-9
|
|
visualization_interval = 1000 // Frequency to write visualization data
|
|
}
|
|
Ions {
|
|
use_membrane = true
|
|
Restart = false
|
|
MembraneIonConcentrationList = 150.0e-3, 10.0e-3, 15.0e-3, 155.0e-3 //user-input unit: [mol/m^3]
|
|
temperature = 293.15 //unit [K]
|
|
number_ion_species = 4 //number of ions
|
|
tauList = 1.0, 1.0, 1.0, 1.0
|
|
IonDiffusivityList = 1.0e-9, 1.0e-9, 1.0e-9, 1.0e-9 //user-input unit: [m^2/sec]
|
|
IonValenceList = 1, -1, 1, -1 //valence charge of ions; dimensionless; positive/negative integer
|
|
IonConcentrationList = 4.0e-3, 20.0e-3, 16.0e-3, 0.0e-3 //user-input unit: [mol/m^3]
|
|
BC_Solid = 0 //solid boundary condition; 0=non-flux BC; 1=surface ion concentration
|
|
FluidVelDummy = 0.0, 0.0, 0.0 // dummy fluid velocity for debugging
|
|
BC_InletList = 0, 0, 0, 0
|
|
BC_OutletList = 0, 0, 0, 0
|
|
}
|
|
Poisson {
|
|
lattice_scheme = "D3Q19"
|
|
epsilonR = 78.5 //fluid dielectric constant [dimensionless]
|
|
BC_Inlet = 0 // ->1: fixed electric potential; ->2: sine/cosine periodic electric potential
|
|
BC_Outlet = 0 // ->1: fixed electric potential; ->2: sine/cosine periodic electric potential
|
|
//--------------------------------------------------------------------------
|
|
//--------------------------------------------------------------------------
|
|
BC_Solid = 2 //solid boundary condition; 1=surface potential; 2=surface charge density
|
|
SolidLabels = 0 //solid labels for assigning solid boundary condition
|
|
SolidValues = 0 //if surface potential, unit=[V]; if surface charge density, unit=[C/m^2]
|
|
WriteLog = true //write convergence log for LB-Poisson solver
|
|
//------------------------------ advanced setting ------------------------------------
|
|
timestepMax = 4000 //max timestep for obtaining steady-state electrical potential
|
|
analysis_interval = 25 //timestep checking steady-state convergence
|
|
tolerance = 1.0e-10 //stopping criterion for steady-state solution
|
|
InitialValueLabels = 1, 2
|
|
InitialValues = 0.0, 0.0
|
|
}
|
|
Domain {
|
|
Filename = "Bacterium.swc"
|
|
nproc = 2, 1, 1 // Number of processors (Npx,Npy,Npz)
|
|
n = 64, 64, 64 // Size of local domain (Nx,Ny,Nz)
|
|
N = 128, 64, 64 // size of the input image
|
|
voxel_length = 0.01 //resolution; user-input unit: [um]
|
|
BC = 0 // Boundary condition type
|
|
ReadType = "swc"
|
|
ReadValues = 0, 1, 2
|
|
WriteValues = 0, 1, 2
|
|
}
|
|
Analysis {
|
|
analysis_interval = 100
|
|
subphase_analysis_interval = 50 // Frequency to perform analysis
|
|
restart_interval = 5000 // Frequency to write restart data
|
|
restart_file = "Restart" // Filename to use for restart file (will append rank)
|
|
N_threads = 4 // Number of threads to use
|
|
load_balance = "independent" // Load balance method to use: "none", "default", "independent"
|
|
}
|
|
Visualization {
|
|
save_electric_potential = true
|
|
save_concentration = true
|
|
save_velocity = false
|
|
}
|
|
Membrane {
|
|
MembraneLabels = 2
|
|
VoltageThreshold = 0.0, 0.0, 0.0, 0.0
|
|
MassFractionIn = 1e-1, 1.0, 5e-3, 0.0
|
|
MassFractionOut = 1e-1, 1.0, 5e-3, 0.0
|
|
ThresholdMassFractionIn = 1e-1, 1.0, 5e-3, 0.0
|
|
ThresholdMassFractionOut = 1e-1, 1.0, 5e-3, 0.0
|
|
}
|
|
|
|
*******************
|
|
Example Output
|
|
*******************
|
|
|
|
Successful output looks like the following
|
|
|
|
.. code:: bash
|
|
|
|
********************************************************
|
|
Running LBPM Nernst-Planck Membrane solver
|
|
********************************************************
|
|
.... Read membrane permeability (MassFractionIn)
|
|
.... Read membrane permeability (MassFractionOut)
|
|
.... Read membrane permeability (ThresholdMassFractionIn)
|
|
.... Read membrane permeability (ThresholdMassFractionOut)
|
|
.... Read MembraneIonConcentrationList
|
|
voxel length = 0.010000 micron
|
|
voxel length = 0.010000 micron
|
|
Reading SWC file...
|
|
Number of lines in SWC file: 7
|
|
Number of lines extracted is: 7
|
|
shift swc data by 0.150000, 0.140000, 0.140000
|
|
Media porosity = 1.000000
|
|
LB Ion Solver: Initialized solid phase & converting to Signed Distance function
|
|
Domain set.
|
|
LB Ion Solver: Create ScaLBL_Communicator
|
|
LB Ion Solver: Set up memory efficient layout
|
|
LB Ion Solver: Allocating distributions
|
|
LB Ion Solver: Setting up device map and neighbor list
|
|
**** Creating membrane data structure ******
|
|
Number of active lattice sites (rank = 0): 262160
|
|
Membrane labels: 1
|
|
label=2, volume fraction = 0.133917
|
|
Creating membrane data structure...
|
|
Copy initial neighborlist...
|
|
Cut membrane links...
|
|
(cut 7105 links crossing membrane)
|
|
Construct membrane data structures...
|
|
Create device data structures...
|
|
Construct communication data structures...
|
|
Ion model setup complete
|
|
Analyze system with sub-domain size = 66 x 66 x 66
|
|
Set up analysis routines for 4 ions
|
|
LB Ion Solver: initializing D3Q7 distributions
|
|
...initializing based on membrane list
|
|
.... Set concentration(0): inside=0.15 [mol/m^3], outside=0.004 [mol/m^3]
|
|
.... Set concentration(1): inside=0.01 [mol/m^3], outside=0.02 [mol/m^3]
|
|
.... Set concentration(2): inside=0.015 [mol/m^3], outside=0.016 [mol/m^3]
|
|
.... Set concentration(3): inside=0.155 [mol/m^3], outside=0 [mol/m^3]
|
|
LB Ion Solver: initializing charge density
|
|
LB Ion Solver: solid boundary: non-flux boundary is assigned
|
|
LB Ion Solver: inlet boundary for Ion 1 is periodic
|
|
LB Ion Solver: outlet boundary for Ion 1 is periodic
|
|
LB Ion Solver: inlet boundary for Ion 2 is periodic
|
|
LB Ion Solver: outlet boundary for Ion 2 is periodic
|
|
LB Ion Solver: inlet boundary for Ion 3 is periodic
|
|
LB Ion Solver: outlet boundary for Ion 3 is periodic
|
|
LB Ion Solver: inlet boundary for Ion 4 is periodic
|
|
LB Ion Solver: outlet boundary for Ion 4 is periodic
|
|
*****************************************************
|
|
LB Ion Transport Solver:
|
|
Ion 1: LB relaxation tau = 1
|
|
Time conversion factor: 1.25e-08 [sec/lt]
|
|
Internal iteration: 2 [lt]
|
|
Ion 2: LB relaxation tau = 1
|
|
Time conversion factor: 1.25e-08 [sec/lt]
|
|
Internal iteration: 2 [lt]
|
|
Ion 3: LB relaxation tau = 1
|
|
Time conversion factor: 1.25e-08 [sec/lt]
|
|
Internal iteration: 2 [lt]
|
|
Ion 4: LB relaxation tau = 1
|
|
Time conversion factor: 1.25e-08 [sec/lt]
|
|
Internal iteration: 2 [lt]
|
|
*****************************************************
|
|
Ion model initialized
|
|
Main loop time_conv computed from ion 1: 2.5e-08[s/lt]
|
|
Main loop time_conv computed from ion 2: 2.5e-08[s/lt]
|
|
Main loop time_conv computed from ion 3: 2.5e-08[s/lt]
|
|
Main loop time_conv computed from ion 4: 2.5e-08[s/lt]
|
|
***********************************************************************************
|
|
LB-Poisson Solver: steady-state MaxTimeStep = 4000; steady-state tolerance = 1e-10
|
|
LB relaxation tau = 3.5
|
|
***********************************************************************************
|
|
LB-Poisson Solver: Use averaged MSE to check solution convergence.
|
|
LB-Poisson Solver: Use D3Q19 lattice structure.
|
|
voxel length = 0.010000 micron
|
|
voxel length = 0.010000 micron
|
|
Reading SWC file...
|
|
Number of lines in SWC file: 7
|
|
Number of lines extracted is: 7
|
|
shift swc data by 0.150000, 0.140000, 0.140000
|
|
Media porosity = 1.000000
|
|
LB-Poisson Solver: Initialized solid phase & converting to Signed Distance function
|
|
Domain set.
|
|
LB-Poisson Solver: Create ScaLBL_Communicator
|
|
LB-Poisson Solver: Set up memory efficient layout
|
|
LB-Poisson Solver: Allocating distributions
|
|
LB-Poisson Solver: Setting up device map and neighbor list
|
|
.... LB-Poisson Solver: check neighbor list
|
|
.... LB-Poisson Solver: copy neighbor list to GPU
|
|
Poisson solver created
|
|
LB-Poisson Solver: initializing D3Q19 distributions
|
|
LB-Poisson Solver: number of Poisson solid labels: 1
|
|
label=0, surface potential=0 [V], volume fraction=0
|
|
LB-Poisson Solver: number of Poisson initial-value labels: 2
|
|
label=1, initial potential=0 [V], volume fraction=0.96
|
|
label=2, initial potential=0 [V], volume fraction=0.13
|
|
POISSON MODEL: Reading restart file!
|
|
Poisson solver initialized
|
|
... getting Poisson solver error
|
|
-------------------------------------------------------------------
|
|
set coefficients
|
|
********************************************************
|
|
CPU time = 0.008526
|
|
Lattice update rate (per core)= 30.749833 MLUPS
|
|
Lattice update rate (total)= 61.499666 MLUPS
|
|
********************************************************
|