27.12.2012 Views

Wave Propagation in Linear Media | re-examined

Wave Propagation in Linear Media | re-examined

Wave Propagation in Linear Media | re-examined

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!