Home > SPlaC v1_0 > Mie > PWE > PweEsurf.m

PweEsurf

PURPOSE ^

Calculates several properties of the field on a sphere surface at r=r0 for PWE

SYNOPSIS ^

function stEsurf=PweEsurf(lambda,epsilon,stAbcdn1,r0,nNbTheta,sRegion,stPinTaun)

DESCRIPTION ^

 Calculates several properties of the field on a sphere surface at r=r0 for PWE
 For PWE, we have: |m|=1; a,c even in m; b,d, odd in m.
 The 4 Mie coefficients in stAabcdn1 must be the relevant ones
 at r=r0.
 Use r0=Inf to obtain far-field properties.
 The fields Ecr, Ect, Esf given in the results are discussed in the
 supplementary information.

 Parameters:
 - lambda: column vector [L x 1]
           wavelengths in nm
 - epsilon: scalar or column vector [L x 1]
           epsilon of dielectric where field is evaluated
 - stAbcdn1: structure with 4 fields, an1, bn1, cn1, dn1,
             each a matrix [L x nNmax]
             containing the Mie coefficients a_{n,1}, b_{n,1},
             c_{n,1} and d_{n,1} used for the VSH expansions at r=r0.
 - r0:     scalar [1 x 1] non-zero
           distance from origin (in nm)
           r0 can be "Inf" to obtain far-field radiation profile
 - nNbTheta: integer scalar
             number of theta points used for computations
 - sRegion: string
            'outside', 'inside', 'scattering, or 'all' (default):
            * if 'outside': the points should be in the outside region (outside the largest
              sphere). The regular part of the field (coeffs a and b) is then known and not
              computed from the plane wave incident field (faster).
            * if 'scattering': the regular part of the field (coeffs a and
              b) is set to zero (no a and b needed)
            * if 'inside': the points should be in the inside region (containing the origin), then
              the irregular part of the field is zero (no coeffs c and d needed).
            * otherwise: all of a,b,c,d are used.
 - stPinTaun: structure (optional)
              with functions of theta pi_n and tau_n
              if omitted, then the functions are computed from scrath
              it is faster to pass this structure as argument if these
              functions have already been calculated 

 Returns: structure stEsurf with fields
 - stEsurf.theta: [1 x T] row vector with theta's
 - stEsurf.r0: [1 x 1] r0 (in nm)
 - stEsurf.lambda: [L x 1] lambda (in nm)
 - stEsurf.Ecr: [L x T] wavelength-and-theta-dependent Ecr
 - stEsurf.Ect: [L x T] wavelength-and-theta-dependent Ect
 - stEsurf.Esf: [L x T] wavelength-and-theta-dependent Esf
 - stEsurf.MLocParaAve: [L x 1] wavelength-dependent average MLocPara
 - stEsurf.MLocPerpAve: [L x 1] wavelength-dependent average MLocPerp
 - stEsurf.MLocAve: [L x 1] wavelength-dependent average MLoc
 - stEsurf.F0E4Ave: [L x 1] wavelength-dependent average SERS EF F^0_{E4}
 - stEsurf.F0E4PerpAve: [L x 1] wavelength-dependent average SERS EF
                        F^0_{E4} for perpendicular component
 - stEsurf.F0E4ParaAve: [L x 1] wavelength-dependent average SERS EF
                        F^0_{E4} for parallel component

 This file is part of the SPlaC v1.0 package (copyright 2008)
 Check the README file for further information

EXAMPLE OF OUTPUT ^

Example figure output

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 global noCheckSum;
0002 if (isempty(noCheckSum) || ~noCheckSum)
0003     disp 'PweEsurf: CheckSum ON'
0004 else
0005     disp 'PweEsurf: CheckSum OFF'
0006 end
0007 
0008 if (nNbTheta<91)
0009     disp 'Warning in PweEsurf: nNbTheta must be large for averages to be meaningful'
0010 end
0011 
0012 theta=linspace(0,pi,nNbTheta); % row [1 x T]
0013 
0014 % get theta dependence if not provided
0015 if nargin < 7
0016     if isfield(stAbcdn1,'an1')
0017         nNmax=size(stAbcdn1.an1,2);
0018     else
0019         nNmax=size(stAbcdn1.cn1,2);
0020     end
0021     stPinTaun=PwePinTaun(nNmax,transpose(theta)); % fields are [T x nNmax]
0022 end
0023 
0024 % calculate regular VSH expansion (coeffs a,b)
0025 if strcmpi(sRegion,'outside')
0026     % get regular field from known plane wave expression of incident field
0027     disp 'PweEsurf: Outside region: get regular field directly from PWE expression'
0028     stEAllPhiReg=PweEincThetaAllPhi(lambda,epsilon,r0,theta);
0029 else
0030     if strcmpi(sRegion,'scattering')
0031         disp 'PweEsurf: scattering only: regular VSH expansion is zero...'
0032         stEAllPhiReg.Ecr=0;
0033         stEAllPhiReg.Ect=0;
0034         stEAllPhiReg.Esf=0;
0035     else
0036         disp 'PweEsurf: Computing regular VSH expansions (coeffs a,b)...'
0037         stEAllPhiReg=PweEgenThetaAllPhi(lambda,epsilon,stAbcdn1.an1,stAbcdn1.bn1,r0,theta,'j',stPinTaun);
0038     end
0039 end
0040 if strcmpi(sRegion,'inside')
0041     disp 'PweEsurf: Inside: Irregular VSH expansions is zero...'
0042     stEAllPhiIrr.Ecr=0;
0043     stEAllPhiIrr.Ect=0;
0044     stEAllPhiIrr.Esf=0;
0045 else
0046     % calculate irregular VSH expansion (coeffs c,d)
0047     disp 'PweEsurf: Computing irregular VSH expansions (coeffs c,d)...'
0048     stEAllPhiIrr=PweEgenThetaAllPhi(lambda,epsilon,stAbcdn1.cn1,stAbcdn1.dn1,r0,theta,'h1',stPinTaun);
0049 end
0050 
0051 disp 'PweEsurf: Compiling results and averages...'
0052 % Ecr, Ect, and Esf are [L x T]
0053 stEsurf.Ecr=GenCheckSum2Mat(stEAllPhiReg.Ecr,stEAllPhiIrr.Ecr,'Ecr','PweEsurf');
0054 stEsurf.Ect=GenCheckSum2Mat(stEAllPhiReg.Ect,stEAllPhiIrr.Ect,'Ect','PweEsurf');
0055 stEsurf.Esf=GenCheckSum2Mat(stEAllPhiReg.Esf,stEAllPhiIrr.Esf,'Esf','PweEsurf');
0056 
0057 stEsurf.theta=theta;
0058 stEsurf.r0=r0;
0059 stEsurf.lambda=lambda;
0060 
0061 clear stEAllPhiReg stEAllPhiIrr;
0062 
0063 % computes surface-averages
0064 stEsurf=PweEFaverages(stEsurf);
0065  
0066 disp 'PweEsurf: done...'
0067 disp ' '
0068 
0069 
0070

This web page is part of the SPlaC package © 2008. Contact: Eric Le Ru
Generated on Wed 03-Dec-2008 11:10:14 by m2html © 2003 (adapted)