Отправить / получить MPI-Fortran-Java - PullRequest
0 голосов
/ 25 июня 2018

У меня есть реализация отправки / получения в Open-MPI и Java.Цель состоит в том, чтобы отправить набор символов Fortran на Java.Когда Java получает эту строку, она печатает следующий результат. Результат отправка / получение

Мой код Фортрана:

program simple4 
  implicit none 
  include 'mpif.h' 

  integer ierr,my_rank,size 
  integer src, dest, tag, position, charSize 
  integer status(MPI_STATUS_SIZE) 
  CHARACTER*80 TEXT

  call mpi_init(ierr) 
  call mpi_comm_rank(MPI_COMM_WORLD,my_rank,ierr) 
  call mpi_comm_size(MPI_COMM_WORLD,size,ierr) 

  src = 0 
  dest = 1 
  tag = 999

  if(my_rank.eq.0) then
    position = 0 
    TEXT = "PRO" 
    call MPI_SEND(TEXT, 3, MPI_CHARACTER, dest, tag, MPI_COMM_WORLD, ierr) 
  else 
    print *, "Fortran process ", my_rank
  end if 

  call mpi_finalize(ierr)

end

Мой код Java:

....
char[] textChar = new char[3];
MPI.COMM_WORLD.recv(textChar, 3, MPI.CHAR, sourceRank, messageTag);
String text = String.copyValueOf(textChar);
System.out.println("Java - Text receive: " + text);

В чем будет проблемамой код?Фортран и Ява не смогут общаться таким образом?Каким было бы другое решение?

1 Ответ

0 голосов
/ 26 июня 2018

Основной причиной является то, что Fortran CHARACTER находится в ASCII, тогда как Java String находится в Unicode, поэтому необходимо выполнить некоторые дополнительные шаги.

Вот фрагмент того, что вы могли быделать на Java

byte[] textByte = new byte[3];
MPI.COMM_WORLD.recv(textByte, 3, MPI.BYTE, sourceRank, messageTag);
String text = new String(textByte, java.nio.charset.Charset.forName("UTF-8"));
System.out.println("Java - Text receive: " + text);
...