กรณีศึกษาในวิทยานิพนธ์ระดับปริญญาเอกของฉันกำหนดว่าฉันต้องมีการขยายรูทีนย่อยของ Fortran ในCHEMKIN-II (ขอโทษสำหรับการเชื่อมโยงมันเป็นสิ่งที่ดีที่สุดที่ฉันสามารถหาได้สำหรับแพ็คเกจที่ไม่ได้จัดจำหน่ายโดย Sandia National Laboratory) CHEMKIN-II เป็นแพ็คเกจทางเคมีที่ใช้ในเคมีการเผาไหม้ เนื่องจากเป็นแพ็คเกจมาตรฐานที่ใช้ในการเผาไหม้ฉันจึงไม่สามารถ (หรือมากกว่านั้นไม่ต้องการ) ใช้แพ็คเกจอื่นที่นั่น
เพื่อให้ได้ส่วนขยายช่วงเวลาที่ต้องการฉันใช้เครื่องมือที่พัฒนาขึ้นภายในชื่อDAEPACK. ไบนารีเก่าที่ฉันเคยใช้เพื่อสร้างส่วนขยายช่วงเวลาที่ต้องการของรูทีนย่อย CHEMKIN-II ที่ฉันต้องการในระบบปฏิบัติการ 32- บิต (ด้วยเวอร์ชันของ libstdc ที่สอดคล้องกับ gcc 2.95) เมื่อสองสามปีที่แล้ว ล้าสมัยและจะเป็นอุปสรรคอย่างมากในการใช้งาน (เพราะฉันต้องค้นหาซอฟต์แวร์เวอร์ชั่นอื่น ๆ ที่ใช้มา 32 บิต) ซอร์สโค้ดสำหรับแพ็คเกจนี้ก็เป็นกรรมสิทธิ์ แต่เนื่องจากเดิมพัฒนาขึ้นที่ MIT และฉันทำงานที่ MIT ฉันจึงสามารถ (หลังจากใช้ความพยายามอย่างมาก) ในการรับซอร์สโค้ดสำหรับ DAEPACK เมื่อใช้ซอร์สโค้ดที่ฉันมีฉันสามารถรวบรวม DAEPACK รุ่นที่เข้ากันได้กับ Linux เวอร์ชัน 64 บิตและ libstdc รุ่นที่สอดคล้องกับ gcc 4.xx อย่างไรก็ตามซอร์สโค้ดนี้ซึ่งฉันสงสัยว่าเก่าแล้ว รวบรวมเป็นปฏิบัติการที่ไม่ประสบความสำเร็จในการสร้างรหัสส่วนขยายช่วงเวลาที่ฉันต้องการเพื่อให้วิทยานิพนธ์ของฉันเสร็จสมบูรณ์ ฉันได้ติดต่อผู้พัฒนาเพื่อพยายามขอความช่วยเหลือในการแก้ไขซอร์สโค้ด แต่จากการติดต่อก่อนหน้านี้กับผู้พัฒนาฉันรู้ว่าต้องใช้เวลาสำหรับเขาในการแก้ไขซอร์สโค้ดหากเขาทำได้
นี่คือปัญหาใหญ่: ฉันเหลือเวลาอีก 6 เดือนจนกว่าฉันจะต้องเรียนจบเพราะขาดเงินทุน ฉันไม่สามารถพึ่งพานักพัฒนาเพื่อแก้ไข DAEPACK ได้เร็วพอสำหรับฉันในการทำวิทยานิพนธ์ระดับปริญญาเอกให้สำเร็จซึ่งเป็นที่ที่พวกคุณเข้ามา
ฉันต้องการแพ็คเกจที่ทำสิ่งต่อไปนี้:
- สร้างส่วนขยายช่วงเวลาโมเดลเทย์เลอร์ (โดยใช้การคำนวณช่วงเวลา) และอนุพันธ์ของรหัส Fortran 77 โดยพลการ ฉันคิดว่าโครงสร้างเฉพาะที่ไม่ได้แยกวิเคราะห์โดย DAEPACK คือ
DO
ลูปและIF
ข้อความ เนื่องจากฉันต้องการโมเดลเทย์เลอร์รหัสจึงต้องมีความสามารถในการสร้างความแตกต่างโดยอัตโนมัติ (AD) - สร้างส่วนขยายช่วงเวลาและโมเดลเทย์เลอร์เหล่านี้โดยการแปลซอร์สโค้ดของรหัส Fortran 77 (เช่นจะแยกวิเคราะห์ซอร์สโค้ดเช่นคอมไพเลอร์เพื่อสร้างรหัสต้นฉบับที่คำนวณส่วนขยายช่วงเวลาและโมเดลเทย์เลอร์)
ในเวลาสั้น ๆ ฉันสามารถใช้ซอฟต์แวร์ที่ทำสองสิ่งข้างต้นกับรหัส C แทนรหัส Fortran 77 จากนั้นผ่านทุกอย่างผ่านf2c
ไป ฉันชอบที่จะไม่ทำแบบนี้เพราะฉันไม่รู้ว่าการผ่านทุกอย่างผ่านไปได้ผลหรือไม่f2c
แต่ฉันก็หมดหวัง
พวกคุณช่วยนักเรียนปริญญาเอกที่สิ้นหวังได้ไหม?
หากต้องการคาดการณ์คำแนะนำที่เป็นไปได้นี่คือวิธีการที่ไม่สามารถใช้ได้สำหรับฉันตามข้อ จำกัด ด้านเวลา:
- พยายามให้ DAEPACK ทำงานให้หนักขึ้น เชื่อฉันฉันได้ลองแล้ว และฉันก็บั่นทอนนักพัฒนาบ่อย ๆ
- เครื่องมือที่คำนวณส่วนขยายช่วงเวลาหรือโมเดลเทย์เลอร์โดยใช้วิธีการเชิงวัตถุ (หรือแบบเชิงวัตถุ) ฉันไม่มีเวลาที่จะถอดรหัส CHEMKIN-II (หรือไลบรารีขนาดใหญ่อื่น ๆ ที่คล้ายกัน) ที่มีประเภทใหม่ มันใหญ่เกินไป.
- การใช้ภาษาอื่นที่ไม่ใช่ Fortran 77/90 หรือ C รหัส CHEMKIN-II อยู่ใน Fortran ฉันสามารถแปลงเป็น C โดยใช้
f2c
หรือถ้าจำเป็นให้ใช้โคลน Sandia-based ของ CHEMKIN-II ชื่อ TChem ผลลัพธ์เก่าของฉันใช้ CHEMKIN-II; ผลลัพธ์ใหม่ของฉันควรทำซ้ำผลลัพธ์เก่าของฉันและฉันรู้อยู่แล้วว่า Cantera จะไม่ทำซ้ำสิ่งที่ CHEMKIN-II ทำตามกรณีศึกษาและการทดสอบหน่วย นอกจากนี้นักศึกษาระดับบัณฑิตศึกษาที่ก่อนหน้านี้ฉันเคยทำเวทย์มนตร์ดำให้กับซอร์สโค้ดของ CHEMKIN-II เพื่อให้ได้เลขคณิตเชิงช่วงเวลาให้ใช้งานได้ดีโดยเฉพาะ มันคงยากสำหรับฉันที่จะทำซ้ำในแพ็คเกจอื่น ๆ