Có một công cụ nào đó có thể tạo ra các phần mở rộng khoảng thời gian của các hàm Fortran (hoặc C) bằng cách phân tích mã Fortran (hoặc C) không?


13

Các nghiên cứu điển hình trong luận án tiến sĩ của tôi yêu cầu tôi có các phần mở rộng giữa các chương trình con Fortran trong CHEMKIN-II (xin lỗi về liên kết; đây là cách tốt nhất tôi có thể tìm thấy cho một gói không còn được phân phối bởi Phòng thí nghiệm quốc gia Sandia). CHEMKIN-II là gói hóa học được sử dụng trong hóa học đốt; vì đó là gói tiêu chuẩn được sử dụng trong quá trình đốt cháy, tôi không thể (hay đúng hơn là thực sự không muốn) sử dụng một gói khác ngoài đó.

Để có được các tiện ích mở rộng khoảng thời gian cần thiết, tôi đã sử dụng một công cụ được phát triển nội bộ có tên DAEPACK. Các tệp nhị phân cũ mà tôi đã sử dụng để có thể tạo các phần mở rộng khoảng thời gian cần thiết của các chương trình con CHEMKIN-II tôi cần trên HĐH 32 bit (với phiên bản libstdc tương ứng với gcc 2.95) vài năm trước, nhưng đã bị loại bỏ của ngày, và sẽ là một thử thách rất lớn để sử dụng (vì tôi phải tìm phiên bản 32 bit của mọi phần mềm khác mà tôi đã sử dụng). Mã nguồn cho gói này cũng là độc quyền, nhưng vì nó ban đầu được phát triển tại MIT và tôi làm việc tại MIT, tôi đã có thể (sau rất nhiều nỗ lực) có được mã nguồn cho DAEPACK. Sử dụng mã nguồn tôi có, tôi có thể biên dịch phiên bản DAEPACK tương thích với các phiên bản Linux 64 bit và các phiên bản libstdc tương ứng với gcc 4.xx Tuy nhiên, mã nguồn này mà tôi nghi ngờ là cũ, biên dịch thành một tệp thực thi không tạo thành công mã mở rộng khoảng thời gian tôi cần để hoàn thành luận án của mình. Tôi đã liên hệ với nhà phát triển để cố gắng giúp anh ta sửa mã nguồn, nhưng từ lần liên hệ trước với nhà phát triển, tôi biết rằng anh ta sẽ mất thời gian để sửa mã nguồn, nếu anh ta làm vậy.

Đây là một vấn đề lớn: tôi còn 6 tháng nữa cho đến khi tôi cần tốt nghiệp vì hết tiền. Tôi không thể dựa vào nhà phát triển để sửa DAEPACK đủ nhanh để tôi hoàn thành thành công luận án tiến sĩ, đó là nơi mà các bạn đến.

Tôi cần một gói làm như sau:

  • Tạo các phần mở rộng khoảng, mô hình Taylor (sử dụng số học khoảng) và các dẫn xuất của mã Fortran 77 gần như tùy ý; Tôi nghĩ rằng các cấu trúc duy nhất không được phân tích cú pháp bởi DAEPACK là DOcác vòng lặp và các IFcâu lệnh. Vì tôi cần các mô hình Taylor, mã cũng phải có khả năng phân biệt tự động (AD).
  • Tạo các phần mở rộng khoảng và các mô hình Taylor này bằng cách dịch mã nguồn-nguồn của mã Fortran 77 (nghĩa là nó phân tích mã nguồn giống như trình biên dịch để tạo mã nguồn tính toán các phần mở rộng khoảng và mô hình Taylor).

Trong một tình huống khó khăn, tôi có thể sử dụng phần mềm thực hiện hai điều trên với mã C thay vì mã Fortran 77, và sau đó chuyển mọi thứ qua f2c. Tôi thực sự không muốn làm theo cách này, bởi vì tôi không biết liệu có vượt qua mọi thứ f2cthậm chí sẽ làm việc hay không, nhưng tôi khá tuyệt vọng.

Các bạn có thể giúp một sinh viên tiến sĩ tuyệt vọng?


