Dispersion Conductivity
Quick Start
The conductivity of a particle dispersion depends on the relative conductivities of the particle and the dispersion medium. Three formulae are available depending on circumstances.
Credits
I am grateful to Dr Mansur S. Mohammadi who first told me about these theories.
Dispersion Conductivity
//One universal basic required here to get things going once loaded
window.onload = function () {
//restoreDefaultValues(); //Un-comment this if you want to start with defaults
Main();
};
//Any global variables go here
//Main is hard wired as THE place to start calculating when input changes
//It does no calculations itself, it merely sets them up, sends off variables, gets results and, if necessary, plots them.
function Main() {
saveSettings();
//Send all the inputs as a structured object
//If you need to convert to, say, SI units, do it here!
const inputs = {
kp: sliders.Slidekp.value,
AR: sliders.SlideAR.value,
Model: document.getElementById('Model').value,
}
//Send inputs off to CalcIt where the names are instantly available
//Get all the resonses as an object, result
const result = CalcIt(inputs)
//Set all the text box outputs
// document.getElementById('Data').value = result.Data
//Do all relevant plots by calling plotIt - if there's no plot, nothing happens
//plotIt is part of the app infrastructure in app.new.js
if (result.plots) {
for (let i = 0; i < result.plots.length; i++) {
plotIt(result.plots[i], result.canvas[i]);
}
}
//You might have some other stuff to do here, but for most apps that's it for CalcIt!
}
//Here's the app calculation
function CalcIt({ kp, AR, Model }) {
let phi = 0, kd = 1, it = 0, bf = 1, Plot = []
const theSign = kp < 1 ? -1 : 1
const theta = Math.acos(1 / AR)
const W = (theta - 0.5 * Math.sin(2 * theta)) * Math.cos(theta) / Math.pow(Math.sin(theta), 3)
const beta = 0.333 * (2 / (1 + (kp - 1) * W / 2) + 1 / (1 + (kp - 1) * (1 - W))) * (kp - 1)
Plot.push({ x: 0, y: 1 })
for (phi = 0.01; phi <= 0.501; phi += 0.01) {
if (Model == "Fricke" && AR == 1) Model = "Maxwell"
if (Model == "Maxwell") {
kd = (kp + 2 - 2 * phi * (1 - kp)) / (kp + 2 + phi * (1 - kp))
}
if (Model == "Bruggeman") {
//Solve iteratively, starting from previous value
if (theSign < 1) {
for (it = 0; it < 1000; it++) {
kd -= 0.001
if ((kd - kp) / (1 - kp) * Math.pow(1 / kd, 0.333) < 1 - phi) break
}
} else {
if (kp == 1) break //No need to calculate
for (it = 0; it < 1000; it++) {
kd += 0.001
if ((kd - kp) / (1 - kp) * Math.pow(1 / kd, 0.333) < 1 - phi) break
}
}
}
if (Model == "Fricke") {
bf = beta * phi / (1 - phi)
kd = (bf * kp + kp - 1) / (kp - 1 + bf)
}
Plot.push({ x: phi, y: kd })
}
//Now set up all the graphing data detail by detail.
let plotData = [Plot]
let lineLabels = ["Relative Conductivity"]//,"Plot1","Plot2","Plot3"] //An array of labels for each dataset
const prmap = {
plotData: plotData,
lineLabels: lineLabels,
xLabel: "φ&", //Label for the x axis, with an & to separate the units
yLabel: "kd/km&", //Label for the y axis, with an & to separate the units
y2Label: undefined, //Label for the y2 axis, null if not needed
yAxisL1R2: [], //Array to say which axis each dataset goes on. Blank=Left=1
logX: false, //Is the x-axis in log form?
xTicks: undefined, //We can define a tick function if we're being fancy
logY: false, //Is the y-axis in log form?
yTicks: undefined, //We can define a tick function if we're being fancy
legendPosition: 'top', //Where we want the legend - top, bottom, left, right
xMinMax: [, 0.5], //Set min and max, e.g. [-10,100], leave one or both blank for auto
yMinMax: [0,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
y2MinMax: [,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
xSigFigs: 'F2', //These are the sig figs for the Tooltip readout. A wide choice!
ySigFigs: 'F2', //F for Fixed, P for Precision, E for exponential
};
//Now we return everything - text boxes, plot and the name of the canvas, which is 'canvas' for a single plot
return {
plots: [prmap],
canvas: ['canvas'],
};
}
We have a dispersion medium with a relative conductivity km which by definition = 1. A particle with relative conductivity kp (which might be zero) is added at volume fraction φ and the resulting relative conductivity of the dispersion is kd.
The simplest formula is from Maxwell:
`k_d=(k_p+2-2φ(1-k_p))/(k_p+2φ(1-k_p))`
Bruggeman gives us a somewhat unwieldy formula
`1-φ=(k_d-k_p)/(k_m-k_p)root(3)(k_m/k_d)`
The app solves for kd via an iterative process.
Bruggeman is especially suited for dispersions with broad size distributions rather than the narrow size distributions assume by the other two.
Finally there's the Fricke formula which depends on the aspect ratio (length over width) of the particle. The formula is too complex to show here but you can work it out from the code. When AR = 1 it reverts to the Maxwell equation.
The theories get unreliable at "high" volume fractions so the app stops at φ = 0.5.
Layman's Guide
Dr Mohammadi has kindly provided a version of a guide from 1993 on the details of measuring conductivity (as well as other techniques). Click the link to download his Measurement Techniques.pdf