ฉันมักจะพบว่าตัวเองกำลังเขียนโค้ดที่คล้ายกันมากสำหรับรุ่นหนึ่งสองและสามมิติของการดำเนินการ / อัลกอริทึมที่กำหนด การบำรุงรักษาเวอร์ชันเหล่านี้ทั้งหมดอาจกลายเป็นเรื่องน่าเบื่อ การสร้างโค้ดอย่างง่ายนั้นใช้งานได้ดี แต่ดูเหมือนว่าจะต้องมีวิธีที่ดีกว่า
มีวิธีที่ค่อนข้างง่ายในการเขียนการดำเนินการเพียงครั้งเดียวและมีการพูดคุยกับมิติที่สูงขึ้นหรือต่ำลงหรือไม่?
ตัวอย่างที่ชัดเจนประการหนึ่งคือสมมติว่าฉันต้องการคำนวณการไล่ระดับสีของสนามความเร็วในอวกาศ ในสามมิติลูป Fortran จะมีลักษณะดังนี้:
do k = 1, n
do j = 1, n
do i = 1, n
phi(i,j,k) = ddx(i)*u(i,j,k) + ddx(j)*v(i,j,k) + ddx(k)*w(i,j,k)
end do
end do
end do
โดยที่ddx
array นั้นถูกกำหนดอย่างเหมาะสม (เราสามารถทำได้ด้วยการคูณเมทริกซ์) โค้ดสำหรับโฟลว์สองมิตินั้นเกือบจะเหมือนกันทุกประการยกเว้น: มิติที่สามถูกดร็อปจากลูปดัชนีและจำนวนของคอมโพเนนต์ มีวิธีที่ดีกว่าในการแสดงสิ่งนี้หรือไม่?
อีกตัวอย่างคือ: สมมติว่าฉันมีความเร็วของของไหลที่กำหนดจุด - ฉลาดในตารางสามมิติ เพื่อสอดแทรกความเร็วไปยังตำแหน่งตามอำเภอใจ (กล่าวคือไม่สอดคล้องกับจุดกริด) เราสามารถใช้อัลกอริทึมเนวิลล์หนึ่งมิติติดกันตลอดทั้งสามมิติ (เช่นการลดมิติ) มีวิธีง่าย ๆ ในการลดขนาดหรือไม่เนื่องจากการใช้อัลกอริธึมแบบง่ายในมิติเดียว?