/usr/share/doc/freefem++/examples/examples++-tutorial/convect.edp is in freefem++-doc 3.19.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // This a the rotating hill problem with one turn.
// First 1/2 turn is a convection equation and second 1/2 a convection diffusion
border a(t=0, 2*pi) { x = cos(t); y = sin(t); }; // the unit circle
mesh th = buildmesh(a(70)); // triangulates the disk
fespace Vh(th,P1);
func real hill(real r2){return exp(-10*(r2));}
Vh v = hill( (x-0.3)^2 +(y-0.3)^2); // initial condition
plot(v);
real dt = 0.17,t=0; // time step
Vh u1 = y, u2 = -x; // rotation velocity
int i;
Vh vv,vo; // work Finite element function
for ( i=0; i< 20 ; i++) {
t += dt;
vo=v;
v=convect([u1,u2],-dt,vo); // convect v by u1,u2, dt seconds, results in f
// convec(u1,u2,dt,v,v) won't work
plot(v,cmm="convection: t="+t + ", min=" + v[].min + ", max=" + v[].max,wait=0);
};
problem A(v,vv,solver=CG) = int2d(th)(v*vv/dt + 0.01*(dx(v)*dx(vv)+dy(v)*dy(vv)) )
+ int2d(th)(-vv*convect([u1,u2],-dt,vo)/dt) + on(a,v=0);
plot(v,wait=1);
|