Converting this 3-nested for loop for parfor
조회 수: 1 (최근 30일)
이전 댓글 표시
The context is a finite element assembly routine where I need to loop over a bunch of mesh elements. In principle, each iteration computes a small local matrix (3x3 in this case) and inserts it into the much larger global matrix according to the indices ie and je.
The iterations are completely independent of each other as I'm pretty sure as my code stands now, it could run through the outer loop in any order without any problems. But of course, this version isn't accepted by MATLAB for parfor format. Can anyone help me out here?
NLoc = 3;
Klocal = zeros(NLoc);
blocal = zeros(NLoc,1);
Aglobal = zeros(NLoc*nElem);
bglobal = zeros(NLoc*nElem,1);
for k=1:nElem
kk = NLoc*(k-1);
Klocal = function1(nElem,k);
blocal = function2(nElem,k);
for i=1:NLoc
ie = i+kk;
bglobal(ie) = bglobal(ie) + blocal(i);
for j=1:NLoc
je = j+kk;
Aglobal(ie,je) = Aglobal(ie,je) + Klocal(i,j);
end
end
end
댓글 수: 0
채택된 답변
Matt J
2013년 11월 9일
편집: Matt J
2013년 11월 9일
If I'm interpreting it right, it looks like
Aglobal = cell(nElem,1);
bglobal = cell(nElem,1);
parfor k=1:nElem
Aglobal{k}=function1(nElem,k);
bglobal{k}=function2(nElem,k);
end
Aglobal=blkdiag(Aglobal{:});
bglobal=cell2mat(bglobal);
댓글 수: 3
Matt J
2013년 11월 9일
You can create an MxN cell array to hold the blocks and fill them as you wish. Essentially, the same was done above with bglobal, which was not block diagonal.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!