summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/examples/laserlattice.asy
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/examples/laserlattice.asy')
-rw-r--r--Build/source/utils/asymptote/examples/laserlattice.asy44
1 files changed, 44 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/examples/laserlattice.asy b/Build/source/utils/asymptote/examples/laserlattice.asy
new file mode 100644
index 00000000000..da4d9a49b7c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/laserlattice.asy
@@ -0,0 +1,44 @@
+import graph;
+import palette;
+
+int n=256;
+pen[] Palette=BWRainbow();
+
+real w(real w0, real z0, real z) {return w0*sqrt(1+(z/z0)^2);}
+
+real pot(real lambda, real w0, real r, real z)
+{
+ real z0=pi*w0^2/lambda, kappa=2pi/lambda;
+ return exp(-2*(r/w(w0,z0,z))^2)*cos(kappa*z)^2;
+}
+
+picture make_field(real lambda, real w0)
+{
+ real[][] v=new real[n][n];
+ for(int i=0; i < n; ++i)
+ for(int j=0; j < n; ++j)
+ v[i][j]=pot(lambda,w0,i-n/2,abs(j-n/2));
+
+ picture p=new picture;
+ size(p,250,250,IgnoreAspect);
+ real xm=-n/lambda, ym=-n/(2*w0), xx=n/lambda, yx=n/(2*w0);
+ image(p,v,(xm,ym),(xx,yx),Palette);
+ xlimits(p,xm,xx);
+ ylimits(p,ym,yx);
+ xaxis(p,"{\Large $z/\frac{\lambda}{2}$}",BottomTop,LeftTicks);
+ yaxis(p,"{\Large $r/w_0$}",LeftRight,RightTicks);
+ label(p,format("{\LARGE $w_0/\lambda=%.2f$}",w0/lambda),point(p,NW),5N);
+
+ return p;
+}
+
+picture p=make_field(160,80);
+picture q=make_field(80,80);
+picture r=make_field(16,80);
+picture s=make_field(2,80);
+
+real margin=1cm;
+add(p.fit(),(0,0),margin*NW);
+add(q.fit(),(0,0),margin*NE);
+add(r.fit(),(0,0),margin*SW);
+add(s.fit(),(0,0),margin*SE);