Food Filler

Quick Start

A food "matrix" with a modulus Gm contains a "filler" (particles, emulsions, air) with a modulus Gf at a volume fraction φ. What is the modulus Gc of the "composite" food?

Credits

I found the equations in the marvellous book Ton van Vliet, Rheology and Fracture Mechanics of Foods.

Food Filler Modulus Effects

Gf/Gm
φ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 variables, 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 = {
        GR: sliders.SlideGR.value,
        phim: sliders.Slidephim.value,
      };

    //Send inputs off to CalcIt where the names are instantly available
    //Get all the resonses as an object, result
    const result = CalcIt(inputs);

      //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 Main!
}

//Here's the app calculation
//The inputs are just the names provided - their order in the curly brackets is unimportant!
//By convention the input values are provided with the correct units within Main
function CalcIt({ GR,phim }) {

    let GPts = [],phie=0,Gm=1,Gf=Gm*GR
    const phim1=1-phim,phim2=phim*phim
    for (let phi=0;phi<=0.5;phi+=0.01){
        phie=phi+phi*phi*phim1/phim2
        GCM=(7.5*phie*Gf+(1-phie)*(4.5*Gm+3*Gf))/(7.5*phie*Gm+(1-phie)*(4.5*Gm+3*Gf))
        GPts.push({x:phi,y:GCM})
    }
    //Now we return everything - text boxes, plot and the name of the canvas, which is 'canvas' for a single plot
    const prmap = {
        plotData: [GPts], //An array of 1 or more datasets
        lineLabels:["Gc/Gm"] , //An array of labels for each dataset
        hideLegend: true, //Set to true if you don't want to see any labels/legnds.
        xLabel: 'φ& ', //Label for the x axis, with an & to separate the units
        yLabel: 'Gc/Gm& ', //Label for the y axis, with an & to separate the units
        y2Label: null, //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: 'P3', //These are the sig figs for the Tooltip readout. A wide choice!
        ySigFigs: 'P3', //F for Fixed, P for Precision, E for exponential

    }
    return {
        plots: [prmap],
        canvas: ['canvas'],
    };
}

            

When a food "matrix" with a modulus Gm contains a "filler" (particles, emulsions, air) with a modulus Gf at a volume fraction φ the modulus Gc of the "composite" food, assuming a Poisson ratio of 0.5 for both matrix and filler (a reasonable assumption), is given by:

`G_c/G_m=(7.5φG_f+(1-φ)(4.5G_m+3G_f))/(7.5φG_m+(1-φ)(4.5G_m+3G_f))`

The theory really only applies up to φ~0.2. To extend it to ~0.5 the φ used in the calculation is φeff based on the maximum packing fraction φm which is filler dependent and can usually be left at 0.63.

`φ_"eff"=φ+φ^2(1-φ_m)/(φ_m^2)`

For the app you enter the ratio Gf/Gm. The effects are surprisingly modest. Air bubbles (Gf=0) even at a significant φ don't give a massive reduction and above a certain relative filler modulus (100 in this app) extra modulus makes little difference.