%KKopt.m
%kaller KKfmincon.m, KKnonlcon.m og trykk.m
clear all
global Z N_OH N_FD N_K N_EK N_FV T_OH_RG_0 T_OH_D_0 T_FD_RG_0 T_EK_RG_0 T_FV_RG_0

format compact
format long g

%load results/NyestKKopt/opt110
load results/NyestKKopt/opt010
%uX = [F_CH4_0; F_LUFT_0; w_8_0; w_15_0; w_12_0; w_21_0; X_BK_0; T_OH_0; T_FD_0; h_DR_0; T_K_0; h_KT_0; T_DE_0; h_DE_0; T_EK_0; T_FV_0];

%Pådrag 
    %u = [F_CH4_0; F_LUFT_0; w_8_0; w_15_0; w_12_0; w_21_0]
    
%Forstyrrelser
    %d = [p_CH4; p_LUFT; T_CH4; T_LUFT]
    d = [20E5; 1E5; 283; 283];  %Pa (d(1:2)) og K (d(3:4)) (verdier hentet fra Skogestad(2000))
    
%Initialverdier for overheter
N_OH = 3;       %Antall celler i OH
T_OH_RG_0 = uX010(12:14); %[798; 770; 724];  %K, T(overheter,røykgass,celle 1, 2 og 3) (fra KK3opt.m)                                        
T_OH_D_0 = uX010(15:17); %[772; 727; 653]; %T(overheter,damp,celle 1, 2 og 3) (fra KK3opt.m)

%Initialverdier for drum og fordamper
N_FD = 3;       %Antall celler i fordamperen
T_FD_RG_0 = uX010(18:20); %[611; 564; 545];  %K, T(fordamper, røykgass, celle 1, 2 og 3) Foreløpige startverdier 

%Initialbetingelser for kondensator
N_K = 3;        %Antall celler i kondensatoren

%Initialverdier for ekonomiser
N_EK = 3;   %Antall celler i ekonomiseren
T_EK_RG_0 = uX010(29:31); %[533; 513; 480];  %K, T(ekonomiser, røykgass, celle 1, 2 og 3), foreløpige startverdier

%Initialverdier for forvarmer
N_FV = 3;   %Antall celler i FV
T_FV_RG_0 = uX010(35:37); %[467; 455; 445]; %K, foreløpige initialverdier
    
    uX = uX010;
    %uX = [uX023(1:28); uX023(30:41)]; %Fjerner tilstanden h_DE
    %uX01(22) = 1.0; %h_DR
    %uX01(27) = 1.0; %h_KT
    %uX = uX(:);
    %uX = [F_CH4_0; F_LUFT_0; w_8_0; w_15_0; w_12_0; w_21_0; X_BK_0; T_OH_0; T_FD_0; h_DR_0; T_K_0; h_KT_0; T_DE_0; T_EK_0; T_FV_0];
    %uXsc = [1E2; 1E4; 1E1; 1E1; 1E2; 1; 1; 1E1; 1; 1; 1E3; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2];
    %uXsc = [1E2; 1E4; 1E1; 1E1; 1E2; 1; 1; 1E1; 1; 1; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2];
    uXsc = [1E3; 1E4; 1E1; 1E1; 1; 1; 1E1; 1E2; 1; 1E1; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2];%Denne ble brukt ved opt. av nom. verdier byttet litt mellom uXsc(T_DE)=1 og 1E2
    %uXsc = [1E3; 1E4; 1E1; 1E1; 1; 1; 1E1; 1E2; 1; 1E1; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2];%Denne ble brukt ved opt. av nom. verdier byttet litt mellom uXsc(T_DE)=1 og 1E2
    %uXsc = [1E1; 1E3; 1; 1; 1E1; 1; 1; 1E1; 1; 1; 1E3; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2; 1E2];%Denne ble brukt ved opt. av nom. verdier byttet litt mellom uXsc(T_DE)=1 og 1E2
    %uXsc = ones(40,1);
    uX=uX./uXsc;                                    %Skalerer uX

%Options for optimalisering (fmincon)
    options = optimset;
    options.Display = 'iter';
    options.Diagnostics = 'on';
    options.LargeScale = 'off';
    options.GradConstr = 'off';
    options.GradObj = 'off';
    options.MaxFunEvals = 5000;
    options.MaxIter = 2000;

%fmincon
    [uX,fval,exitflag,output,lambda,grad,hessian] = fmincon('KKfmincon',uX,[],[],[],[],[],[],'KKnonlcon',options,d,uXsc)
    [uX,fval,exitflag,output,lambda,grad,hessian] = fmincon('KKfmincon',uX,[],[],[],[],[],[],'KKnonlcon',options,d,uXsc)
    [uX,fval,exitflag,output,lambda,grad,hessian] = fmincon('KKfmincon',uX,[],[],[],[],[],[],'KKnonlcon',options,d,uXsc)
    
%d1 = d; 
%uX02 = uX.*uXsc; 
%save results/NyestKKopt/bottleneck02 uX02 exitflag fval %01 henviser til forstyrrelse og opt.nr. (ingen forst. og første opt.)
                                                              %11 betyr redusert metantrykk og første opt.
exitflag
Z