diff options
Diffstat (limited to 'openEMS/matlab/private/ReadNF2FF.m')
-rw-r--r-- | openEMS/matlab/private/ReadNF2FF.m | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/openEMS/matlab/private/ReadNF2FF.m b/openEMS/matlab/private/ReadNF2FF.m new file mode 100644 index 0000000..55f67f9 --- /dev/null +++ b/openEMS/matlab/private/ReadNF2FF.m @@ -0,0 +1,82 @@ +function nf2ff = ReadNF2FF(nf2ff) +% function nf2ff = ReadNF2FF(nf2ff) +% +% internal function to read calculated nf2ff data, use CalcNF2FF to read +% existing nf2ff data +% +% See also: CalcNF2FF, CreateNF2FFBox +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig, 2012 + +file = nf2ff.hdf5; + +hdf_mesh = ReadHDF5Mesh(file); + +nf2ff.r = double(hdf_mesh.lines{1}); +nf2ff.theta = double(hdf_mesh.lines{2}); +nf2ff.phi = double(hdf_mesh.lines{3}); + +% read attributes +nf2ff.freq = ReadHDF5Attribute(file,'/nf2ff','Frequency'); +nf2ff.Prad = ReadHDF5Attribute(file,'/nf2ff','Prad'); +nf2ff.Dmax = ReadHDF5Attribute(file,'/nf2ff','Dmax'); + +try + nf2ff.Eps_r = ReadHDF5Attribute(file,'/nf2ff','Eps_r'); +catch + nf2ff.Eps_r = ones(size(nf2ff.freq)); +end +try + nf2ff.Mue_r = ReadHDF5Attribute(file,'/nf2ff','Mue_r'); +catch + nf2ff.Mue_r = ones(size(nf2ff.freq)); +end + +if isOctave + hdf = load( '-hdf5', file ); + for n=1:numel(nf2ff.freq) + nf2ff.E_theta{n} = double(hdf.nf2ff.E_theta.FD.(['f' int2str(n-1) '_real']) +1i*hdf.nf2ff.E_theta.FD.(['f' int2str(n-1) '_imag']) ); + nf2ff.E_phi{n} = double(hdf.nf2ff.E_phi.FD.(['f' int2str(n-1) '_real']) +1i*hdf.nf2ff.E_phi.FD.(['f' int2str(n-1) '_imag']) ); + nf2ff.E_norm{n} = double(sqrt(abs(nf2ff.E_theta{n}).^2+abs(nf2ff.E_phi{n}).^2)); + nf2ff.P_rad{n} = double(hdf.nf2ff.P_rad.FD.(['f' int2str(n-1)])); + end +else + % matlab compatibility to older versions + if verLessThan('matlab','7.12') + % read data + for n=1:numel(nf2ff.freq) + nf2ff.E_theta{n} = double(hdf5read(file,['/nf2ff/E_theta/FD/f' int2str(n-1) '_real']) + 1i*hdf5read(file,['/nf2ff/E_theta/FD/f' int2str(n-1) '_imag'])); + nf2ff.E_phi{n} = double(hdf5read(file,['/nf2ff/E_phi/FD/f' int2str(n-1) '_real']) + 1i*hdf5read(file,['/nf2ff/E_phi/FD/f' int2str(n-1) '_imag'])); + nf2ff.E_norm{n} = double(sqrt(abs(nf2ff.E_theta{n}).^2+abs(nf2ff.E_phi{n}).^2)); + nf2ff.P_rad{n} = double(hdf5read(file,['/nf2ff/P_rad/FD/f' int2str(n-1)])); + end + else + % read data + for n=1:numel(nf2ff.freq) + nf2ff.E_theta{n} = double(h5read(file,['/nf2ff/E_theta/FD/f' int2str(n-1) '_real']) + 1i*h5read(file,['/nf2ff/E_theta/FD/f' int2str(n-1) '_imag'])); + nf2ff.E_phi{n} = double(h5read(file,['/nf2ff/E_phi/FD/f' int2str(n-1) '_real']) + 1i*h5read(file,['/nf2ff/E_phi/FD/f' int2str(n-1) '_imag'])); + nf2ff.E_norm{n} = double(sqrt(abs(nf2ff.E_theta{n}).^2+abs(nf2ff.E_phi{n}).^2)); + nf2ff.P_rad{n} = double(h5read(file,['/nf2ff/P_rad/FD/f' int2str(n-1)])); + end + end +end + +% Calculation of right- and left-handed circular polarization +% adopted from +% 2012, Tim Pegg <teepegg@gmail.com> + +% cleanup (if exist) +nf2ff.E_cprh = []; +nf2ff.E_cplh = []; + +% Setup vectors for converting to LHCP and RHCP polarization senses +[THETHA PHI] = ndgrid(nf2ff.theta,nf2ff.phi); +cosphi = cos(PHI); +sinphi = sin(PHI); + +for f=1:numel(nf2ff.freq) + nf2ff.E_cprh{f} = (cosphi+1i*sinphi) .* (nf2ff.E_theta{f}+1i*nf2ff.E_phi{f})/sqrt(2); + nf2ff.E_cplh{f} = (cosphi-1i*sinphi) .* (nf2ff.E_theta{f}-1i*nf2ff.E_phi{f})/sqrt(2); +end |