sandbox/YiDai/BASI/invis_burgers_DS2.c
solve inviscid burgers equation
Here presenting a different initial condition, check out the method description here
#include "grid/cartesian1D.h"
// #include "grid/bitree.h"
#include "run.h"
scalar T[], Ts[], dT[];
double dt;
#define vis 1.0
int j;
void solve_LF(scalar T, double dt)
{
foreach ()
[] = 0.5 * (T[1] + T[-1]) - dt * 0.5 * (sq(T[1]) - sq(T[-1])) / (2 * Delta);
T}
void solve_MC(scalar T, double dt)
{
scalar Ts[];
foreach ()
{
[] = T[] - dt * 0.5 * (sq(T[1]) - sq(T[0])) / Delta;
Ts[] = 0.5 * (T[] + Ts[]) - dt * 0.5 * (sq(Ts[]) - sq(Ts[-1])) / (2 * Delta);
T}
}
void solve_GD(scalar T, double dt)
{
foreach ()
{
[] = T[] - dt * (((T[] >= T[1]) ? \
T(((T[] + T[1]) / 2 > 0) ? (sq(T[]) / 2) : (sq(T[1]) / 2))
: \
((T[] > 0) ? (sq(T[]) / 2) : ((T[1] < 0) ? (sq(T[1]) / 2) : 0))) \
- ((T[-1] >= T[]) ? (((T[-1] + T[]) / 2 > 0) ? (sq(T[-1]) / 2) : (sq(T[]) / 2)) : ((T[-1] > 0) ? (sq(T[-1]) / 2) : ((T[] < 0) ? (sq(T[]) / 2) : 0)))) /
;
Delta}
}
int main()
{
= 4;
L0 = -1.;
X0 = 1 << 9;
N // DT = sq(L0/N)/4;
= 2e-4;
DT for (j = 1; j < 4; j++)
run();
}
[left] = dirichlet(0.);
T[right] = dirichlet(0.);
T
event init(t = 0)
{
foreach ()
{
[] = exp(-sq(2 * (x - 1)));
T}
boundary({T});
}
event integration(i++)
{
// DT = sq(L0/(1 << grid->maxdepth))/3.; // smaller time step when the grid is refined
double dt = DT;
= dtnext(dt);
dt // centeral difference
if (j == 1)
{
solve_LF(T, dt);
}
if (j == 2)
{
solve_MC(T, dt);
}
if (j == 3)
{
solve_GD(T, dt);
}
boundary({T});
}
// event printdata (t = 0; t <= 1000 * DT; t += 100 * DT) {
// event printdata (t = 0; t <= 1; t += 0.01) {
event printdata(t = {0, 0.2, 0.5, 1, 1.5, 2})
{
char name[80];
if (j == 1)
sprintf(name, "BG_LF%g", t * 10);
if (j == 2)
sprintf(name, "BG_MC%g", t * 10);
if (j == 3)
sprintf(name, "BG_GD%g", t * 10);
FILE *fp = fopen(name, "w");
foreach ()
fprintf(fp, "%g %g %g\n", x, T[], t);
fprintf(fp, "\n\n");
fclose(fp);
}
event end(t = 2) {}
reset
file1="BG_LF"
file2="BG_MC"
file3="BG_GD"
set terminal svg size 1200,600 enhanced font 'Times-Roman,12'
set key samplen 2 spacing 1.5 font 'Times-Roman,12'
set key bottom right
set multiplot layout 1,3
set key right top
plot[][-0.05:1.4] file1.'0' u ($1):($2) t "t=0" w lp, \
'2' u ($1):($2) t "t=0.2" w lp, \
file1.'5' u ($1):($2) t "t=0.5" w lp, \
file1.'10' u ($1):($2) t "t=1.0" w lp, \
file1.'15' u ($1):($2) t "t=1.5" w lp, \
file1.'20' u ($1):($2) t "t=2.0" w lp
file1.
set nokey
plot[][-0.05:1.4] file2.'0' u ($1):($2) w lp, \
'2' u ($1):($2) w lp, \
file2.'5' u ($1):($2) w lp, \
file2.'10' u ($1):($2) w lp, \
file2.'15' u ($1):($2) w lp, \
file2.'20' u ($1):($2) w lp
file2.
set nokey
plot[][-0.05:1.4] file3.'0' u ($1):($2) w lp, \
'2' u ($1):($2) w lp, \
file3.'5' u ($1):($2) w lp, \
file3.'10' u ($1):($2) w lp, \
file3.'15' u ($1):($2) w lp, \
file3.'20' u ($1):($2) w lp
file3.unset multiplot