summaryrefslogtreecommitdiff
path: root/openEMS/matlab/private/ReadNF2FF.m
diff options
context:
space:
mode:
Diffstat (limited to 'openEMS/matlab/private/ReadNF2FF.m')
-rw-r--r--openEMS/matlab/private/ReadNF2FF.m82
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