如何耦合Fortran77和Fortran90应用程序?MPI、PVM或其他方式?

如何耦合Fortran77和Fortran90应用程序?MPI、PVM或其他方式?,fortran,mpi,coupling,pvm,Fortran,Mpi,Coupling,Pvm,我需要耦合两个代码(一个在Fortran77中,另一个在Fortran90中),它们必须由守护进程控制,并且能够在它们之间传递信息 我一直在搜索,有两种可能的选择是PVM或MPI。问题是我需要单独编译它们,有什么想法吗 MPI非常适合SPMD范式(单程序/多数据)。如果您想耦合两个不同的二进制文件,MPI可能不是最好的工具。进程间通信更像是您想要做的事情。在Linux中,如果您保持在同一台机器上,则可以使用命名管道(请参见manmkfifo),并且可以使用Fortran I/O调用传输数据。如果

我需要耦合两个代码(一个在Fortran77中,另一个在Fortran90中),它们必须由守护进程控制,并且能够在它们之间传递信息


我一直在搜索,有两种可能的选择是PVM或MPI。问题是我需要单独编译它们,有什么想法吗

MPI非常适合SPMD范式(单程序/多数据)。如果您想耦合两个不同的二进制文件,MPI可能不是最好的工具。进程间通信更像是您想要做的事情。在Linux中,如果您保持在同一台机器上,则可以使用命名管道(请参见
manmkfifo
),并且可以使用Fortran I/O调用传输数据。如果您想在不同的机器之间进行通信,另一种可能是使用,例如,存在一个。

最简单的方法是使用POSIX套接字-但是您需要进行数据序列化/反序列化,而且通常速度非常慢。所以我不建议使用套接字

从技术上讲,MPI可以工作。如果您可以使用MPI 2.0兼容库,那么您可以使用在那里实现的客户机-服务器机制。查看和的文档。第一个将为您提供端口名,您需要以某种方式将此名称传递给客户端。一个选项是使用,但它可能不适用于任何MPI库。另一个选项是使用其他机制(套接字连接、文件系统或其他任何机制)共享它


但是,事实上,我仍然不明白为什么你应该分别编译这两个应用程序(除非有许可证问题)——你可以将它们编译成一个包(我预计会有一些代码更改,但这很小),然后作为一个应用程序运行。

关于什么的想法?此外,它们是应该检查的替代方案。例如,一个可执行文件而不是两个,或者使用套接字而不是PVM或MPI。如果您认为“F77”代码应该使用不同的编译器,这种想法在这里可能没有意义,因为大多数当前的编译器都支持具有合理扩展名的F77以及F90/2003+。