Để dự đoán một số đề xuất có thể, đây là các cách tiếp cận sẽ KHÔNG hiệu quả với tôi, với các hạn chế về thời gian:

  • Cố gắng hơn nữa để DAEPACK hoạt động; hãy tin tôi, tôi đã thử. Và tôi thường xuyên làm phiền nhà phát triển.
  • Các công cụ tính toán các phần mở rộng khoảng hoặc các mô hình Taylor bằng cách sử dụng các cách tiếp cận hướng đối tượng (hoặc hướng đối tượng). Tôi không có thời gian để mã hóa lại CHEMKIN-II (hoặc bất kỳ thư viện lớn tương tự nào khác) với các loại mới; nó quá to.
  • Sử dụng bất kỳ ngôn ngữ nào khác ngoài Fortran 77/90 hoặc C. Mã CHEMKIN-II nằm trong Fortran. Tôi có thể chuyển đổi nó thành C bằng cách sử dụng f2choặc nếu cần, sử dụng bản sao CHEMKIN-II dựa trên Sandia có tên là TChem. Kết quả cũ của tôi sử dụng CHEMKIN-II; kết quả mới của tôi sẽ sao chép kết quả cũ của tôi và tôi đã biết rằng Cantera sẽ không sao chép những gì CHEMKIN-II làm dựa trên nghiên cứu trường hợp và thử nghiệm đơn vị. Hơn nữa, sinh viên tốt nghiệp đi trước tôi đã thực hiện một số phép thuật đen với mã nguồn CHEMKIN-II để có được số học khoảng để hoạt động đặc biệt tốt. Tôi sẽ khó có thể sao chép nó trong bất kỳ gói nào khác.

Thay đổi chủ đề luận án của bạn ngay lập tức. Loại bỏ số học khoảng thời gian ngớ ngẩn đó và làm một cái gì đó hữu ích, lý tưởng với phần mềm hoạt động. ;-D
Jed Brown

6
Lấy kết quả hiện có của bạn, đưa chúng vào diễn giải chủ đề luận án của bạn, viết một bài văn hay và mua đồ ăn nhẹ tuyệt vời cho ủy ban quốc phòng của bạn.
Matt Knepley

