xxxxxxxxxx
108
// Initial source file : https://editor.p5js.org/claesjohnson/sketches/9vJ-rE3G0
//Fluid vs Structure 2d
//v velocity, sx and sy stresses
//dv/dt = dsx/dx+dsy/dy (Newton 2nd law)
//dsx/dt=dv/dx, dsy/dt=dv/dy elastic stress rate vs strain rate: Wave equation
//sx=dv/dx, sy=dv/dy viscous stress vs strain rate: Viscous flow equation
let sx= [];
let sy= [];
let v= [];
let u = [];
let M = 100;
let h=1/M;
let dt=0.2*h;
let S=1;
let colorgradient = ['#ff5500','#ff4f0e','#ff4817','#ff411f','#fe3a25','#fe332a','#fd2a30','#fc2135','#fa1539','#f9023e','#f70042','#f50046','#f3004a','#f0004e','#ed0052','#ea0056','#e7005a','#e4005e','#e00062','#dc0065','#d80069','#d4006c','#d00070','#cb0073','#c60076','#c10079','#bc007c','#b6007f','#b00082','#aa0084','#a40087','#9e0089','#97008b','#91008d','#8a008f','#820090','#7b0892','#730f93','#6b1594','#621995'];
let gradstep ;
let gradnuances = [];
function setup() {
createCanvas(450,450);
gradstep = 100/colorgradient.length;
// gradnuances = [];
for (var i=0 ; i<colorgradient.length; i++){
gradnuances.push(i*gradstep);
}
for (var i=0;i<M;i++){
sx[i]=[];
sy[i]=[];
v[i]=[];
u[i]=[];
}
for (var i=0;i<M;i++){
for (var j=0;j<M;j++){
sx[i][j]=0;
sy[i][j]=0;
v[i][j]=0;
u[i][j]=0;
}
}
//initial data
//for (m=45;m<55;m++){
//for (n=0;n<M;n++){
//v[m][n]=1;
for (m=0;m<10;m++){
for (n=0;n<10;n++){
v[46+m][46+n]=1;
}
}
}
function draw(){
//background('#621995');
for (var i=1;i<M-1;i++){
for (var j=1;j<M-1;j++){
//structure
if (S==1){
sx[i][j]=sx[i][j]+dt*(v[i][j]-v[i-1][j])/h;
sy[i][j]=sy[i][j]+dt*(v[i][j]-v[i][j-1])/h;
}
//fluid
if (S==0){
sx[i][j]=h*(v[i][j]-v[i-1][j])/h;
sy[i][j]=h*(v[i][j]-v[i][j-1])/h;
}
v[i][j] = v[i][j] + dt*(sx[i+1][j]-sx[i][j]+sy[i][j+1]-sy[i][j])/h+0.1*dt*(v[i+1][j]+v[i-1][j]+v[i][j+1]+v[i][j-1]-4*v[i][j])/h;
u[i][j]=u[i][j]+dt*v[i][j];
}
}
noStroke();
for (var i=0;i<M;i++){
for (var j=0;j<M;j++){
for(var k = 0 ; k<colorgradient.length ; k++){
if(2*255*abs(v[i][j]) >= gradnuances[k]){
c = color(colorgradient[k]);
c.setAlpha(2*255*abs(v[i][j]));
fill(c);
}
}
// fill(255,0,0,2*255*abs(v[i][j]));
rect(4*i,4*j,4,4);
//}
}
}
// for (var i=1;i<M-1;i++){
// fill(0);
// ellipse(4*i,200+800*v[i][50],3);
// fill(0,0,255,255);
// ellipse(4*i,200+800*u[i][50],3);
// ellipse(4*i,200,2);
// }
// fill(0);
// text("Fluid-Structure 2d: v velocity, sx and sy stresses",100,10);
// text("S=1: Elastic Structure: Wave equation: dv/dt = dsx/dx + dsy/dy (Newton 2nd law)",20,40)
// text("dsx/dt = dv/dx, dsy/dt=dv/dy (stress rate vs strain rate)",20,60);
// text("S=0: Viscous Fluid: dv/dt = dsx/dx + dsy/dy (Newton's 2nd Law)",20,90);
// text("sx = dv/dx, sy=dv/dy (stress vs strain rate)",20,110);
// text("(u displacement small for structure, du/dt=v)",20,260);
// text("Structure: Elastic membrane.",20,350);
// text("Play with other initial data.",20,150);
// text("velocity v: black, displacement u: blue (crosscut)",20,300);
}