四面体のすべての面のノードIDを、対応する四面体IDにリンクしようとしています。
tetras = [1 2 3 4 % Tetra 1
5 6 7 8] % Tetra 2
テトラ1の場合、4つの面があります。
faces = [1 2 3; 1 2 4; 1 3 4; 2 3 4] % Notice these are sorted
次に、これらをデータ構造に格納したいと思います。
tet_for_face = cell(8,8,8) % 8 allows for the maximum node id
tet_for_face{1,2,3} = 1;
tet_for_face{1,2,4} = 1;
tet_for_face{1,3,4} = 1;
tet_for_face{2,3,4} = 1;
これは、 O(1)で特定の顔のテトラIDを見つけることができることを意味します:
tet_for_face{2,3,3}
ans = []
tet_for_face{2,3,4}
ans = 1
このアプローチの問題は、連続したメモリが必要になることです。メッシュが大きくなると、メモリが不足します。
cell(1000, 1000, 1000)
??? Error using ==> cell
Out of memory. Type HELP MEMORY for your options.
また、ネストされたセルを使用して遊んだことがあります。
tet = cell(num_nodes, 1);
tet2 = cellfun(@(x) cell(num_nodes, 1), tet, 'UniformOutput', 0);
tet3 = cellfun(@(x) cellfun(@(y) cell(num_nodes, 1), x, 'UniformOutput', 0), tet2, 'UniformOutput', 0);
tet3{2}{3}{4} = 1;
...
これは小さなメッシュで機能し、連続メモリ(AFAIK)を必要としませんが、N=1000でMATLABをクラッシュさせるという厄介な習慣があります。
何か案は?