Saya tahu pertanyaan ini sudah dijawab, tetapi inilah penyimpanan perulangan berbasis satu wajah yang serupa yang diterapkan di pustaka OpenFOAM C ++:
Setiap sel memiliki indeks (ID) dalam selList. Dua daftar didefinisikan untuk semua wajah: "face internal owner" dan "face neighbor". Panjang kedua daftar wajah sesuai dengan jumlah wajah internal di jala. Pemilik wajah akan menjadi sel dengan ID yang lebih rendah di cellList (berlawanan dengan tetangga wajah). Batas wajah ditulis terakhir, dan mereka memiliki normals berorientasi keluar (dari domain solusi), dan tentu saja, hanya satu sel pemilik. Normal area wajah diorientasikan sehingga terlihat keluar dari sel pemilik ke sel tetangga.
Ini bekerja dengan baik untuk perhitungan fluks misalnya. Fluks dievaluasi sekali per wajah, dan ditambahkan ke jumlah wajah total untuk sel pemilik, dan dikurangkan dari sel tetangga (penjumlahan / pengurangan ditentukan berdasarkan orientasi normal area wajah). Wajah batas diurutkan dan disimpan di bagian bawah daftar wajah, yang memungkinkan kondisi batas untuk didefinisikan sebagai irisan daftar wajah (label awal, label akhir patch batas), sehingga menyederhanakan penerapan kondisi batas, juga sebagai peningkatan efisiensi proses pembaruan untuk kondisi batas, karena mengandalkan solusi yang disediakan oleh operasi pada permukaan internal.
Karena permukaan batas diaglomerasi menjadi tambalan, komunikasi antar-proses didefinisikan untuk tambalan (prosesor) yang dipasangkan, dan yang telah ditentukan sebelumnya. Ini berarti bahwa segera setelah ada loop di atas batas mesh, fungsi akses tingkat atas envoke panggilan MPI dibungkus, membuat kode tersebut "secara otomatis" diparalelkan, jika itu bergantung pada konektivitas berbasis wajah yang dijelaskan di atas.