ฉันจะตรวจสอบความถูกต้องของผลลัพธ์การจำลองของเหลวได้อย่างไร


9

ฉันเขียนโปรแกรมจำลองสถานการณ์ของเหลวตามอนุภาค เป็นการยากที่จะบอกว่าฉันได้รับผลลัพธ์ที่ถูกต้องหรือไม่ ผลลัพธ์ที่มองเห็นได้ดูเหมือนสมเหตุสมผล แต่บางส่วนของมันดูแปลก ฉันไม่รู้ว่ามันเป็นคุณสมบัติของของเหลว มีวิธีที่ถูกต้องในการตรวจสอบว่าโปรแกรมของฉันถูกต้องหรือไม่

แก้ไขรายละเอียดบางอย่าง:

โปรแกรมของฉันเป็นโปรแกรมจำลองอนุภาคแบบสองมิติ ของเหลวสามารถบีบอัดได้ การใช้งานเกือบจะขึ้นอยู่กับกระดาษคลาสสิก:

Müller, Matthias, David Charypar และ Markus Gross "การจำลองของเหลวตามอนุภาคสำหรับแอปพลิเคชันแบบโต้ตอบ" การดำเนินการของ 2003 ACM SIGGRAPH

ฉันแก้ไขสมการเนเวียร์สโตกส์ด้วยวิธีการทำซ้ำ พิจารณาเฉพาะความดัน, แรงโน้มถ่วง, ความหนืดและแรงตึงผิว


บางทีคุณสามารถคำนวณเงื่อนไขของสมการ NS อีกครั้งด้วยความแตกต่างของตัวเลขและตรวจสอบวิธียกเลิก
Yves Daoust

คำตอบ:


2

เปรียบเทียบกับซอฟต์แวร์ของคนอื่น ใช้การทดสอบมาตรฐานและดูว่าคุณได้คำตอบแบบคร่าว ๆ กับคนอื่นหรือไม่ หากคุณได้รับคำตอบเดียวกันความน่าจะเป็นที่จะมีรหัสของคุณค่อนข้างสูง

การทดสอบบางอย่าง:

  1. ไหลผ่านกระบอกสูบ ใน 2d จดโดเมนรูปสี่เหลี่ยมผืนผ้าทรงกระบอกตรงกลางไหลเข้าทางซ้ายไหลออกจากการต่อสู้และคำนวณแรงที่เกิดขึ้นในกระบอกสูบ นี่คือมาตรฐานเปรียบเทียบรหัสจำนวนหนึ่ง

  2. ทุ่นลอยน้ำ กล่องปิด, จานร้อนด้านล่าง, จานเย็นด้านบน, ของเหลวร้อนเริ่มเพิ่มขึ้นเนื่องจากแรงลอยตัว นี่คือมาตรฐาน

  3. Rising ฟองมาตรฐาน

แต่น่าเสียดายที่อาจเปรียบเทียบโค้ดของคุณกับโค้ดทางวิทยาศาสตร์ในเกณฑ์มาตรฐานได้ยาก ฉันเดาว่าคุณใช้งานอะไรบางอย่างที่เป็น SPH หรือของเหลวที่มีความเสถียรซึ่งไม่ได้ทำเพื่อความถูกต้อง แต่เพื่อความมั่นคง

ยกตัวอย่างการไหลผ่านของทรงกระบอก ฉันจะเริ่มต้นการทดสอบด้วยจำนวน Reynolds ที่น้อยมากจากนั้นวัดแรงบนกระบอกสูบเมื่อคุณเพิ่มความแม่นยำของการจำลอง (ขั้นตอนเวลาที่ต่ำกว่าเพิ่มส่วนย่อยหรือเพิ่มจำนวนอนุภาค) แรงบรรจบกันเป็นจำนวนหนึ่งหรือไม่? ถ้าไม่มากกว่าที่คุณมีปัญหาถ้าใช่กว่าดูที่กระดาษมาตรฐานและเปรียบเทียบผลลัพธ์ของคุณกับผู้อื่น


