It does not stop!

1 view (last 30 days)
This code does not stop if I don't put the condition "while n<nmax".
where is the problem???
D=D39+D40+DO+DNa+DFe; %coefficienti di diffusione
F=F39+F40; %prodotti di fissione
CAPTURE=[Pu39capture+Pu40capture+Nacapture+Fecapture+Ocapture]; %sigma di cattura
FISSION=[Pu39fission+Pu40fission]; %sigma di fissione
ELREM=[Pu39elrem+Pu40elrem+Naelrem+Feelrem+Oelrem]; %sigma di scattering elastico(direclty coupled)
%si passa poi alla creazione delle matrici che serviranno per i sucessivi
%calcoli dei flussi, assegnando anche dei valori iniziali al buckling, a K,
%e definendo il vettore dei flussi
B0=6E-4;
K=0;
FLUX=zeros(26,1);
MATFIS=zeros(26,1); % vettore dei termini di fissione
for ii=1:26
MATFIS(ii)=X(ii)*F(ii);
end
%calcolo un flusso iniziale:
for ii=1:26
FLUX0(ii)=1/F(ii);
end
nmax=10000
n=0;
while abs(K-1)>(10^-5) & n<nmax
%definisco la matrice dei coefficienti andando prima a riempire la diagonale di una matrice vuota
A=zeros(26,26);
for ii=1:26
for jj=1:26
for ii=jj
A(ii,jj)=D(ii).*B0+REMOVAL(ii);
end
end
end
% e successivamente aggiungendo i termini di scattering
% ottenendo una matrice triangolare inferiore
for jj=1:26
if ii~=jj
M(ii,jj)=A(ii,jj)-ELREM(ii)-INELASTIC(ii,jj);
end
end
for ii=1:26
for jj=1:26
COEFFICIENTI(ii,jj)=M(ii,jj)+A(ii,jj);
end
end
% il vettore soluzione dei flussi è:
FLUX= COEFFICIENTI^-1*MATFIS;
%inizialmente la sorgente viene considerata nulla, nelle varie
%iterazioni viene di volta in volta ricalcolata, e di conseguenza anche
%il valore di K viene aggiornato
SOURCE=0;
for ii=1:26
SOURCE=F.*FLUX;
end
K=SOURCE;
%avendo dato a B un valore di partenza molto basso, bisogna
%incrementarlo nelle iterazioni successive
deltaB=10^-6;
format long
B0=B0+deltaB
n = n+1;
end
Raggio=pi/sqrt(B0)

Accepted Answer

Image Analyst
Image Analyst on 9 Sep 2021
Your code doesn't run for us because these variables are not defined:
D=D39+D40+DO+DNa+DFe; %coefficienti di diffusione
F=F39+F40; %prodotti di fissione
CAPTURE=[Pu39capture+Pu40capture+Nacapture+Fecapture+Ocapture]; %sigma di cattura
FISSION=[Pu39fission+Pu40fission]; %sigma di fissione
ELREM=[Pu39elrem+Pu40elrem+Naelrem+Feelrem+Oelrem]; %sigma di scattering elastico(direclty coupled)
but in general you should ALWAYS have a failsafe like "&& n < nMax" to prevent infinite loops.
If it doesn't exit until n hits nMax then there is some other problem with your exit condition abs(K-1)>(10^-5). It must always be true so evidently your K never gets in the range 0.99999 to 1.00001.

More Answers (1)

VBBV
VBBV on 9 Sep 2021
Edited: VBBV on 9 Sep 2021
%if true
while abs(K-1)<(10^-5)
This is check of tolerance using while condition according to your problem
  1 Comment
VBBV
VBBV on 9 Sep 2021
In you case it shouldn't execute the while loop

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!