clc
clear all
fprintf('ensure all PRT parameters are correct\n')
xt=0.1;
wr=0.17;
wd=0.514;
hd=0.17;
w=wd+wr;
hr= 0.235;
ht=0.610;
rd= 0.058;
rho=997.561;
g=9.81;
Vt=wr*xt*(2*hr+w*wr/hd);
alfa3=g*rho*xt*wr*w;
alfa4=g*rho*xt*wr;
dn=0.02;
dl=0.02;
TTRange=[1995,12.611455481821041];
Sim_R=readtable('leftdH_009.csv');
dH=Sim_R.leftdHMonitor_LeftdHMonitor(TTRange(1):end);
Times=Sim_R.Time(TTRange(1):end)-TTRange(2);
Sim_Vel=readtable('leftdHVel_009.csv');
Vel=Sim_Vel.VelocityLevelLeftMonitor_VelocityLevelLeftMonitor_m_s_(TTRange(1):end);
Accel=diff(Vel)./(diff(Times));
Accel(end+1)=Accel(end);
ddt=0.01;
Inter_time=(0:ddt:floor(Times(end)))';
Inter_dH=interp1(Times,dH,Inter_time,'spline');
Inter_Vel=interp1(Times,Vel,Inter_time,'spline');
Inter_Accel=diff(Inter_Vel)./(diff(Inter_time));
Inter_Accel(end+1)=Inter_Accel(end);
A=[Accel*rho,Vel,Vel.*abs(Vel)];
C=-2*alfa4*dH;
Coeef=pinv(A)*C;
VtFit=Coeef(1);
dlFit=Coeef(2);
dnFit=Coeef(3);
tspan=0:0.001:Times(end);
y0=[dH(1) Vel(1)];
data = iddata(Inter_dH,[],ddt,'Name','CFD_Model3D_009');
data.OutputName = 'Water Level';
data.OutputUnit = 'mm';
data.Tstart = 0;
data.TimeUnit = 's';
order = [1 0 2];
initial_states = [dH(1); Vel(1)];
Ts=0;
parameters = {rho,alfa4,VtFit,dlFit,dnFit};
nonlinear_model = idnlgrey('Tank_non_linearLagrangian',order,parameters,initial_states,Ts);
setpar(nonlinear_model,'Fixed',{true true false false false});
setpar(nonlinear_model,'Minimum',{rho,alfa4,0.001, 0.001 dnFit});
setpar(nonlinear_model,'Maximum',{rho,alfa4,0.1, 5 0.1});
nonlinear_model = nlgreyest(data,nonlinear_model,'Display','Full');
Vt_est = nonlinear_model.Parameters(3).Value;
dl_est = nonlinear_model.Parameters(4).Value;
dn_est = nonlinear_model.Parameters(5).Value;
[nonlinear_b_est, S_deviation] = getpvec(nonlinear_model,'free')
compare(data,nonlinear_model)