summaryrefslogtreecommitdiff
path: root/openEMS/matlab/InitFDTD.m
diff options
context:
space:
mode:
Diffstat (limited to 'openEMS/matlab/InitFDTD.m')
-rw-r--r--openEMS/matlab/InitFDTD.m64
1 files changed, 64 insertions, 0 deletions
diff --git a/openEMS/matlab/InitFDTD.m b/openEMS/matlab/InitFDTD.m
new file mode 100644
index 0000000..dba5120
--- /dev/null
+++ b/openEMS/matlab/InitFDTD.m
@@ -0,0 +1,64 @@
+function FDTD = InitFDTD(varargin)
+% function FDTD = InitFDTD(varargin)
+%
+% Inititalize the FDTD data-structure.
+%
+% optional field arguments for usage with openEMS:
+% NrTS: max. number of timesteps to simulate (e.g. default=1e9)
+% EndCriteria: end criteria, e.g. 1e-5, simulations stops if energy has
+% decayed by this value (<1e-4 is recommended, default=1e-5)
+% MaxTime: max. real time in seconds to simulate
+% OverSampling: nyquist oversampling of time domain dumps
+% CoordSystem: choose coordinate system (0 Cartesian, 1 Cylindrical)
+% MultiGrid: define a cylindrical sub-grid radius
+% TimeStep: force to use a given timestep (dangerous!)
+% TimeStepFactor: reduce the timestep by a given factor (>0 to <=1)
+% TimeStepMethod: 1 or 3 chose timestep method (1=CFL, 3=Rennigs (default))
+% CellConstantMaterial: set to 1 to assume a material is constant inside
+% a cell (material probing in cell center)
+%
+% examples:
+% %default init with 1e9 max. timesteps and -50dB end-criteria
+% FDTD = InitFDTD();
+%
+% %init with 1e6 max. timesteps and -60dB end-criteria
+% FDTD = InitFDTD('NrTS', 1e6, 'EndCriteria', 1e-6);
+%
+% %cylindrical FDTD simulation
+% FDTD = InitFDTD('CoordSystem', 1);
+%
+% See also InitCSX
+%
+% openEMS matlab interface
+% -----------------------
+% author: Thorsten Liebig (c) 2010-2013
+
+% default values
+NrTS = 1e9;
+endCrit = 1e-5;
+
+% legacy support
+if ((nargin==1) && (isnumeric(varargin{1})))
+ NrTS = varargin{1};
+ warning('openEMS:InitFDTD',['Syntax for InitFDTD has changed, use: "InitFDTD(''NrTS'', ' num2str(NrTS) ')" instead! Legacy support enabled.']);
+elseif ((nargin>1) && (isnumeric(varargin{1})) && (isnumeric(varargin{2})))
+ NrTS = varargin{1};
+ endCrit = varargin{2};
+ varargin(1:2) = [];
+ warning('openEMS:InitFDTD',['Syntax for InitFDTD has changed, use: "InitFDTD(''NrTS'', ' num2str(NrTS) ', ''EndCriteria'', ' num2str(endCrit) ')" instead! Legacy support enabled.']);
+end
+
+for n=1:numel(varargin)/2
+ if strcmpi(varargin{2*n-1},'CoordSystem')==1
+ FDTD.ATTRIBUTE.CylinderCoords=varargin{2*n}==1;
+ elseif strcmpi(varargin{2*n-1},'NrTS')==1
+ NrTS=varargin{2*n};
+ elseif strcmpi(varargin{2*n-1},'EndCriteria')==1
+ endCrit=varargin{2*n};
+ else
+ FDTD.ATTRIBUTE.(varargin{2*n-1})=varargin{2*n};
+ end
+end
+
+FDTD.ATTRIBUTE.NumberOfTimesteps=NrTS;
+FDTD.ATTRIBUTE.endCriteria=endCrit;