freefem/heat-dirichlet.1d.freefem
// https://cirosantilli.com#heat1d-dirichlet-freefem
// https://doc.freefem.org/tutorials/thermalConduction.html
// Tested on freefem 3df0e2370d9752801ac744b11307b14e16743a44
// TODO: actually make it 1d, get rid of all y mentions.
// Parameters
real L = 1.;
real W = .2;
int meshN = 20;
real T = .05;
real dt = .001;
func u0 = sin(2*pi*x/L);
func k = 0.2;
// Mesh
mesh Th = square(meshN, 2, [L*x, W*y]);
// Fespace
fespace Vh(Th, P1);
Vh u = u0, v, uold;
// Problem
problem thermic(u, v)
= int2d(Th)(
u*v/dt
+ k*(
dx(u) * dx(v)
+ dy(u) * dy(v)
)
)
- int2d(Th)(uold*v/dt)
+ on(1, 2, 3, 4, u=0)
;
// Time iterations
ofstream ff(FILE + ".dat");
for (real t = 0; t < T; t += dt) {
for (real i = 0; i <= meshN; i += 1) {
real curx = i * L/meshN;
ff << curx << " " << u(curx, W/2) << endl;
}
if (t < T - dt) {
ff << endl << endl;
}
uold = u;
thermic;
//plot(u,fill=true,wait=true);
}