% -------------------------------------------------------------------------
% Funkce HfssInterpolatingSweep(fid, HName, HSolutionName, HfStart, HfStop,
% HnPoints, HnMaxSols, HiTol ) potřebná k vytvoření interpolačnímu rozsahu krokování
% v analýze.
% 
% Popis funkce :
% -------------
% Funkce potrebna pro vytvoreni krokovani v analyze.
% 
% Parametery :
% ------------
% fid - soubor identifikující historii HFSS skriptu.
% HName - jméno interpolačního rozsahu.
% HSolutionName – jméno analýzy, jako interpolačního rozsahu krokování, který bude přidán.
% HfStart - startovní frekvence rozsahu krokování v GHz.
% HfStop - cílová frekvence rozsahu krokování v GHz.
% HnPoints - počet kroků v rozsahu (přednastaveno je 1000).
% HnMaxSols - maximum interpolačních bodů, které jsou potřeba k analyzování (více bodů
% bude záruka konvergence) – přednastaveno je 101.
% HiTol - interpolační tolerance (přednastavená na 0.5).
% 
%
% Priklad pouziti funkce :
% ---------
% fid = fopen('antenna.m', 'wt');
% ... 
% HfssInterpolatingSweep(fid, 'Interp600to900MHz', 'Solve750MHz', 0.6, ...
%                        0.9, 1000, 101, 0.5);
%
% -------------------------------------------------------------------------

function HfssInterpolatingSweep(fid, HName, HSolutionName, HfStartGHz, ...
                                HfStopGHz, HnPoints, HnMaxSols, HiTol)

 global Module Design                           
% arguments processor.
if (nargin < 5)
	error('Insufficient # of arguments');
elseif (nargin < 6)
	HnPoints = [];
	HnMaxSols = [];
	HiTol = [];
elseif (nargin < 7)
	HnMaxSols = [];
	HiTol = [];
elseif (nargin < 8)
	HiTol = [];
end;

% process default arguments.
if isempty(HnPoints)
	HnPoints = 1000;
end;
if isempty(HnMaxSols)
	HnMaxSols = 101;
end;
if isempty(HiTol)
	HiTol = 0.5;
end;

%zapis do souboru temp
fprintf(fid,'%% Nastaveni krokovani analyzy\n');
fprintf(fid,'Module = Design.GetModule(''AnalysisSetup'');\n');
fprintf(fid,['Module.InsertDrivenSweep(''',HSolutionName,''',...\n']);
fprintf(fid,['{''NAME:',HName,''',...\n']);
fprintf(fid,'''Type:='',''Interpolating'',...\n');
fprintf(fid,['''InterpTolerance:='',',num2str(HiTol),',...\n']);
fprintf(fid,['''InterpMaxSolns:='',',num2str(HnMaxSols),',...\n']);
fprintf(fid,'''SetupType:='',''LinearCount'',...\n');
fprintf(fid,['''StartFreq:='',''',num2str(HfStartGHz),'GHz'',...\n']);
fprintf(fid,['''StopFreq:='',''',num2str(HfStopGHz),'GHz'',...\n']);
fprintf(fid,['''Count:='',',num2str(HnPoints),',...\n']);
fprintf(fid,'''SaveFields:='',false,...\n');
fprintf(fid,'''ExtrapToDC:='',false});\n\n');

% Prime vytvoreni funkce v programu HFSS. 
Module = Design.GetModule('AnalysisSetup');
Module.InsertDrivenSweep(HSolutionName,...
{['NAME:',HName],...
'Type:=','Interpolating',...
'InterpTolerance:=',HiTol,...
'InterpMaxSolns:=',HnMaxSols,...
'SetupType:=','LinearCount',...
'StartFreq:=',[num2str(HfStartGHz),'GHz'],...
'StopFreq:=',[num2str(HfStopGHz),'GHz'],...
'Count:=',HnPoints,...
'SaveFields:=',false,...
'ExtrapToDC:=',false});