f:RRF:(R,R0+)((R,R0+)F(một,b)= =f([một-b,một+b])
Deathbreath

1
Tổng quan cơ bản về số học khoảng có thể được tìm thấy trên Wikipedia (bao gồm khái niệm mở rộng khoảng) và trong các tài liệu tham khảo được đề cập trên trang này . Giới thiệu tốt nhất về các mô hình Taylor mà tôi có thể tìm thấy là ở đây . Sự khác biệt tự động thường được sử dụng trong việc thực hiện các mô hình Taylor; Thay vào đó, tôi chưa bao giờ nghe hoặc thấy ai sử dụng xấp xỉ bằng số.
Geoff Oxberry

2
@MishaBrukman: Ồ, tôi chỉ miệt mài với tất cả những thứ đó.
Geoff Oxberry

Câu trả lời:


2

Giả sử rằng vấn đề là DAEPACKhoạt động ở chế độ 32 bit chứ không phải chế độ 64 bit, đây là một số cách tiếp cận để giải quyết vấn đề này.

Biên dịch DAEPACKở chế độ 32 bit trên HĐH 64 bit

Xem làm thế nào để làm điều này trong một câu hỏi khác . Đây có thể là một cách dễ dàng để tiếp tục làm việc với nó.

Nếu vấn đề là mã được tạo đang gặp sự cố ở chế độ 64 bit, hãy biên dịch mã được tạo với các cờ 32 bit tương tự hoặc trong môi trường 32 bit (HĐH 64 bit có thể chạy mã 32 bit cho các thư viện thích hợp, nhưng không ngược lại ).

Tái tạo toàn bộ DAEPACKmôi trường an toàn

  1. Tạo một môi trường 32 bit đầy đủ trong một máy ảo bằng cách sử dụng VirtualBox , chẳng hạn như DAEPACKđang chạy trong nó, cho dù là từ các tệp nhị phân cũ hoặc được biên dịch lại trong môi trường này. Bạn có thể nhận được một bản phát hành của một hệ điều hành và trình biên dịch mã nguồn mở như cũ mà bạn cần để có được một phiên bản phần mềm hoạt động.

  2. Lấy đầu ra từ DAEPACKvà chuyển chúng sang máy chủ hoặc một máy ảo riêng biệt, nơi môi trường phù hợp với phần mềm khác và tiếp tục hoạt động. Đây có thể là một hệ điều hành 64 bit gần đây hơn, ví dụ, và tiếp tục hoạt động ở đó.

    Sử dụng tính năng thư mục được chia sẻ trong VirtualBox sẽ giúp bạn dễ dàng thực hiện điều này.

Tranh thủ người khác giúp sửa DAEPACK

Tôi nhận thấy rằng bạn nói rằng cả bạn và tác giả phần mềm đều không có thời gian để khắc phục điều này, nhưng không ai nói rằng bạn không thể tranh thủ sự giúp đỡ của bất kỳ ai khác! Hãy xem xét các tùy chọn sau:

  • Thuê một số sinh viên MIT CS đại học để giúp khắc phục các sự cố 32 bit so với 64 bit. Lưu ý rằng để lôi kéo họ làm việc với nó, bạn có thể phải bồi thường cho họ, cho dù bằng tiền hoặc pizza (và / hoặc bia, nếu họ ở độ tuổi uống rượu hợp pháp), chẳng hạn. Hoặc xem xét việc hỏi liệu cố vấn của bạn có thể thuê một số sinh viên đại học bán thời gian để giúp đỡ việc này không (có thể là một vấn đề với tài trợ, nếu tài trợ của chính bạn sắp hết). Hoặc yêu cầu một số ưu đãi từ các lập trình viên nghiên cứu trong bộ phận của bạn.

  • Tiền sảnh cho một bản phát hành nguồn mở DAEPACK. Có vẻ như tình trạng cấp phép của nó không rõ ràng , nhưng lưu ý rằng MIT có giấy phép nguồn mở cùng tên khá nổi tiếng; Phát hành nó theo giấy phép mở có thể giúp hiểu rõ hơn về vấn đề và giúp khắc phục các sự cố 32 bit so với 64 bit.

    Lưu ý rằng tùy thuộc vào bộ phận, văn phòng pháp lý, hành chính, v.v. của bạn có thể mất nhiều thời gian hơn 6 tháng mà bạn đã để lại bằng tiến sĩ, vì vậy hãy cân nhắc bắt đầu việc này sớm, trong khi theo đuổi các lựa chọn thay thế khác.

Chúc may mắn!


Sau khi dành một lúc để viết câu trả lời này, tôi mới nhận ra rằng bạn đã viết câu hỏi của bạn vào năm 2012 với thời hạn 6 tháng, vì vậy cuộc thảo luận này khá là tranh luận. Xin lỗi vì điều đó! Tôi vẫn tò mò bạn đã làm gì trong trường hợp này.
Misha Brukman

Trong thời gian học tiến sĩ, tôi đã thử cả ba cách tiếp cận mà bạn đề cập mà không thành công. Vấn đề, IIRC, là nó sẽ tạo ra mã lỗi; biên dịch nó (mặc dù đau ở mông, vì tôi phải hiện đại hóa các phần của nó) thực sự là vấn đề nhỏ nhất của tôi. DAEPACK không có khả năng được phát hành nguồn mở, vì đó là công nghệ chính của một công ty. Thật là khó khăn khi bắt những người khác bên ngoài công ty đó và phòng thí nghiệm cố vấn cũ của tôi sửa chữa nó, và tôi nghi ngờ những sinh viên MIT CS dám nghĩ dám làm sẽ tiếp tục công việc vô ơn đó.
Geoff Oxberry

@GeoffOxberry rất tiếc khi nghe điều đó, nhưng đó là (thật không may) tất cả quá phổ biến trong cái gọi là phần mềm "chất lượng nghiên cứu". Tuy nhiên, chúc mừng bạn đã kiên trì và hoàn thành bằng cấp của bạn!
Misha Brukman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.