function [data_sim, data_title] = simulace( varargin )
%UNTITLED2 Summary of this function goes here
%   [data_sim, data_title] = simulace(T_vz, simtime, sim_param, start_values)
%   [data_sim, data_title] = simulace(T_vz, simtime, sim_param, start_values, fmin_param, fmin_param_names)
%   Pri spatne volbe vstupnich parametru vraci data_sim = -1 a data_title =
%   -1

modelName = ('Fytotron_ident.slx');
Tsim = 0.1;

run Inicializace_ident

T_vz = varargin{1};
simtime = varargin{2};
sim_param = varargin{3};
start_values = varargin{4};

if simtime > 30000
    Tsim = 1;
else
    Tsim = 0.5;
end
%   nacteni parametru pro simulaci, ktere nebudou meneny
[ fmin_param_all, fmin_param_names_all ] = loadfminparam_all();
for i = 1:length(fmin_param_names_all)
        if fmin_param_all(i) <= 0
            data_sim = -1;
            data_title = -1;
            return
        end
        eval(sprintf('%s = %.5e;', fmin_param_names_all{1, i}, fmin_param_all(i)));
end


if nargin == 6
    fmin_param = varargin{5};
    fmin_param_names = varargin{6};

    for i = 1:length(fmin_param_names)
        if fmin_param(i) <= 0
            data_sim = -1;
            data_title = -1;
            return
        end
        eval(sprintf('%s = %.5e;', fmin_param_names{i}, fmin_param(i)));
    end
end
%%  vektory vstupnich velicin
% Qm_Cirk1_Chlazeni = sim_param{1};
% P_Cirk1_topne_teleso = sim_param{2};
% Tout_meas = sim_param{3};
% P_LED = sim_param{4};
% T_Cirk1_Chlazeni_zasobnik = sim_param{5};
% Ventil_poloha = sim_param{6};
% Ventilator_chod = sim_param{7};
% Zvlhcovac_ovladani = sim_param{8};
% Odvlhcovac_ovladani = sim_param{9};
% T_komora_merena = sim_param{10};
% T_vymenik_merena = sim_param{11};

T_zadana = sim_param{3};
T_zadana = T_zadana(1, 2);
Tout_meas = [1 273.15+20];

%%  pocatecni hodnoty
T_Okoli = Tout_meas(1, 2);

start_values = [293.15, 293.15, 293.15, 0.5];
T_Komora_pocatecni = start_values(1);

%   pocatecni podminky strop
P_pom = (T_Komora_pocatecni - T_Okoli)/(R_sklo + R_LED + R_strop);
T_sklo_pocatecni = T_Komora_pocatecni - P_pom*R_sklo/2;
T_LED_pocatecni = T_sklo_pocatecni - P_pom*(R_sklo/2 + R_LED/2);
T_strop_pocatecni = T_LED_pocatecni - P_pom*(R_LED/2 + R_strop/2);

%   pocatecni podminky cirkulace
Qm0_Cirk1_vzduch = M*Qv_Cirk1*p_Komora_pocatecni/(T_Komora_pocatecni*Rm);
P0_Cirk1_vzduch = 7/2*p_Komora_pocatecni*Qv_Cirk1 + x0*Qm0_Cirk1_vzduch*(l_voda23+c_pp*T_Komora_pocatecni);
T0_Cirk1 = T_Komora_pocatecni;
Qm0_Cirk1_voda = x0*Qm0_Cirk1_vzduch;

T_Vymenik_Pocatecni = start_values(2);
Par_Komora_prostup_okoli(1) = (T_Komora_pocatecni + T_Okoli)/2;
Par_Komora_prostup_okoli2(1) = (T_Komora_pocatecni + T_Okoli)/2;
Par_LED_prostup_okoli(1) = (T_Komora_pocatecni + T_Okoli)/2;
T_chladici_pocatecni = start_values(3);
fi_Komora_pocatecni = start_values(4);
%   hlavni komora
Parc_tlak_vodni_para = exp(23.58-(4044.2/(T_Komora_pocatecni-37.55)))*fi_Komora_pocatecni;
Parc_tlak_suchy_vzduch = p_Komora_pocatecni-Parc_tlak_vodni_para;
M0_suchy_vzduch = (Parc_tlak_suchy_vzduch*V_Komora*M)/(Rm*T_Komora_pocatecni);
M0_vodni_para = (Parc_tlak_vodni_para*V_Komora*M_voda)/(Rm*T_Komora_pocatecni);
x0 = M0_vodni_para/M0_suchy_vzduch;
%   cirkulace vzduchu
Qm0_Cirk1_vzduch = M*Qv_Cirk1*p_Komora_pocatecni/(T_Komora_pocatecni*Rm);
P0_Cirk1_vzduch = 7/2*p_Komora_pocatecni*Qv_Cirk1 + x0*Qm0_Cirk1_vzduch*(l_voda23+c_pp*T_Komora_pocatecni);
T0_Cirk1 = T_Komora_pocatecni;
Qm0_Cirk1_voda = x0*Qm0_Cirk1_vzduch;

%%  simulace
options = simset('FixedStep', num2str(Tsim), 'SrcWorkspace', 'Current');

warning('off','all')

sim(modelName,  0:simtime, options);

warning('on','all')

data_sim = [T_sim_out.time T_sim_out.signals(1).values T_sim_out.signals(2).values T_sim_out.signals(3).values T_sim_out.signals(5).values T_sim_out.signals(4).values zeros(size(T_sim_out.time)) T_sim_out.signals(6).values];
data_sim = data_sim(1:T_vz/Tsim:end, :);
data_title = {'Cas', 'T komora', 'T vymenik', 'T vzduch za vymenikem', 'T chladici in', 'T chladici out', 'T chladici nadrz', 'Relativni vlhkost'};
end

