কাঠামোগত সেল কেন্দ্রিক FVM সিএফডি কোডের জন্য কয়েকটি ভাল ডেটা-টাইপ কী কী?


12

আমি কাঠামোগত সেল ভিত্তিক সসীম ভলিউম সিএফডি-তে সেল ব্রাউজিংয়ের জন্য দক্ষ ডেটা স্ট্রাকচারের জন্য পরামর্শে আগ্রহী।

একটি উদাহরণ যা আমি পেয়েছি ( ডলফিন সিএফডি কোডে) এরকম হয় (আমি প্রাসঙ্গিক সেগমেন্টটি দেখাব) সুতরাং আমাদের কাছে একটি অ্যারে এনফিস রয়েছে যেখানে প্রতিটি ঘরের জন্য মুখের সংখ্যা সংরক্ষণ করা হয়। তারপরে সিফিসি অ্যারে যা স্থানীয়-থেকে-সেল মুখের নম্বরটি বিশ্বব্যাপী মুখ সংখ্যাটিতে ম্যাপ করে।

\ start {listing} do ip = 1, Ncel ... do j = 1, NFaces (ip) k = CFace (আইপি, জে) আইপিপি = ফেস (কে)% সেল 1 ইন = ফেস (কে)% সেল 2 যদি (গৃহস্থ) > 0) তাহলে! অভ্যন্তরীণ \ শেষ {তালিকা}

কোডটি ফেস ভিত্তিক তাই একটি ফেস ডেটা টাইপ রয়েছে যা ফেস (কে)% সেল 1 এবং ফেস (কে)% সেল 2 এর মধ্যে থাকা দুটি কক্ষের ক্রমিক সংখ্যা সংরক্ষণ করে।

বিকল্প মতামত জন্য এই বিষয়ে কোন মন্তব্য বা পরামর্শ স্বাগত।

উত্তর:


9

আপনার প্রদর্শিত কাঠামোটি একটি সাধারণ পছন্দ এবং একটি নির্দিষ্ট জায়গায় সীমানা গোস্ট সেলগুলি সহ, সিএসআর ম্যাট্রিক্স ফর্ম্যাটে সেল-ফেস সংলগ্নগুলি সঞ্চয় করার সমতুল্য। তবে নোট করুন যে এফভি পদ্ধতিগুলি সম্পূর্ণরূপে বা প্রায় পুরোপুরি মুখের ট্র্যাভারসাল সমন্বয়ে তৈরি করা যেতে পারে যেখানে প্রতিটি মুখ কেবল একবার দেখা হয় (উভয় পক্ষ থেকে সেন্ট্রয়েড / চতুর্ভুজ বিন্দুর মুখোমুখি পুনর্গঠন করা, রিমন সমস্যা সমাধান করা, কোষগুলিতে ফ্লাক্সকে আবার অবশিষ্টাংশে বিতরণ) )। আপনি "জাল" করতে পারেন যে আপনার সেল-ভিত্তিক ট্র্যাভারসাল ব্যবহার করে এবং দুষ্প্রাপ্য ম্যাট্রিক্সের "তির্যক" এর নীচে থাকা যে কোনও দুটি কক্ষকে এড়িয়ে গেলে, তবে একটি জনপ্রিয় বিকল্প হ'ল সংরক্ষণ করা(leftCell, rightCell) = support(face), এই ক্ষেত্রে মুখগুলি প্রথম শ্রেণির সত্তা হয়ে যায়। এটি কার্যকর কারণ আপনার সাধারণত মুখের চতুর্ভুজ পয়েন্টগুলি (সেন্ট্রয়েডস), মুখের নরমালগুলি সঞ্চয় করার জন্য জায়গা প্রয়োজন। আপনি ফেস-ভিত্তিক ডেটা স্ট্রাকচারগুলিতে পুনর্গঠনের অংশগুলি (কমপক্ষে স্কোয়ারের মতো) রাখতে পারেন। মুখের ট্র্যাভারসালটি আপাতদৃষ্টিতে ভেক্টরাইজেশন-বান্ধব কারণ সমস্ত আকারগুলি নিয়মিত, তবে অন্যদিকে, ওভারল্যাপিং আউটপুটগুলি রয়েছে সুতরাং এটি আপনাকে একটি অভ্যন্তরীণ লুপে না এড়াতে ট্র্যাভারসালটি সংগঠিত করতে হবে। এই আরও মুখোমুখি ডেটা কাঠামোর সাথে, মুখের সংখ্যাগুলি অর্ডার করা স্বাভাবিক, যাতে প্রতিটি সীমানা শর্তের প্রকারটি মুখের সংলগ্ন ট্র্যাভারসাল ব্যবহার করে (এছাড়াও ভেক্টরাইজেশন-বান্ধব) হয়।

আপনি যদি এই ডেটা কাঠামোটি চয়ন করেন তবে মুখগুলি বাছাই করতে ভুলবেন না যাতে ট্র্যাভারসাল যতটা সম্ভব ক্যাশে সেল ডেটা পুনরায় ব্যবহার করে। ফেস অর্ডার এবং সম্পর্কিত অপ্টিমাইজেশনের পারফরম্যান্স বিশ্লেষণের জন্য কোনও পিইটিএসসি-ফুন 3 ডি পেপার দেখুন।


