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à
DO
các vòng lặp và cácIF
câ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ứ f2c
thậ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
f2c
hoặ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.