diff options
Diffstat (limited to 'openEMS/matlab/DumpFF2VTK.m')
-rw-r--r-- | openEMS/matlab/DumpFF2VTK.m | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/openEMS/matlab/DumpFF2VTK.m b/openEMS/matlab/DumpFF2VTK.m new file mode 100644 index 0000000..8e6e2f8 --- /dev/null +++ b/openEMS/matlab/DumpFF2VTK.m @@ -0,0 +1,105 @@ +function DumpFF2VTK(filename, farfield, thetaRange, phiRange, varargin) +% DumpFF2VTK(filename, farfield, thetaRange, phiRange, varargin) +% +% Dump 3D far field pattern to a vtk file +% +% input: +% filename: filename of VTK file, existing file will be overwritten +% farfield: farfield in V/m +% thetaRange: theta range in deg +% phiRange: phi range in deg +% +% variable input: +% 'scale': - linear scale of plot, doesn't affect gain values +% 'logscale': - if set, show farfield with logarithmic scale +% - set the dB value for point of origin +% - values below will be clamped +% 'maxgain': - add max gain in dB to normalized farfield +% - only valid if logscale is set +% - default is 0dB +% +% example: +% DumpFF2VTK(filename, farfield, thetaRange, phiRange, ... +% 'scale', 2, 'logscale', -20, 'maxgain', 3) +% +% see also examples/NF2FF/infDipol.m +% +% See also CreateNF2FFBox, CalcNF2FF +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig + + +% defaults +scale = 1; +maxgain = 0; +logscale = []; + +for n=1:2:numel(varargin) + if (strcmp(varargin{n},'maxgain')==1); + maxgain = varargin{n+1}; + elseif (strcmp(varargin{n},'logscale')==1); + logscale = varargin{n+1}; + elseif (strcmp(varargin{n},'scale')==1); + scale = varargin{n+1}; + end +end + +if ~isempty(logscale) + farfield = 20*log10(farfield) + maxgain - logscale; + ind = find(farfield<0); + farfield(ind)=0; +else + % force 0 for linear plot + logscale = 0; +end + +t = thetaRange*pi/180; +a = phiRange*pi/180; + +fid = fopen(filename,'w+'); + +% set nan values to zero +ind = find(isnan(farfield)); +if (~isempty(ind)) + warning('openEMS:Dump2VTK','field contains nan, setting to zero'); + farfield(ind)=0; +end + +% set inf values to zero +ind = find(isinf(farfield)); +if (~isempty(ind)) + warning('openEMS:Dump2VTK','field contains inf, setting to zero'); + farfield(ind)=0; +end + + +fprintf(fid,'# vtk DataFile Version 3.0\n'); +fprintf(fid,'Structured Grid by matlab-interface of openEMS\n'); +fprintf(fid,'ASCII\n'); +fprintf(fid,'DATASET STRUCTURED_GRID\n'); + +fprintf(fid,'DIMENSIONS %d %d %d\n',1,numel(t),numel(a)); + +fprintf(fid,'POINTS %d double\n',numel(t)*numel(a)); + +for na=1:numel(phiRange) + for nt=1:numel(thetaRange) + fprintf(fid,'%e %e %e\n',... + scale*farfield(nt,na)*sin(t(nt))*cos(a(na)),... + scale*farfield(nt,na)*sin(t(nt))*sin(a(na)),... + scale*farfield(nt,na)*cos(t(nt))); + end +end + + + +fprintf(fid,'\n\n'); + +fprintf(fid,'POINT_DATA %d\n',numel(t)*numel(a)); + +fprintf(fid,['SCALARS gain double 1\nLOOKUP_TABLE default\n']); +fclose(fid); +dumpField = farfield(:) + logscale; +save('-ascii','-append',filename,'dumpField') |