problem in for loop not working in fixed point iteration while loop
Ältere Kommentare anzeigen
I donot know how to solve this problem
after 1st of iteration I got this error in to for loop.
the code attached with its variables

clear all
load('results.mat')
N_pr = 99;
P_sat = Pb;
P_abandon = 1700;
delh_pr = (P_sat-P_abandon)/N_pr;
for pr=1:N_pr+1
Pavg_pr1(pr)=P_abandon+(pr-1)*delh_pr;
end
Pavg_pr1 = sort(Pavg_pr,'descend');
Pavg_pr1=Pavg_pr';
load('Pavg_pr.mat')
%--------------------------------------------------
Vpi = (W*Bwi + N*Boi)*(cf*(p0-P_sat));
%--------------------------------------------------
%Interpolate PVT data @ P_sat & Pavg_pr
%--------PVT @ P_sat-----------
Boi = pchip(P_o,Bo,5200);
Bo_Pb = pchip(P_o,Bo,P_sat);
Bg_Pb = pchip(P_g,Bg,P_sat);
muo_Pb=pchip(P_o,mu_o,P_sat);
mug_Pb=pchip(P_g,mu_g,P_sat);
Rs_Pb = pchip(P_o,Rs,P_sat);
Rv_Pb=pchip(P_g,Rv,P_sat);
%---------- PVT @ Pavg_pr-------
Bo_pr = pchip(P_o,Bo,Pavg_pr);
Bg_pr = pchip(P_g,Bg,Pavg_pr);
muo_pr=pchip(P_o,mu_o,Pavg_pr);
mug_pr=pchip(P_g,mu_g,Pavg_pr);
Rs_pr = pchip(P_o,Rs,Pavg_pr);
Rv_pr=pchip(P_g,Rv,Pavg_pr);
%--------------------------------------------------------------------
%calculate Np @ P_sat %Ignored Vpi
Np_sat = ((N*(Bo_Pb-Boi))+Vpi)/Bo_Pb;
%--------------------------------------------------------------------
%calculate Bto , Xn , Xg , Fn & Fg %Ignored Vpi in Fn & Fg
Bto_pr = (Bo_pr.*(1-Rv_pr.*Rs_Pb)+Bg_pr.*(Rs_Pb-Rs_pr))./(1-Rs_pr.*Rv_pr);
Xn = (Bo_pr-(Bg_pr.*Rs_pr))./(1-(Rv_pr.*Rs_pr));
Xg = (Bg_pr-(Bo_pr.*Rv_pr))./(1-(Rv_pr.*Rs_pr));
Fn = Xn./(Bto_pr-Boi);
Fg = Xg./(Bto_pr-Boi);
%-----------------------------------------------------------------------
dNp=zeros(length(Pavg_pr),1);
dGp =zeros(length(Pavg_pr),1);
Np_cum=zeros(length(Pavg_pr),1);
Gp_cum = zeros(length(Pavg_pr),1);
Rp_guess = 10;
dNp(1)=Np_sat;
dGp(1)=Np_sat*Rp_guess;
Np_cum(1)=dNp(1);
Gp_cum(1) =dGp(1);
Error = 100;
iterationss=0;
while Error > 0.5E-3
%--------------------------------------
%Calculate dNp , dGp , cum Np , cum Gp
size(Rp_guess)
for y =2:length(Pavg_pr)
dNp(y)=((N-(Np_cum(y-1)).*Fn(y))-(Gp_cum(y-1).*Fg(y)))./...
(Fn(y)+(Rp_guess.*Fg(y)));
dGp(y)=dNp(y).*Rp_guess;
Np_cum(y) =dNp(y)+ Np_cum(y-1);
Gp_cum(y) = dGp(y)+Gp_cum(y-1);
end
%Np_cum =cumsum(dNp);
%Gp_cum = cumsum(dGp);
%--------------------------------------
%Calculate Saturations and Relative Permeabilities
%Sg_pr , Krg_pr , So_pr , Kro_pr
Wps=0;
Bw_pr=Bwi;
Sg_pr = Bg_pr.*((G-Gp_cum)-(N-Np_cum).*Rs_pr)./((W-Wps).*Bw_pr.*(1-Rs_pr.*Rv_pr)+(G-Gp_cum).*(Bg_pr-Rv_pr.*Bo_pr)+(N-Np_cum).*(Bo_pr-Rs_pr.*Bg_pr));
So_pr = Bo_pr.*((N-Np_cum)-(G-Gp_cum).*Rv_pr)./((W-Wps).*Bw_pr.*(1-Rs_pr.*Rv_pr)+(G-Gp_cum).*(Bg_pr-Rv_pr.*Bo_pr)+(N-Np_cum).*(Bo_pr-Rs_pr.*Bg_pr));
Krg_pr = pchip(SoT,KrgT,So_pr);
Kro_pr = pchip(SoT,KroT,So_pr);
%-------------------------------------
%Calculate Rp_new
Rp_new = ((Krg_pr./(mug_pr.*Bg_pr))+((Kro_pr.*Rs_pr)./(muo_pr.*Bo_pr)))./...
((Kro_pr./(muo_pr.*Bo_pr))+((Krg_pr.*Rv_pr)./(mug_pr.*Bg_pr)));
Error = abs(Rp_guess-Rp_new);
Rp_guess = Rp_new;
iterationss=iterationss+1
clc
Error;
end
3 Kommentare
KALYAN ACHARJYA
am 1 Jul. 2023
Please share Pavg_pr.mat file.
Hazem Mohamed
am 1 Jul. 2023
Rp_guess becomes 86x1 in the second iteration. Thus in the loop
for y =2:length(Pavg_pr)
dNp(y)=((N-(Np_cum(y-1)).*Fn(y))-(Gp_cum(y-1).*Fg(y)))./...
(Fn(y)+(Rp_guess.*Fg(y)));
dGp(y)=dNp(y).*Rp_guess;
Np_cum(y) =dNp(y)+ Np_cum(y-1);
Gp_cum(y) = dGp(y)+Gp_cum(y-1);
end
you try to assign arrays to scalars which throws an error.
Akzeptierte Antwort
Weitere Antworten (0)
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!