Template:Exeter/js/fmr model

//INPUTS //metals


var data; var options;

function metaltype(metals) { switch (metals) { case "Zinc": atomicmass=65.39; break ;

case "Nickel": atomicmass=58.6934; break ;

case "Magnesium": atomicmass=24.305; break ;

case "Iron": atomicmass=55.845; break ;

case "Cobalt": atomicmass=58.9332; break ;

case "Copper": atomicmass=63.546; break ;

default: break; } return(atomicmass); }

//Metalconc function inputconcunits(units,metalconc,atomicmass) { switch (units) { case "mols": metalconc=metalconc*atomicmass*1000; //is metalconc right here? break;

case "mg/L": metalconc=metalconc ; break;

default: break; } return(metalconc); }

//Reg function regunits(units,reg,atomicmass) { switch (units) { case "mols": reg=reg*atomicmass*1000; break;

case "mg/L": reg=reg ; break;

default: break; } return(reg); }

//Flowrate function flowrateunits(units,flowrate) { switch (units) { case "m^3/s": flowrate=flowrate*1000; break;

case "L/s": flowrate=flowrate; break;

default: break; } return(flowrate); }

//FMR volume function FMRvolumeunits(units, FMRvolume) { switch (units) { case "m^3": FMRvolume=FMRvolume*1000; break;

case "gallons": //do we want to do gallons? FMRvolume=FMRvolume*4.54609; break;

case "L": FMRvolume=FMRvolume; break;

default: break; } return(FMRvolume); } //OUTPUTS //Output concentration function concleftunits(units, concleft, atomicmass) { switch (units) { case "mols": concleft=concleft/(atomicmass*1000); //do we need to do return on these? break;

case "mg/L": concleft=concleft; break;

default: break; } return(concleft) } //Metalmass function metalmassunits(units,metalmass) { switch (units) { case "tonnes": metalmass=metalmass*0.001; break;

case "kg": metalmass=metalmass; break;

default: break; } return(metalmass); }


  function drawChart() {
       options = {
         curveType: 'function',
         legend: { position: 'bottom' }
       };


  }

function FMRmodel()


{ // grabs elements from textboxes and converts values using switch statements var atomicmass = metaltype(document.getElementById("metal").value); // console.log(atomicmass);


var metalconc=document.getElementById("inputconc").value; //grabs input concentration value from textbox and assigns to metalconc--> console.log(metalconc); metalconc = inputconcunits(document.getElementById("inputconc2").value, metalconc,atomicmass); // console.log(metalconc);

var reg=document.getElementById("reg").value; console.log(reg); reg =regunits(document.getElementById("reg2").value, reg, atomicmass); console.log(reg);

var flowrate=document.getElementById("flowrate").value; console.log(flowrate); flowrate = flowrateunits(document.getElementById("flowrate2").value, flowrate); console.log(flowrate)

var FMRvolume=document.getElementById("FMRvolume").value; console.log(FMRvolume); FMRvolume = FMRvolumeunits(document.getElementById("FMRvolume2").value, FMRvolume); console.log(FMRvolume);

const spongeSA=3618.6*0.0001 ; //this is m squared

const spongeV=150*Math.pow(10,-6) ; //in m cubed
const ecoliperunitA=5*Math.pow(10,11) ; //in m^-2 the ecoli per unit SA on sponge 
const avpili=250 ; //average number of pili on ecoli 
const timestep=60 ; //timestep of 10 mintutes, 600 seconds 
const avg=6.022*Math.pow(10,23) ;

 var remove = [0,0];//array
 var N = [0,0];//array
 var R = [0,0];//array
 var numremoved = [0,0];//array
 var efficiency = [0,0];//array
 var concleft = [0,0];//array
 var graphconc=[];//emptyarray
 var graphtime=[];//emptyarray
 

var graphdata = new Array(2); graphconc[0]="Output Concentration"; graphtime[0]="Time";

var ratio=spongeSA/spongeV ; //the ratio of sponge volume to are

var totalSA=FMRvolume*ratio ; //finds the total surface area of sponge available

var numEcoli= totalSA*ecoliperunitA ; //number of ecoli in FMR

var totalpili=numEcoli*avpili ; //number of pili in FMR in total

N[1]=totalpili ; //number of pili remaining at each timestep

R[1]=N[1]/totalpili ; //ratio of remaining pili to intial number available: to be changed at each timestep

var timestepV=flowrate*timestep ; //volume of water flowing through during timestep

var molarconc=metalconc/(atomicmass*1000) ; //assuming density of water is 1 g/mL

var totalmoles=molarconc*timestepV ; //volume needs to be litres/consistent. molarity is in g/l

var numions=avg*totalmoles ; //number of ions per timestep

var k=0; //number of iterations

while (concleft[1]<(reg*1.2)) //stops when ratio less that the modified target { if (concleft[1]<reg) { remove[0] = remove[1]; // saves N[0] = N[1]; R[0] = R[1]; numremoved[0] = numremoved[1]; efficiency[0] = efficiency[1]; concleft[0] = concleft[1]; kis=k }


remove[1]=numions*R[1] ; //number of ions being removed per timestep N[1]-=remove[1] ; //number of pili available R[1]=N[1]/totalpili ;//ratio of avaiable pili to total pili

k++ ;

numremoved[1]=totalpili*(1-R[1]); totalions = k*numions; efficiency[1] = numremoved[1]/totalions; concleft[1] = metalconc*(1-efficiency[1]);

graphconc[k]=concleft[1]; graphtime[k]=k*timestep;


}

var graphdata = [];


   for(var i = 0; i < graphtime.length; i++)

{

       graphdata[i]=[];

graphdata[i][0]=graphtime[i]; graphdata[i][1]=graphconc[i]; graphdata[i][2]=concleft[0];

   };

graphdata[0][2]="End Concentration";



console.log(graphdata);

/*var transpose = [,];

for(var y = 0; y < k+1;y++) {

transpose[0,y] =graphtime[y];

transpose[1,y]=graphconc[y]; }

console.log(transpose[0]);*/

var totalremoved=totalpili*(1-R[0]) ; //number of ions removed

var graphinputs=[graphtime, graphconc];

var metalmass=(totalremoved*atomicmass)/(1000*avg) ; //metal mass removed in kg

var time=timestep*kis ; //calculates total time to run for

var outputefficiency=efficiency[0]*100 ;

var outputconc = concleft[0] ; //concentration of metal in output water

var outputs=[outputefficiency, time, metalmass, outputconc] ; console.log(outputs);


document.getElementById("efficiency").value=outputefficiency; //doesn't need change in units

document.getElementById("time").value=time; //doesnt yet have change in units

concleft=concleftunits(document.getElementById("concleft2"), concleft, atomicmass); document.getElementById("concleft").value=outputconc;

metalmass=metalmassunits(document.getElementById("metalmass2"),metalmass); document.getElementById("metalmass").value=metalmass;

var chart = new google.visualization.LineChart(document.getElementById('curve_chart')); data = google.visualization.arrayToDataTable(graphdata); chart.draw(data, options);


return(outputs); } function reAp(Find) { //var Find = document.getElementById("test");//event.target Find.style.visibility = 'visible'; } function dis(Find) { //var Find = document.getElementById("test");//event.target Find.style.visibility = 'hidden'; }


/*function visible() {

}

function notvisible() { class="mouseout" }*/