parallel loop in matlab
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi ,
I am new to use parfor in MATLAB. I am trying to convert my for loop in to parfor, but getting problem in varaible definition. Here is the a section of the code where I want to implement parfor. Kindly advice how to run this correctly.
%% matrices initialisation
KB=zeros(sdof,sdof);
KS=zeros(sdof,sdof);
KK=zeros(sdof,sdof);
FF=zeros(sdof,1);
KG=zeros(sdof,sdof);
[DB,DS]=material_mat(E,nu,G,shcof);
parfor i=1:nelem
elecon=elemconn(i,:);
nodes =cor(elecon,1:2);
index1=nodedof(elecon,:).';
index=reshape(index1,1,size(index1,1)*size(index1,2));
[KB_final]=elementstiffness_bending(nodes,DB);
[KS_final,F_final]=elementstiffness_shear(nodes,DS,P);
[KG_final]=geometricstiff(sigma_i,nodes);
KK1=KB_final+KS_final;
[KK,FF,KG] = paral(KK1,F_final,KG_final,index,KK,FF,KG,i);
KB(index,index) = KB(index,index) + KB_final;
end
I am getting problem in defining Kb variable. How to rectify this?
0 Kommentare
Antworten (1)
Edric Ellis
am 28 Jul. 2020
Output variables in parfor loops must be either sliced outputs or reduction outputs. More info here in the doc. In this case, you need KB to be a "reduction" variable since each iteration of your loop computes an increment to that matrix. To fit in with the parfor rules, you cannot index a "reduction" variable, so you need to modify things a little to have each iteration compute a full-sized increment. Something a bit like this
parfor i = 1:nelem
% compute KB_final and index
KB_increment = zeros(sdof);
KB_increment(index,index) = KB_final;
% Use a reduction assignment into KB:
KB = KB + KB_increment;
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!