มีเครื่องมือที่สามารถสร้างส่วนขยายช่วงเวลาของฟังก์ชัน Fortran (หรือ C) โดยการแยกรหัส Fortran (หรือ C) หรือไม่


13

กรณีศึกษาในวิทยานิพนธ์ระดับปริญญาเอกของฉันกำหนดว่าฉันต้องมีการขยายรูทีนย่อยของ 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 เพื่อให้ได้เลขคณิตเชิงช่วงเวลาให้ใช้งานได้ดีโดยเฉพาะ มันคงยากสำหรับฉันที่จะทำซ้ำในแพ็คเกจอื่น ๆ

เปลี่ยนหัวข้อวิทยานิพนธ์ของคุณทันที กำจัดเลขคณิตช่วงเวลาโง่ ๆ นั้นและทำสิ่งที่มีประโยชน์โดยเฉพาะกับซอฟต์แวร์ที่ใช้งานได้ ;-D
Jed Brown

6
นำผลลัพธ์ที่มีอยู่ของคุณใส่ลงในการตีความหัวข้อวิทยานิพนธ์ของคุณเขียนบทความที่ดีและซื้อขนมขบเคี้ยวที่ดีจากคณะกรรมการป้องกัน
Matt Knepley

@Geoff Oxberry: ช่วยฉันเข้าใจสิ่งที่คุณหมายถึงโดยการขยายช่วงเวลา; ขยายไปที่ , โดยที่ฉันคิดว่าฟังก์ชั่นของคุณไม่มีคุณสมบัติที่ดีเช่น monotonicity เป็นต้นนี่เป็นปัญหาการหาค่าเหมาะที่สุดหรือไม่ F : ( R , R + 0 ) ( ( R , R + 0 ) F ( a , b ) = f ( [ a - b , a + b ] )f:RRF:(R,R0+)((R,R0+)F(a,b)=f([ab,a+b])
Deathbreath

1
ภาพรวมพื้นฐานของการคำนวณช่วงเวลาสามารถพบได้ในWikipedia (ซึ่งรวมถึงแนวคิดของการขยายช่วงเวลา) และในการอ้างอิงที่กล่าวถึงในหน้านี้ แนะนำที่ดีที่สุดในรุ่นเทย์เลอร์ที่ฉันจะได้พบคือที่นี่ ความแตกต่างโดยอัตโนมัติมักใช้ในการนำโมเดลของ Taylor ไปใช้ ฉันไม่เคยได้ยินหรือเคยเห็นใครใช้การประมาณเป็นตัวเลขแทน
Geoff Oxberry

2
@MishaBrukman: โอ้ฉันเพิ่งเขวี้ยงทั้งหมด
Geoff Oxberry

คำตอบ:


2

สมมติว่าปัญหานี้ใช้DAEPACKงานได้ในโหมด 32 บิต แต่ไม่ใช่โหมด 64 บิตนี่คือวิธีการบางส่วนในการแก้ไขปัญหานี้

คอมไพล์DAEPACKในโหมด 32 บิตบนระบบปฏิบัติการ 64 บิต

ดูวิธีการทำเช่นนี้ในคำถามอื่น นี่อาจเป็นวิธีที่ง่ายในการทำงานกับมันต่อไป

หากปัญหาคือรหัสที่สร้างขึ้นมีปัญหาในโหมด 64 บิตให้รวบรวมรหัสที่สร้างขึ้นด้วยค่าสถานะ 32- บิตที่คล้ายกันหรือในสภาพแวดล้อม 32- บิต (ระบบปฏิบัติการ 64- ​​บิตสามารถเรียกใช้รหัส 32- บิตได้จากไลบรารีที่เหมาะสม แต่ ไม่ใช่ในทางกลับกัน )

สร้างDAEPACKสภาพแวดล้อมที่ปลอดภัยทั้งหมด

  1. สร้างสภาพแวดล้อมแบบเต็ม 32 บิตในเครื่องเสมือนที่ใช้เช่นVirtualBoxซึ่งDAEPACKมีความสุขในการทำงานไม่ว่าจะมาจากไบนารีเก่าหรือคอมไพล์ในสภาพแวดล้อมนี้ คุณสามารถรับระบบปฏิบัติการโอเพ่นซอร์สและคอมไพเลอร์รุ่นเก่าเท่าที่คุณต้องการเพื่อรับซอฟต์แวร์เวอร์ชันใช้งานได้

  2. รับเอาต์พุตจากDAEPACKและโอนไปยังเครื่องโฮสต์หรือเครื่องเสมือนแยกที่สภาพแวดล้อมเหมาะสมสำหรับซอฟต์แวร์อื่นและทำงานต่อไป นี่อาจเป็นระบบปฏิบัติการ 64 บิตที่ใหม่กว่าและทำงานที่นั่นต่อไป

    การใช้คุณสมบัติโฟลเดอร์ที่ใช้ร่วมกันใน VirtualBox ควรทำให้ง่ายสำหรับคุณ

ขอความช่วยเหลือจากผู้อื่นเพื่อช่วยแก้ไข DAEPACK

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

  • จ้างนักศึกษา MIT CS ระดับปริญญาตรีบางคนเพื่อช่วยแก้ไขปัญหา 32- บิตกับ 64- บิต โปรดทราบว่าเพื่อดึงดูดให้พวกเขาทำงานคุณอาจต้องชดเชยพวกเขาไม่ว่าจะด้วยเงินหรือพิซซ่า (และ / หรือเบียร์หากพวกเขามีอายุการดื่มอย่างถูกกฎหมาย) หรือพิจารณาถามว่าที่ปรึกษาของคุณสามารถจ้างนักศึกษาปริญญาตรีนอกเวลาเพื่อช่วยในเรื่องนี้ได้หรือไม่ (อาจมีปัญหากับการระดมทุนหากเงินทุนของคุณหมดลงแล้ว) หรือขอความช่วยเหลือจากโปรแกรมเมอร์วิจัยในแผนกของคุณ

  • DAEPACKล็อบบี้ให้มีการปล่อยเปิดแหล่งที่มาของ ดูเหมือนว่าสถานะการออกใบอนุญาตของมันยังไม่ชัดเจนแต่โปรดทราบว่า MIT มีใบอนุญาตโอเพนซอร์สแบบ eponymousซึ่งค่อนข้างเป็นที่รู้จักกันดี การปล่อยภายใต้ใบอนุญาตแบบเปิดอาจช่วยให้มองเห็นปัญหาได้มากขึ้นและช่วยแก้ไขปัญหา 32- บิตกับ 64- บิต

    โปรดทราบว่าขึ้นอยู่กับแผนกของคุณสำนักงานกฎหมายการบริหารและอื่น ๆ อาจใช้เวลานานกว่า 6 เดือนที่คุณได้ศึกษาต่อในระดับปริญญาเอกดังนั้นโปรดเริ่มต้นในช่วงต้นนี้ก่อน

โชคดี!


หลังจากใช้เวลาสักครู่ในการเขียนคำตอบนี้ฉันเพิ่งรู้ว่าคุณเขียนคำถามของคุณในปี 2012 ด้วยกำหนดเวลา 6 เดือนดังนั้นการสนทนานี้จึงค่อนข้างที่จะสงสัย ขอโทษสำหรับเรื่องนั้น! ฉันยังสงสัยว่าคุณทำอะไรลงไปในกรณีนี้
Misha Brukman

ระหว่างปริญญาเอกของฉันฉันลองทั้งสามวิธีที่คุณพูดถึงโดยไม่ประสบความสำเร็จ ปัญหา IIRC คือมันจะสร้างรหัสบั๊กกี้ รวบรวมมัน (แม้ว่าจะมีอาการปวดในตูดเพราะฉันต้องปรับปรุงบางส่วนของมัน) จริง ๆ แล้วปัญหาของฉันน้อยที่สุด DAEPACK ไม่น่าจะเปิดตัวโอเพนซอร์สเนื่องจากเป็นเทคโนโลยีหลักของ บริษัท นอกจากนี้ยังเป็นหนามในการทำให้คนอื่นนอกเหนือจาก บริษัท นั้นและห้องแล็บที่ปรึกษาเก่าของฉันแก้ไขได้และฉันสงสัยว่านักเรียนของ MIT CS กล้าได้กล้าเสียอยากจะทำงานที่ไม่เห็นคุณค่า
Geoff Oxberry

@GeoffOxberry ขอโทษที่ได้ยินเช่นนั้น แต่นั่นก็เป็นที่น่าเสียดายที่ซอฟต์แวร์ที่เรียกว่า "คุณภาพการวิจัย" นั้นแพร่หลายมาก ขอแสดงความยินดีกับความเพียรและสำเร็จการศึกษาระดับปริญญาของคุณ!
Misha Brukman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.