যদি আপনি মুখগুলি লুপ করেন তবে ফ্লাক্সগুলি গণনা করার জন্য আপনাকে বামকেল এবং ডানসেল থেকে তথ্য গ্রহণ করতে হবে, বলুন মুখ 1 এর বাম সেল 1 এবং রাইটসেল 10 রয়েছে, মুখ 2 টি বাম সেল 6 এবং রাইটসেল 31 রয়েছে ... যার ফলে স্মৃতিটি ঝাঁপিয়ে পড়ে । কিভাবে এটি ভেক্টরাইজেশন বন্ধুত্বপূর্ণ হবে?
ক্রিস

উপরে উল্লিখিত হিসাবে (এবং পিইটিএসসি-ফুন 3 ডি কাগজগুলিতে আলোচিত), আপনি মুখগুলি পুনরায় ক্যাশে পুনরায় ব্যবহার করার আদেশ দিন। ফলাফলটি "একতরফা" সেল ট্রভারসালের মতো যাতে প্রতিটি মুখ কেবল একবার একবার দেখা হয়।
জেড ব্রাউন

3

আমি জানি এই প্রশ্নের উত্তর ইতিমধ্যে দেওয়া হয়েছে, তবে এখানে একটি অনুরূপ একক-ভিত্তিক লুপিং স্টোরেজ যা ওপেনফোম সি ++ লাইব্রেরিতে প্রয়োগ করা হয়েছে:

প্রতিটি কক্ষের একটি সেললিস্টে একটি সূচক (আইডি) থাকে। দুটি তালিকা সমস্ত মুখের জন্য সংজ্ঞায়িত করা হয়েছে: "অভ্যন্তরীণ মালিকের মুখোমুখি" এবং "মুখের প্রতিবেশী"। উভয় মুখের তালিকার দৈর্ঘ্য জাল অভ্যন্তরীণ মুখগুলির সংখ্যার সাথে মিলে যায়। মুখের মালিক সেললিস্টে নিম্ন আইডি সহ মুখ হবে (মুখের প্রতিবেশীর বিপরীতে)। সীমানাযুক্ত মুখগুলি সর্বশেষে লেখা হয় এবং এগুলি বহির্মুখী নরমালগুলি থাকে (সমাধান ডোমেন থেকে) এবং অবশ্যই কেবল একটি মালিকের ঘর রয়েছে। মুখের অঞ্চলটি সাধারণভাবে ওরিয়েন্টেড হয় যাতে এটি মালিকের ঘর থেকে প্রতিবেশী ঘরের দিকে বাইরে দেখায়।

এটি যেমন ফ্লাক্স গণনার জন্য ভাল কাজ করে works প্রতি মুখ একবার প্রতি প্রবাহ মূল্যায়ন করা হয়, এবং এটি মালিকের ঘরের জন্য মোট মুখের যোগে যোগ করা হয়, এবং প্রতিবেশী সেলগুলি থেকে কেটে নেওয়া হয় (সামঞ্জস্য / ছাড়ের বিষয়টি মুখের অঞ্চলটির স্বাভাবিক অবস্থার ভিত্তিতে সিদ্ধান্ত নেওয়া হয়)। সীমানা মুখগুলি ফেস তালিকার নীচে বাছাই করা হয় এবং সংরক্ষণ করা হয়, সীমানা শর্তগুলি মুখ তালিকার টুকরো হিসাবে চিহ্নিত করা যায় (বাইনিং লেবেল, সীমানা প্যাচের শেষ লেবেল), পাশাপাশি সীমানা শর্তগুলির বাস্তবায়নকে সহজ করে তোলে সীমানা শর্তগুলির জন্য আপডেটিং প্রক্রিয়াটির দক্ষতা বৃদ্ধি করার কারণ এটি অভ্যন্তরীণ মুখগুলির উপর ক্রিয়াকলাপ দ্বারা সরবরাহিত সমাধানের উপর নির্ভর করে।

যেহেতু সীমানা মুখগুলি প্যাচগুলিতে সংশ্লেষিত, আন্ত-প্রক্রিয়া যোগাযোগ সংযুক্ত (প্রসেসর) প্যাচগুলির জন্য, এবং প্রাক-সংজ্ঞায়িত। এর অর্থ এই যে সীমানা জালটির উপর দিয়ে কোনও লুপ আসার সাথে সাথে শীর্ষ স্তরের অ্যাক্সেস ফাংশনগুলি এমপিআই কলগুলিকে আবৃত করে such


কোনও সমস্যা নেই, আমি এই বিবরণটি কারও কাছে উপকারী তা দেখে খুশি হলাম .. :) আপনি কি ওপেনফামের সাথেও কাজ করছেন?
tmaric

আমি আগে, একটু আগে ছিল। আমি সাধারণত গ্রহণযোগ্য প্রবণতা থেকে দূরে থাকি এবং চাকাটি পুনরায় উদ্ভাবনের চেষ্টা করি। এটা আমার টাও।
Johntra ভোল্টা

1
আপনার তাও কম্পিউটার বিজ্ঞানের টাওয়ের বিপরীত: "চাকাটি পুনরায় উদ্ভাবন করবেন না"। তবে আমি এটি বুঝতে পারি, এটি স্ক্র্যাচ থেকে স্টাফ করার আবেদন করে! :)
তমরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.