summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/examples/advection.asy
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/examples/advection.asy')
-rw-r--r--Build/source/utils/asymptote/examples/advection.asy87
1 files changed, 87 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/examples/advection.asy b/Build/source/utils/asymptote/examples/advection.asy
new file mode 100644
index 00000000000..ea993ff0fc8
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/advection.asy
@@ -0,0 +1,87 @@
+size(0,22cm);
+
+texpreamble("
+\usepackage{bm}
+\def\v{\bm}
+\def\grad{\v\nabla}
+\def\cross{{\v\times}}
+\def\curl{\grad\cross}
+\def\del{\nabla}
+");
+
+defaultpen(fontsize(10pt));
+
+real margin=1.5mm;
+
+object IC=draw("initial condition $\v U_0$",box,(0,1),
+ margin,black,FillDraw(palegray));
+object Adv0=draw("Lagrangian state $\v U(t)$",ellipse,(1,1),
+ margin,red,FillDraw(palered));
+object Adv=draw("Lagrangian prediction $\v U(t+\tau)$",ellipse,(1,0),
+ margin,red,FillDraw(palered));
+object AdvD=draw("diffused parcels",ellipse,(1.8,1),
+ margin,red,FillDraw(palered));
+object Ur=draw("rearranged $\v \widetilde U$",box,(0,0),
+ margin,orange+gray,FillDraw(paleyellow));
+object Ui=draw("interpolated $\v \widetilde U$",box,(1,-1),
+ margin,blue,FillDraw(paleblue));
+object Crank=draw("${\cal L}^{-1}(-\tau){\cal L}(\tau)\v \widetilde U$",
+ box,(0.5,-1),margin,blue,FillDraw(paleblue));
+object CrankR=draw("${\cal L}^{-1}(-\tau){\cal L}(\tau)\v \widetilde U$",
+ box,(0,-1),margin,orange+gray,FillDraw(paleyellow));
+object Urout=draw(minipage("\center{Lagrangian rearranged solution~$\v U_R$}",
+ 100pt),box,(0,-2),margin,orange+gray,
+ FillDraw(paleyellow));
+object Diff=draw("$\v D\del^2 \v \widetilde U$",box,(0.75,-1.5),
+ margin,blue,FillDraw(paleblue));
+object UIout=draw(minipage("\center{semi-Lagrangian solution~$\v U_I$}",80pt),
+ box,(0.5,-2),margin,FillDraw(palered+paleyellow));
+object psi=draw("$\psi=\del^{-2}\omega$",box,(1.6,-1),
+ margin,darkgreen,FillDraw(palegreen));
+object vel=draw("$\v v=\v{\hat z} \cross\grad\psi$",box,(1.6,-0.5),
+ margin,darkgreen,FillDraw(palegreen));
+
+add(new void(frame f, transform t) {
+ pair padv=0.5*(point(Adv0,S,t)+point(Adv,N,t));
+ picture pic;
+ draw(pic,"initialize",point(IC,E,t)--point(Adv0,W,t),RightSide,Arrow,
+ PenMargin);
+ draw(pic,minipage("\flushright{advect: Runge-Kutta}",80pt),
+ point(Adv0,S,t)--point(Adv,N,t),RightSide,red,Arrow,PenMargin);
+ draw(pic,Label("Lagrange $\rightarrow$ Euler",0.45),
+ point(Adv,W,t)--point(Ur,E,t),5LeftSide,orange+gray,
+ Arrow,PenMargin);
+ draw(pic,"Lagrange $\rightarrow$ Euler",point(Adv,S,t)--point(Ui,N,t),
+ RightSide,blue,Arrow,PenMargin);
+ draw(pic,point(Adv,E,t)--(point(AdvD,S,t).x,point(Adv,E,t).y),red,
+ Arrow(Relative(0.7)),PenMargin);
+ draw(pic,minipage("\flushleft{diffuse: multigrid Crank--Nicholson}",80pt),
+ point(Ui,W,t)--point(Crank,E,t),5N,blue,MidArrow,PenMargin);
+ draw(pic,minipage("\flushleft{diffuse: multigrid Crank--Nicholson}",80pt),
+ point(Ur,S,t)--point(CrankR,N,t),LeftSide,orange+gray,Arrow,PenMargin);
+ draw(pic,"output",point(CrankR,S,t)--point(Urout,N,t),RightSide,
+ orange+gray,Arrow,PenMargin);
+ draw(pic,point(Ui,S,t)--point(Diff,N,t),blue,MidArrow,PenMargin);
+ draw(pic,point(Crank,S,t)--point(Diff,N,t),blue,MidArrow,PenMargin);
+ label(pic,"subtract",point(Diff,N,t),12N,blue);
+ draw(pic,Label("Euler $\rightarrow$ Lagrange",0.5),
+ point(Diff,E,t)--(point(AdvD,S,t).x,point(Diff,E,t).y)--
+ (point(AdvD,S,t).x,point(Adv,E,t).y),RightSide,blue,
+ Arrow(position=1.5),PenMargin);
+ dot(pic,(point(AdvD,S,t).x,point(Adv,E,t).y),red);
+ draw(pic,(point(AdvD,S,t).x,point(Adv,E,t).y)--point(AdvD,S,t),red,Arrow,
+ PenMargin);
+ draw(pic,"output",point(Crank,S,t)--point(UIout,N,t),RightSide,brown,Arrow,
+ PenMargin);
+ draw(pic,Label("$t+\tau\rightarrow t$",0.45),
+ point(AdvD,W,t)--point(Adv0,E,t),2.5LeftSide,red,Arrow,PenMargin);
+ draw(pic,point(psi,N,t)--point(vel,S,t),darkgreen,Arrow,PenMargin);
+ draw(pic,Label("self-advection",4.5),point(vel,N,t)--
+ arc((point(vel,N,t).x,point(Adv,E,t).y),5,270,90)--
+ (point(vel,N,t).x,padv.y)--
+ padv,LeftSide,darkgreen,Arrow,PenMargin);
+ draw(pic,Label("multigrid",0.5,S),point(Ui,E,t)--point(psi,W,t),darkgreen,
+ Arrow,PenMargin);
+
+ add(f,pic.fit());
+ });