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.

8 Application of the quadratu<strong>re</strong> rout<strong>in</strong>e<br />

OscInt[fneg[a, 0,-c,0,w,k],<br />

QuadZero[a, -c,0,o12],1,FunctionType->ZeroList,opts]) +<br />

(OscInt[fpos[a, b, c,d,w,k],<br />

QuadZero[a, b +c,d,o21],1,FunctionType->ZeroList,opts] +<br />

OscInt[fneg[a,-b,-c,d,w,k],<br />

QuadZero[a,-b -c,d,o22],1,FunctionType->ZeroList,opts])<br />

) RectConst[w,k]<br />

];<br />

The second possibility to compute this <strong>in</strong>tegral is not to use the approximate partition<strong>in</strong>g<br />

strategy but employ the exact zeros for this purpose. S<strong>in</strong>ce we do not need this module for<br />

any other function than the one <strong>in</strong>side the tunnel, we need not write it as a template. So we<br />

pass only the parameters of the wave to the module but keep the names of the <strong>in</strong>tegrands<br />

xed. This time we call the quadratu<strong>re</strong> rout<strong>in</strong>e without a value for the option FunctionType<br />

because it defaults to Argument which is exactly what we want <strong>in</strong> order to compute the zeros<br />

numerically. The <strong>re</strong>st of the module is the same as the p<strong>re</strong>viously discussed version.<br />

RectTransExact[x_, t_, w_, k_, opts___Rule] :=<br />

Module[fa,b,c,d,<br />

wp = Work<strong>in</strong>gP<strong>re</strong>cision/.foptsg/.Options[OscInt]g,<br />

a = -t;<br />

b = N[2 Pi k/Sqrt[w],wp+2];<br />

c = x;<br />

d = N[-2 Pi k,wp+2];<br />

(-(OscInt[RectTransPos[a, 0, c,0,w,k],<br />

PhiArg[a, 0, c,0],1,opts] +<br />

OscInt[RectTransNeg[a, 0,-c,0,w,k],<br />

PhiArg[a, 0,-c,0],1,opts]) +<br />

(OscInt[RectTransPos[a, b, c,d,w,k],<br />

PhiArg[a, b, c,d],1,opts] +<br />

OscInt[RectTransNeg[a,-b,-c,d,w,k],<br />

PhiArg[a,-b,-c,d],1,opts])<br />

) RectConst[w,k]<br />

];<br />

The template for the calculation of the evanescent part of the wave is di e<strong>re</strong>nt. First, we<br />

do not split the <strong>in</strong>tegrand and thus have only one call of the <strong>in</strong>tegration rout<strong>in</strong>e. Second,<br />

as we use the built-<strong>in</strong> Mathematica function NIntegrate, we must set a number of options<br />

accord<strong>in</strong>g to the values given by the user. As method for the evaluation of this de nite <strong>in</strong>tegral<br />

we choose aga<strong>in</strong> DoubleExponential. A third di e<strong>re</strong>nce is that this module can be used for<br />

all waveforms and the<strong>re</strong>fo<strong>re</strong> the waveform-dependent constant must be passed to the module<br />

as an argument.<br />

EvanTemp[f_, const_, opts___Rule] :=<br />

Module[fwp = Work<strong>in</strong>gP<strong>re</strong>cision/.foptsg/.Options[OscInt],<br />

ag = AccuracyGoal/. foptsg/.Options[OscInt],<br />

202

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

Saved successfully!

Ooh no, something went wrong!