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

Apolar °
Apolar solvent
Water °
Polar °
Polar solvent
O-W Disp. mN/m
O-W Polar mN/m
O-W Tot. mN/m
Wu Disp. mN/m
Wu Polar mN/m
Wu Tot. mN/m
Lewis Disp. mN/m
Lewis Acid/Base mN/m
Lewis + mN/m
Lewis - mN/m
Lewis Tot. mN/m
//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:

  1. Surface energies are surprisingly unhelpful in solving most relevant problems
  2. 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.