2012-11-25 52 views
0

我有一个问题,我不知道它是什么。我有一个MPI_INIT和MPI_FINALIZE的测试程序。我有一个包含5个子例程的模块:3个子例程是相关的,独立于2个其他子例程。我想将测试程序中的MPI代码放入此模块中。我将MPI_INIT放入声明变量的模块中,并放在子例程之前。我得到一个具有相同错误消息的一系列错误:我应该在哪里将MPI_INIT放入Fortran模块中?

This statement must not appear in the specification part of a module 

如何“MPI_INIT和MPI_FINALIZE应该被称为一次”影响Fortran程序,模块和子程序?如果有多个独立程序,我应该在哪里放置MPI函数和变量,每个程序都调用这个模块的子程序多次?

+1

可能的重复[更新:我应该把MPI放在模块还是模块的子例程?](http://stackoverflow.com/questions/13437672/updated-should-i-put-mpi-in-a-module -or-A-模块-子程序) –

回答

1

您需要在模块的子例程部分调用MPI子例程。

通常我定义一个init_mpi子程序,它调用MPI_INIT并最终调用MPI_COMM_RANK和MPI_COMM_SIZE。您也可以在此init_mpi子例程中使用MPI_INITIALIZED以避免多次初始化。