diff options
Diffstat (limited to 'Build/source/utils/asymptote/examples/advection.asy')
-rw-r--r-- | Build/source/utils/asymptote/examples/advection.asy | 87 |
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()); + }); |