## 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
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.