¿Es posible enviar datos desde un programa Fortran a Python usando MPI?

Estoy trabajando en una herramienta para modelar convertidores de energía de onda, donde necesito acoplar dos paquetes de software entre sí. Un programa está escrito en Fortran, el otro en C ++. Necesito enviar información del programa Fortran al programa C ++ en cada paso de tiempo. Sin embargo, los datos primero deben procesarse en Python antes de enviarse al programa C ++. He recibido una sugerencia para usar MPI para transferir los datos entre los programas.

Ahora estoy tratando de enviar una cadena simple del código de Fortran a Python, pero el código de Python se atasca en el comando de recepción.

Mi código Fortran se ve así:

      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

Mi código de Python es el siguiente:

    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)

El código de Python nunca pasa el comando de recepción de MPI y no termina. El código Fortran termina e imprime correctamente el mensaje "MPI FINALIZADO".

No veo dónde estoy haciendo algo mal, el mensaje se envía desde el proceso 0 al proceso 0 con una etiqueta 22 y usaMPI_COMM_WORLD en ambos códigos

Respuestas a la pregunta(4)

Su respuesta a la pregunta