Surface Energy Calculations
Quick Start
The official story is that measuring 3 contact angles tells you a lot about adhesion and coatability of your surface.
Credits
As is well known, I think this approach is relatively worthless.
Surface Energy
//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();
};
//Main() is hard wired as THE place to start calculating when inputs change
//It does no calculations itself, it merely sets them up, sends off letiables, gets results and, if necessary, plots them.
function Main() {
//Save settings every time you calculate, so they're always ready on a reload
saveSettings();
//Send all the inputs as a structured object
//If you need to convert to, say, SI units, do it here!
const inputs = {
Apolar: sliders.SlideApolar.value,
Polar: sliders.SlidePolar.value,
Water: sliders.SlideWater.value,
APS: document.getElementById("Apolar").value,
PS: document.getElementById("Polar").value
};
//Send inputs off to CalcIt where the names are instantly available
//Get all the resonses as an object, result
const result = CalcIt(inputs);
document.getElementById('OWD').value = result.OWD;
document.getElementById('OWP').value = result.OWP;
document.getElementById('OWT').value = result.OWT;
document.getElementById('WUD').value = result.WUD;
document.getElementById('WUP').value = result.WUP;
document.getElementById('WUT').value = result.WUT;
document.getElementById('LWD').value = result.LWD;
document.getElementById('LWAB').value = result.LWAB;
document.getElementById('LWP').value = result.LWP;
document.getElementById('LWM').value = result.LWM;
document.getElementById('LWT').value = result.LWT;
//You might have some other stuff to do here, but for most apps that's it for Main!
}
function Signof(x) {
if (x >= 0) { return 1 } else { return -1 };
};
//Here's the app calculation
function CalcIt({ Apolar, Polar, Water, APS, PS }) {
//This is recycled old code. Forgive the klunkiness
let Gla = [], Glp = [], Glwp = [], Gabp = [], GPlusp = [], GMinusp = [];
Gla[0] = 50.8;
Gla[1] = 44.4;
Glp[0] = 48; Glwp[0] = 29; Gabp[0] = 19; GPlusp[0] = 1.92; GMinusp[0] = 47
Glp[1] = 58; Glwp[1] = 39; Gabp[1] = 19; GPlusp[1] = 2.28; GMinusp[1] = 39.6
Glp[2] = 64; Glwp[2] = 34; Gabp[2] = 30; GPlusp[2] = 3.92; GMinusp[2] = 57.4
Glw = 72.8; Glww = 21.8; Gabw = 51; GPlusw = 25.5; GMinusw = 25.5;
let DegToRad = Math.PI / 180;
PDeg = Polar * DegToRad; APDeg = Apolar * DegToRad; WDeg = Water * DegToRad;
AP = APS == "Diiodomethane" ? 0 : 1
P = 0; if (PS == "Formamide") P = 1; if (PS == "Glycerol") P = 2
//Lewis method
let gslw = Gla[AP] * Math.pow(1 + Math.cos(APDeg), 2) / 4;
A = Glp[P] * (1 + Math.cos(PDeg)) - 2 * Math.sqrt(gslw * Glwp[P]);
B = Glw * (1 + Math.cos(WDeg)) - 2 * Math.sqrt(gslw * Glww);
C = 2 * Math.sqrt(GMinusp[P]);
D = 2 * Math.sqrt(GPlusp[P]);
E = 2 * Math.sqrt(GMinusw);
F = 2 * Math.sqrt(GPlusw);
GPluss = (A * F - B * D) / (C * F - D * E);
GMinuss = (B * C - A * E) / (C * F - D * E);
const LDisp = gslw
const LPlus = Signof(GPluss) * GPluss * GPluss
const LMinus = Signof(GMinuss) * GMinuss * GMinuss
const LAB = 2 * Math.sqrt(GPluss * GPluss * GMinuss * GMinuss)
const LTotal = LDisp + LAB
//Owens-Wendt
A1 = (1 + Math.cos(APDeg)) * Gla[AP];
A2 = (1 + Math.cos(WDeg)) * Glw
//APolar equation
X1 = 2 * Math.sqrt(Gla[AP])
Y1 = 0 //The Polar part of the apolar solvent
//Water equation
X2 = 2 * Math.sqrt(Glww)
Y2 = 2 * Math.sqrt(Gabw)
//Determinants
Dxy = X1 * Y2 - X2 * Y1
Dx = A1 * Y2 - A2 * Y1
Dy = X1 * A2 - X2 * A1
Sd = Dx / Dxy
Sp = Dy / Dxy
const SEDipolar = Signof(Sd) * Sd * Sd
const SEPolar = Signof(Sp) * Sp * Sp
const SETotal = SEDipolar + SEPolar
//Wu
//'m brute forcing this solution as I don't know any better way
let MinError = 99999999;
SdNow = 1;
while (SdNow < 60) {
SpNow = -1
while (SpNow < 40) {
CError = Math.abs(A1 - 4 * (SdNow * Gla[AP] / (SdNow + Gla[AP])))
CError += Math.abs(A2 - 4 * (SdNow * Glww / (SdNow + Glww) + SpNow * Gabw / (SpNow + Gabw)))
if (CError < MinError) {
MinError = CError
Sd = SdNow
Sp = SpNow
}
SpNow += 0.1
}
SdNow += 0.1
}
const WuSEDipolar = Sd
const WuSEPolar = Sp
const WuSETotal = Sd + Sp
return {
OWD: SEDipolar.toFixed(1),
OWP: SEPolar.toFixed(1),
OWT: SETotal.toFixed(1,),
WUD: WuSEDipolar.toFixed(1),
WUP: WuSEPolar.toFixed(1),
WUT: WuSETotal.toFixed(1),
LWD: LDisp.toFixed(1),
LWAB: LAB.toFixed(1,),
LWP: LPlus.toFixed(1),
LWM: LMinus.toFixed(1),
LWT: LTotal.toFixed(1,)
};
}
The official story
People spend large amounts of time measuring contact angles on surfaces using water plus an apolar solvent such as diiodomethane and a polar solvent such as formamide. From this they hope to get deep insights into the surface energy of the surface.
The app does the typical calculations - taking the measured contact angles from your 3 chosen solvents and converting them to 3 favourite calculations - Owens-Wendt, Wu and Lewis Acid/Base. The methods attempt a fancy split into Dispersive & Polar or fancier Acid/Base. Why are there 3 methods to go from data to "objective" values? Because, embarrasingly, what they are trying to do is take experimental contact angles and known surface tension of the liquids and solve the Young equation with too little data. Where σS is the solid surface energy, σSL is the (unknown) solid-liquid interfacial energy and σL is the known liquid surface tension
`σ_S = σ_(SL)+σ_Lcos(θ)`
Clearly we have one equation with two unknowns, and trying to solve it with 3 known surface tensions doesn't really help.
There are two further problems with this whole enterprise:
- Surface energies are surprisingly unhelpful in solving most relevant problems
- The surface energies measured by these techniques often correlate poorly with those measured via the more scientific technique of JKR
The "surprisingly unhelpful" comment comes because for those interested in adhesion, surface energy is usually 3-4 orders of magnitude smaller than the measured adhesion and real coating/printing forces from viscous flow are similarly orders of magnitude higher. In any case, surface energies vary by, at most, a factor of 2 while real-world effects vary by orders of magnitude. Why waste time measuring such small effects? Focus on the large effects.
For a comparison of values obtained by these sorts of methods with the more fundamental JKR method see the Real-SE app and explore JKR science in that same Practical Adhesion area.