É possível enviar dados de um programa Fortran para Python usando MPI?

Estou trabalhando em uma ferramenta para modelar conversores de energia das ondas, onde preciso acoplar dois pacotes de software. Um programa é escrito em Fortran, o outro em C ++. Preciso enviar informações do programa Fortran para o programa C ++ a cada etapa do tempo. No entanto, os dados primeiro precisam ser processados no Python antes de serem enviados para o programa C ++. Recebi uma dica para usar o MPI para transferir os dados entre os programas.

Agora estou tentando enviar uma string simples do código Fortran para Python, mas o código Python fica preso no comando de recebimento.

Meu código Fortran fica assim:

      USE GlobalVariables
      USE MPI
      IMPLICIT NONE

      CHARACTER(LEN=10):: astring
      INTEGER :: comm, rank, size, mpierr

      ! Initialize MPI on first timestep
      IF(tstep .LT. 2) THEN
        call MPI_INIT(mpierr)
      ENDIF

      ! make string to send to python
      astring = "TEST"

      ! MPI Test
      call MPI_Comm_size(MPI_COMM_WORLD, size, mpierr)
      call MPI_Comm_rank(MPI_COMM_WORLD, rank, mpierr)

      ! Send message to python
      CALL MPI_SEND(astring, len(astring), MPI_CHARACTER, 0, 22, MPI_COMM_WORLD, mpierr)
      print *, 'MPI MESSAGE SENT  ', mpierr

      ! Initialize MPI on first timestep
      IF(tstep .EQ. Nsteps-1) THEN
        call MPI_FINALIZE(mpierr)
        print *, 'MPI FINALIZED!'
      ENDIF

Meu código Python é o seguinte:

    from mpi4py import MPI
    import numpy as np
    import subprocess as sp
    import os

    # Start OW3D_SPH in the background and send MPI message
    os.chdir('OW3D_run')
    args = ['OceanWave3D_SPH','OW3D.inp']
    pid = sp.Popen(args,shell=False)
    os.chdir('..')

    # Check if MPI is initialized
    comm = MPI.COMM_WORLD
    rank = comm.Get_rank()

    # Receive message from fortran
    test = comm.recv(source=0, tag=22)

    # Let the program end
    output = pid.communicate()

    with open('test.txt','w') as f:
        f.write(test)

O código Python nunca ultrapassa o comando MPI receive e não termina. O código Fortran termina e imprime corretamente a mensagem "MPI FINALIZED".

Não vejo onde estou fazendo algo errado, a mensagem é enviada do processo 0 para o processo 0 com uma tag 22 e usaMPI_COMM_WORLD nos dois códigos.

questionAnswers(4)

yourAnswerToTheQuestion