Function with multiple output within a parfor loop giving assigment mismatch error
1 view (last 30 days)
Show older comments
I was wondering if someone could help with the following. I have the following code below, which runs fine using a parfor loop.
ImpedanceMat_Wind = ones(size(LatMat,1),size(LatMat,2),size(Adjacency,3),...
length(FL),length(timeofday)) * Inf;
TempMat_Wind = ones(size(LatMat,1),size(LatMat,2),size(Adjacency,3),...
length(FL),length(timeofday)) * Inf;
DistanceMat = ones(size(LatMat,1),size(LatMat,2),size(Adjacency,3)) * Inf;
for ii=1:size(LatMat,1)
for jj=1:size(LatMat,2)
parfor kk=1:size(Adjacency,3)
if (Adjacency(ii,jj,kk) ~= -999)
row = floor(Adjacency(ii,jj,kk)/(size(LatMat,2)));
if (rem(Adjacency(ii,jj,kk),size(LatMat,2)) > 0)
row = row + 1;
end
col = rem(Adjacency(ii,jj,kk),size(LatMat,2));
if (col == 0)
col = size(LatMat,2);
end
ImpedanceMat_Wind(ii,jj,kk,:,:) = CalculateImpedance4D(LatMat,...
LonMat,ii,jj,row,col,UwndMat,VwndMat,TempMat,...
mach_number,FL,timeofday);
[DistanceMat(ii,jj,kk),~] = distance('rh',LatMat(ii,jj),...
LonMat(ii,jj),LatMat(row,col),LonMat(row,col));
end
end
end
end
I then modified the function 'CalculateImpedance' so that it will produce two outputs and rewrite the above code as
ImpedanceMat_Wind = ones(size(LatMat,1),size(LatMat,2),size(Adjacency,3),... length(FL),length(timeofday)) * Inf; TempMat_Wind = ones(size(LatMat,1),size(LatMat,2),size(Adjacency,3),... length(FL),length(timeofday)) * Inf; DistanceMat = ones(size(LatMat,1),size(LatMat,2),size(Adjacency,3)) * Inf;
for ii=1:size(LatMat,1)
for jj=1:size(LatMat,2)
parfor kk=1:size(Adjacency,3)
if (Adjacency(ii,jj,kk) ~= -999)
row = floor(Adjacency(ii,jj,kk)/(size(LatMat,2)));
if (rem(Adjacency(ii,jj,kk),size(LatMat,2)) > 0)
row = row + 1;
end
col = rem(Adjacency(ii,jj,kk),size(LatMat,2));
if (col == 0)
col = size(LatMat,2);
end
[ImpedanceMat_Wind(ii,jj,kk,:,:),TempMat_Wind(ii,jj,kk,:,:)] =
CalculateImpedance4D(LatMat,...
LonMat,ii,jj,row,col,UwndMat,VwndMat,TempMat,...
mach_number,FL,timeofday);
[DistanceMat(ii,jj,kk),~] = distance('rh',LatMat(ii,jj),...
LonMat(ii,jj),LatMat(row,col),LonMat(row,col));
end
end
end
end
and this gives a subscripted assignment dimension mismatch error at line 34, which corresponds to the line 'parfor kk=1:size(Adjacency,3)'. I'm really confused because the second output is pre-allocated and has exactly the same shape as the first. It's only when I direct the function to also accept the second output that I get this error. Any help would be greatly appreciated. Thanks!
0 Comments
Answers (0)
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!