Hello, When I run this code:
program testcase use mpi implicit none integer :: rank, lsize, rsize, code integer :: intercomm call MPI_INIT(code) call MPI_COMM_GET_PARENT(intercomm, code) if (intercomm == MPI_COMM_NULL) then call MPI_COMM_SPAWN ("./testcase", MPI_ARGV_NULL, 1, MPI_INFO_NULL, & 0, MPI_COMM_WORLD, intercomm, MPI_ERRCODES_IGNORE, code) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, code) call MPI_COMM_SIZE(MPI_COMM_WORLD, lsize, code) call MPI_COMM_SIZE(intercomm, rsize, code) if (rank == 0) then print *, 'from parent: local size is ', lsize print *, 'from parent: remote size is ', rsize end if else call MPI_COMM_SIZE(MPI_COMM_WORLD, lsize, code) call MPI_COMM_SIZE(intercomm, rsize, code) print *, 'from child: local size is ', lsize print *, 'from child: remote size is ', rsize end if call MPI_FINALIZE (code) end program testcase I get the following results with openmpi 1.4.1 and two processes: from parent: local size is 2 from parent: remote size is 2 from child: local size is 1 from child: remote size is 1 I would have expected: from parent: local size is 2 from parent: remote size is 1 from child: local size is 1 from child: remote size is 2 Could anyone tell me what's going on ? It's not a fortran issue, I can also replicate it using mpi4py. Probably related to the universe size: I haven't found a way to hand it to mpirun. Cheers, Pierre