Wave Propagation in Linear Media | re-examined
Wave Propagation in Linear Media | re-examined
Wave Propagation in Linear Media | re-examined
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
];<br />
PhiGradEvan[x_, t_, w_, k_, opts___Rule] :=<br />
If[(Shape/.{opts}/.Options[Phi]) === Gauss,<br />
Message[Phi::miss<strong>in</strong>gval],<br />
PhiGradEvan[x,t,w,k,1,opts]];<br />
(*-- outside the tunnel --*)<br />
(* Note that <strong>in</strong> this case the spatial coord<strong>in</strong>ate is <strong>in</strong>verted <strong>in</strong> the function calls<br />
because of the <strong>re</strong>verse motion of the <strong>re</strong>flected wave. *)<br />
PhiRef[x_, t_, w_, k_, n_?Positive, opts___Rule] :=<br />
Module[{sh = Shape/. {opts}/.Options[Phi],<br />
pt = PPo<strong>in</strong>ts/.{opts}/.Options[Phi]},<br />
Switch[sh,<br />
Rect,<br />
RectTransTemp[RectRefPos,RectRefNeg,-x,t,w,k,opts] +<br />
EvanTemp[RectRefEvan[-t,0,-x,0,w,k],RectConst[w,k],opts],<br />
Tria,<br />
TriaTransTemp[TriaRefPos,TriaRefNeg,-x,t,w,k,opts] +<br />
EvanTemp[TriaRefEvan[-t,0,-x,0,w,k],TriaConst[w,k],opts],<br />
Gauss,<br />
Switch[pt,<br />
Approximate, GaussTransTemp[GaussRefPos,GaussRefNeg,-x,t,w,k,n,opts] +<br />
EvanTemp[GaussRefEvan[-t,Pi k/Sqrt[w],-x,-Pi k,w,k,n],<br />
GaussConst[w,k,n],opts],<br />
Truncate, GaussTransTruncTemp[GaussRefPos,GaussRefNeg,-x,t,w,k,n,opts] +<br />
GaussEvanTruncTemp[GaussRefEvan[-t,Pi k/Sqrt[w],-x,-Pi k,w,k,n],<br />
w,k,n,opts],<br />
_, Message[Phi::<strong>in</strong>validpart,pt]],<br />
_,<br />
Message[Phi::<strong>in</strong>validshape,sh]<br />
]<br />
];<br />
PhiRef[x_, t_, w_, k_, opts___Rule] :=<br />
If[(Shape/.{opts}/.Options[Phi]) === Gauss,<br />
Message[Phi::miss<strong>in</strong>gval],<br />
PhiRef[x,t,w,k,1,opts]];<br />
PhiInc[x_, t_, w_, k_, n_?Positive, opts___Rule] :=<br />
Module[{sh = Shape/. {opts}/.Options[Phi],<br />
pt = PPo<strong>in</strong>ts/.{opts}/.Options[Phi]},<br />
Switch[sh,<br />
Rect,<br />
RectTransTemp[RectIncPos,RectIncNeg,x,t,w,k,opts] +<br />
EvanTemp[RectIncEvan[-t,0,x,0,w,k],RectConst[w,k],opts],<br />
Tria,<br />
TriaTransTemp[TriaIncPos,TriaIncNeg,x,t,w,k,opts] +<br />
EvanTemp[TriaIncEvan[-t,0,x,0,w,k],TriaConst[w,k],opts],<br />
Gauss,<br />
Switch[pt,<br />
Approximate, GaussTransTemp[GaussIncPos,GaussIncNeg,x,t,w,k,n,opts] +<br />
EvanTemp[GaussIncEvan[-t,Pi k/Sqrt[w],x,-Pi k,w,k,n],<br />
GaussConst[w,k,n],opts],<br />
Truncate, GaussTransTruncTemp[GaussIncPos,GaussIncNeg,x,t,w,k,n,opts] +<br />
GaussEvanTruncTemp[GaussIncEvan[-t,Pi k/Sqrt[w],x,-Pi k,w,k,n],<br />
w,k,n,opts],<br />
_, Message[Phi::<strong>in</strong>validpart,pt]],<br />
_,<br />
Message[Phi::<strong>in</strong>validshape,sh]<br />
]<br />
];<br />
PhiInc[x_, t_, w_, k_, opts___Rule] :=<br />
If[(Shape/.{opts}/.Options[Phi]) === Gauss,<br />
Message[Phi::miss<strong>in</strong>gval],<br />
PhiInc[x,t,w,k,1,opts]];<br />
Phi[x_, t_, w_, k_, n_?Positive, opts___Rule] :=<br />
Which[t == 0 && x == 0 && (Shape/.{opts}/.Options[Phi]) === Rect, 0.5,<br />
t < 0, 0,<br />
x >= 0, PhiEvan[x,t,w,k,n,opts] + PhiTrans[x,t,w,k,n,opts],<br />
x < 0, PhiInc[x,t,w,k,n,opts] + PhiRef[x,t,w,k,n,opts]];<br />
Phi[x_, t_, w_, k_, opts___Rule] :=<br />
If[(Shape/.{opts}/.Options[Phi]) === Gauss,<br />
Message[Phi::miss<strong>in</strong>gval],<br />
Phi[x,t,w,k,1,opts]];<br />
PhiGrad[x_, t_, w_, k_, n_?Positive,opts___Rule] :=<br />
If[x < 0 || t < 0 || x == 0 && t == 0, 0,<br />
PhiGradEvan[x,t,w,k,n,opts] + PhiGradTrans[x,t,w,k,n,opts]];<br />
228<br />
A Mathematica packages