C# で有限要素解析ライブラリを構築しています。分析する各構造では、要素レベルでいくつかの計算を実行し、結果を構造レベルでまとめる必要があります。多くの要素がある場合、これらすべての計算にはかなりの時間がかかります。
たとえば、要素の剛性マトリックスの計算と、それをグローバル剛性マトリックスに組み立てることがあります。
プロセスでスレッド化を利用する方法はありますか?
public class FEStructure
{
public List<Element> elements = new List<Element>;
public Matrix K;
Struct()
{
// Do some stuff not relevant here
}
public void CalcK()
{
// Create a Global stiffness matrix (n x n)
K = new DenseMatrix(SizeK());
// Process all elements - can it be threaded?
foreach (Element e in elements)
{
// Get the element stiffness matrix and assemble it into K
Matrix Ke = e.CalcKe();
Assemble(Ke);
}
}
public void Assemble(Matrix Ke)
{
// Assembles Ke into K using the element topology
// and lot of fields and methods left out. Code
// operates on K using syntax similar to:
K[i, j] = Ke[k, l];
}
}
編集:
要素行列の計算はe.CalcKe()
独立した計算であり、任意の順序で実行できます。