سؤال

أقوم بتطوير نظام عناصر محدود. كالعادة ، تتكون المحاكاة من مجموعة من العقد الشبكية ، ولكل منها مجموعة من الخصائص (النقاط العائمة) ، مثل العديد من خصائص المواد أو الإحداثيات أو الكميات المادية التي تتطور خلال الوقت.

يمكنك إما استخدام نهجين متطرفين:

  • الممتلكات: حافظ على صفيف واحد لكل خاصية:

    double* x, *y, *z, *e_field, *b_field, *conductivity;

  • دخول: حافظ على صفيف واحد ، حيث كل صفيف هيكل

    struct { double x, y, z, e_field, b_field, conductivity; } *meshnodedata;

بين هذه ، يمكن للمرء أن يخلط ، مثل تطبيق النهج الثاني فقط للإحداثيات X ، Y ، Z ، واستخدام النهج الأول للخصائص المتبقية. كلما زادت خصائص المحاكاة الخاصة بك لكل عقدة شبكة ، كانت إمكانيات الاختلاط.

من ناحية ، لدي سؤال كلاسيكي أي من هذه الأساليب (ومزيجها) هو الأفضل للحوسبة العلمية فيما يتعلق بأداء البرنامج والصيانة للرمز. من ناحية أخرى ، أتساءل عن كيفية تنفيذ التعليمات البرمجية بطريقة تصبح الترحيل بين الأساليب المختلفة سهلة. علاوة على ذلك ، قد يكون حتى حلًا للترحيل بين تخطيطات الذاكرة المختلفة لأجزاء مختلفة من البرنامج.

للوصول إلى النقطة:

  • ما هي تجاربك هذه الأساليب المختلفة؟
  • ما مدى أهمية هذه الاختلافات؟
  • هل اكتسبت خبرة في الترحيل بين هذين التخطيطين؟
هل كانت مفيدة؟

المحلول

يتلخص سؤالك فعليًا في السؤال حول كيفية تصميم برنامج العناصر المحدودة المرنة والسريعة ، وهو مجال للبحث النشط. لقد عملت على هذا النوع من البرامج ، وأعتقد أن الإجابات على أسئلتك تعتمد حقًا على نوع الميزات التي ترغب في دعمها. على سبيل المثال ، هل تحتاج إلى صقل الشبكة التكيفية والخروج؟ هل تحل أنظمة PDEs؟ هل يجب أن يعمل الكود الخاص بك على مجموعة؟ كم عدد المجهولين سيكون لديك؟ دون معرفة أهدافك ، أحاول أن أجعل بعض العوامل العامة على أي حال.

  1. هناك oodles of Fe Frameworks ومديري الشبكات هناك - استخدم واحدة منهم!

  2. مديرو الشبكات أكثر تعقيدًا مما يعتقد الكثير من الناس. طالما أنه ليس فقط Tets في ثلاثية الأبعاد على جهاز كمبيوتر واحد ، فقد لا يزال قابلاً للإدارة. يعد مدير الشبكة مع أنواع العناصر المختلطة في ثلاثية الأبعاد مع التحسين المحلي وتوازن الحمل المتوازي مهمة هائلة. قم بتطوير مدير الشبكة الخاص بك فقط إذا كنت تعرف ما تريد تحسينه على تلك المتاحة بسهولة.

  3. تخطيط الذاكرة: الآن نصل إلى السؤال الفعلي :)
    فصل بيانات الشبكة وبيانات المشكلة. هذا سيجعل رمزك أكثر قابلية للصيانة. يمكن استخدام مدير الشبكة لأنواع مختلفة من المشكلات ، وكل مشكلة لها مجموعة من البيانات الخاصة به المرتبطة بكل عنصر.

  4. إذا قمت بتخزين أشياء مثل الموصلية داخل الشبكة أو الخارج ، فلا ينبغي أن يهم ما يتعلق بالأداء. أود أن أفصله لأسباب تصميم ، وليس لأسباب الأداء.

  5. قم بتخزين مجهولاتك (ربما e_field و b_field في مثالك) في كتلة واحدة متجاورة من الذاكرة. سيؤدي ذلك إلى تحسين أداء حلالك الخطي بشكل كبير. عادةً ما يقتصر المحلل الخطي التكراري على عرض النطاق الترددي للذاكرة للمصفوفات الكبيرة.

  6. قد يتم تجميع الهيكل الداخلي لمتجه الخاص بك من المجهولين أو الحكم (في الأساس النهجين اللذين وصفتهما) أي من هذين النهجين للاختيار لرقم المجهول يعتمد على العديد من العوامل ، بما في ذلك نوع PDE الذي تحله و نوع من حلال الخطي الذي تستخدمه. هناك العديد من المنشورات العلمية حول هذه المشكلة وحدها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top