วิธีนี้เป็นเทคนิคที่คล้ายกันมากกับวิธีที่ฉันใช้ทดสอบ raytracer ฉันเพิ่งสร้างฉากทดสอบกับนักแสดงคนอื่นและเปรียบเทียบกับผลลัพธ์ของฉัน พวกเขารวมกันเป็นผลลัพธ์เดียวกันหรือไม่ ถ้าใช่มากกว่าฉันถูกต้องถ้าไม่ถูกกว่าฉันคิดผิด


แทนที่จะเป็นซอฟต์แวร์เพื่อทดสอบกับการตะโกนเมื่อเทียบกับการวัดในโลกแห่งความเป็นจริงที่รู้จักและการเปลี่ยนแปลงของไหล มิฉะนั้นข้อผิดพลาดของคุณจะเสีย ฉันเห็นคำถามเดียวกันโพสต์ที่อื่นในเครือข่าย stackexhange btw
joojaa

1
ฉันคิดว่าการทดสอบกับการวัดในโลกแห่งความจริงนั้นดีสำหรับการทดสอบถ้าคุณมีฟิสิกส์ที่ถูกต้อง หากคุณต้องการดีบักโปรแกรมของคุณเท่านั้นการทดสอบกับโค้ดอื่น ๆ เป็นความคิดที่ดีกว่า นอกจากนี้ในการจำลองด้วยคอมพิวเตอร์คุณสามารถวัดสิ่งใดก็ได้โดยไม่กระทบต่อการทดสอบ ตัวอย่างเช่นการวัดความเร็วของของเหลว ณ จุดใด ๆ นั้นเป็นไปไม่ได้ในการทดลองในโลกแห่งความเป็นจริง แต่เป็นเรื่องเล็กน้อยในการจำลองด้วยคอมพิวเตอร์
ทอม

ใช่ แต่คุณยังสืบทอดปัญหาของนักแก้ปัญหาด้วย ฉันยอมรับว่าฉันทำเช่นนี้สองสามครั้งเพื่อพัฒนาตัวจำลองแบบหลายหน่วยและตรวจสอบกับผลลัพธ์ในรูปแบบ MSC Adams แต่ในความเข้าใจย้อนหลังที่ไม่ได้มีประโยชน์มากนักจริงๆ
joojaa

การตรวจสอบการทดลองในโลกแห่งความเป็นจริงนั้นดีขึ้นหรือ ฉันสงสัยมัน แต่ฉันอาจจะผิด สถานการณ์ที่เกิดขึ้นกับฟิสิกส์ multibody ค่อนข้างแตกต่างจากฟิสิกส์ของเหลว แม้แต่สิ่งที่เรียบง่ายเหมือนบิลเลียดก็มีพฤติกรรมที่วุ่นวาย ยิ่งกว่านั้นการเปลี่ยนแปลงของร่างกายที่แข็งแกร่งกับการสัมผัสก็ไม่ได้เป็นปัญหาทางคณิตศาสตร์ที่ดีนักคุณรู้หรือไม่ว่าPainlevé Paradox? ดังนั้นการจำลองเชิงตัวเลขของฟิสิกส์ multibody จึงต้องล้มเหลวโดยทั่วไป การอ้างอิงบางอย่าง: plus.maths.org/content/chaos-billiard-table en.wikipedia.org/wiki/Painlev%C3%A9_paradox
tom

1
ใช่ฉันรู้ว่าการทำงานของพลวัตของร่างกายฉันสอนมันอย่างไร (และค้นคว้าสั้น ๆ เป็นเวลาหนึ่งหรือสองปี) แต่ไม่มีการตรวจสอบกับโซลูชันการวิเคราะห์ที่รู้จักง่ายกว่า แต่ของเหลวที่แท้จริงนั้นมีความยุ่งเหยิงในทำนองเดียวกันในฐานะที่เป็นพละกำลังของร่างกาย ดังนั้นหนึ่งควรจะสามารถตรวจสอบกับสถานการณ์การไหลของ laminar ฯลฯ แรงเสียดทานเป็นเรื่องเลวแม้ว่า
joojaa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.