Saya tertarik pada saran untuk struktur data yang efisien untuk penelusuran sel dalam CFD volume terbatas berbasis sel yang tidak terstruktur.
Salah satu contoh yang saya temui (dalam kode CFD dolfyn ) berjalan seperti ini (saya akan menunjukkan segmen yang relevan) Jadi kami memiliki array NFaces tempat jumlah wajah untuk setiap sel disimpan. Kemudian array CFace yang memetakan nomor wajah lokal ke sel ke nomor wajah global.
Kode berdasarkan wajah oleh karena itu ada tipe data wajah yang menyimpan nomor seri dua sel itu terletak antara Wajah (k)% sel1 dan Wajah (k)% sel2.
Setiap komentar tentang ini atau saran untuk pendekatan alternatif dipersilahkan.
sumber
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.
sumber