Clear Filters
Clear Filters

Parfor Error Handling results in falsely reported error in each loop

2 views (last 30 days)
Hello, I have a problem regarding parfor loops. I try to solve an array of pdeobjects, that all have a different partly different geometry. Since for some of those geometries the pdenonlin solver doesnt find a solution ( -> Step size to small, to many iterations) I tried using an error handle:
Torque=zeros(1,(length(sCalc.angle)-1));
Error=zeros(1,(length(sCalc.angle)-1));
parfor i=1:1:(length(sCalc.angle)-1)
try
results = solvepde(sMotor(i));
Torque(i)=getTorque2(results);
result(i)=results;
Error(i)=0;
catch
Error(i)=1;
end
end
This works for a normal for:
Error 0 0 0 0 1 0
But when using parfor, even though it doesnt fail I get an Error for each loop:
Error 1 1 1 1 1 1
What am I doing wrong?
  1 Comment
OCDER
OCDER on 8 Sep 2017
Not sure because we don't know what these are: sCalc, sMotor, solvepde, and getTorque2. But instead of catching your Error in a matrix, try to display the error message in the catch statement. That may reveal the error source.
Torque=zeros(1,(length(sCalc.angle)-1));
Error=zeros(1,(length(sCalc.angle)-1));
parfor i=1:1:(length(sCalc.angle)-1)
try
results = solvepde(sMotor(i));
Torque(i)=getTorque2(results);
result(i)=results;
Error(i)=0;
catch ME
disp(ME.message); %Will show the error info
Error(i)=1;
end
end

Sign in to comment.

Answers (1)

Thomas Förster
Thomas Förster on 9 Sep 2017
Well, rookie mistake on my part, doing it like this it works. Would recommend to not use pde arrays in the way that I use them, since they need a lot of memory!
Works like this:
Torque=zeros(1,(length(sCalc.angle)-1));
Error=zeros(1,(length(sCalc.angle)-1));
result(length(sCalc.angle)-1)=pde.StationaryResults;
parfor i=1:1:(length(sCalc.angle)-1)
try
result(i) = solvepde(sMotor(i));
Torque(i)=getTorque2(result(i));
Error(i)=0;
catch
Error(i)=1;
end
end

Products

Community Treasure Hunt

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

Start Hunting!