<div><p><span>Hello!</span></p><p><span>Could you please tell me how to use Java and VTK&MPI together?</span></p><p><span>I have the following simple program:</span></p><p><span style="font-family:"courier new",courier;">public static void main(String[] args) {</span></p><p><span style="font-family:"courier new",courier;">  try {</span></p><p><span style="font-family:"courier new",courier;">  MPI.Init(args);</span></p><p><span style="font-family:"courier new",courier;">  vtkMPIController controller = new vtkMPIController();</span></p><p><span style="font-family:"courier new",courier;">  controller.Initialize();</span></p><p><span style="font-family:"courier new",courier;">  Process p = new Process();</span></p><p><span style="font-family:"courier new",courier;">  controller.SetSingleProcessObject(p);</span></p><p><span style="font-family:"courier new",courier;">  controller.SingleMethodExecute(); </span></p><p><span style="font-family:"courier new",courier;">  controller.Finalize();</span></p><p><span style="font-family:"courier new",courier;">  }catch(Exception e){</span></p><p><span style="font-family:"courier new",courier;">   } </span></p><p><span style="font-family:"courier new",courier;">}</span></p><p><span>and</span></p><p><span style="font-family:"courier new",courier;">public class Process extends vtkProcess {</span></p><p><span style="font-family:"courier new",courier;">   public void Execute(){</span></p><p><span style="font-family:"courier new",courier;">       System.out.println("in process");</span></p><p><span style="font-family:"courier new",courier;">   }</span></p><p><span style="font-family:"courier new",courier;">}</span></p><span><span><br /></span></span><p><span>But then I run it (command is simplified):</span></p><p><span style="font-family:"courier new",courier;">mpirun -n 2 java -cp ./lib/vtk/vtk.jar:./lib/mpi/mpi.jar:./out/                          -Djava.library.path=$openmpi_libs:$vtk_libs com.vtk.demo.Test</span></p><p><span style="font-family:"courier new",courier;">the program crashes on controller.SingleMethodExecute() line with fatal error:</span></p><p><span style="font-family:"courier new",courier;">[02467] Signal code:  (-6)</span></p><p><span style="font-family:"courier new",courier;">/usr/lib/libc.so.6(gsignal+0x38)[0x7f0146e2e5f8]</span></p><p><span style="font-family:"courier new",courier;">[02468] [ 2] /usr/lib/libc.so.6(abort+0x16a)[0x7f0146e2fa7a]</span></p><p><span style="font-family:"courier new",courier;">[02468] [ 3] /usr/laib/jvm/java-7-jdk/jre/lib/amd64/server/libjvm.so(+0x820d75)[0x7f01467a1d75]</span></p><p><span style="font-family:"courier new",courier;">[02468] [ 4] /usr/lib/jvm/java-7-jdk/jre/lib/amd64/server/libjvm.so(+0x9a36d7)[0x7f01469246d7]</span></p><p><span style="font-family:"courier new",courier;">[02468] [ 5] /usr/lib/jvm/java-7-jdk/jre/lib/amd64/server/libjvm.so(JVM_handle_linux_signal+0x14f)[0x7f01467a6c8f]</span></p><p><span style="font-family:"courier new",courier;">[02468] [ 6] /usr/lib/libpthread.so.0(+0x10d60)[0x7f01475cad60]</span></p><p><span style="font-family:"courier new",courier;">[02468] *** End of error message ***</span></p><p><span style="font-family:"courier new",courier;">[02467] [ 0] /usr/lib/libpthread.so.0(+0x10d60)[0x7f154f17cd60]</span></p><p><span style="font-family:"courier new",courier;">[02467] [ 1] /usr/lib/libc.so.6(gsignal+0x38)[0x7f154e9e05f8]</span></p><p><span style="font-family:"courier new",courier;">[02467] [ 2] /usr/lib/libc.so.6(abort+0x16a)[0x7f154e9e1a7a]</span></p><p><span style="font-family:"courier new",courier;">[02467] [ 3] /usr/lib/jvm/java-7-jdk/jre/lib/amd64/server/libjvm.so(+0x820d75)[0x7f154e353d75]</span></p><p><span style="font-family:"courier new",courier;">[02467] [ 4] /usr/lib/jvm/java-7-jdk/jre/lib/amd64/server/libjvm.so(+0x9a36d7)[0x7f154e4d66d7]</span></p><p><span style="font-family:"courier new",courier;">[02467] [ 5] /usr/lib/jvm/java-7-jdk/jre/lib/amd64/server/libjvm.so(JVM_handle_linux_signal+0x14f)[0x7f154e358c8f]</span></p><p><span style="font-family:"courier new",courier;">[02467] [ 6] /usr/lib/libpthread.so.0(+0x10d60)[0x7f154f17cd60]</span></p><p><span style="font-family:"courier new",courier;">[02467] *** End of error message ***</span></p><p><span style="font-family:"courier new",courier;">--------------------------------------------------------------------------</span></p><p><span style="font-family:"courier new",courier;">mpirun noticed that process rank 1 with PID 2468 on node glmv exited on signal 6 (Aborted).</span></p><span><span><br /></span></span><p><span>My environment: VTK nightbuild from December 17, VTK_RENDERING_BACKEND OpenGL2, archlinux 64 bit, openmpi 1.10.1 + java bindings enabled, jdk 1.7.0_79</span></p><span><span><br /></span></span><p><span>I also added the </span><span>MPI.Init(args)</span><span> line to avoid another crash error:</span></p><p><span style="font-family:"courier new",courier;">*** The MPI_Comm_create_errhandler() function was called before MPI_INIT was invoked.</span></p><p><span style="font-family:"courier new",courier;">*** This is disallowed by the MPI standard.</span></p><p><span style="font-family:"courier new",courier;">*** Your MPI job will now abort.</span></p><p><span style="font-family:"courier new",courier;">[glmv:17431] Local abort before MPI_INIT completed successfully; not able to aggregate error messages, and not able to guarantee that all other processes were killed!</span></p><span><span><br /></span></span><p><span>And it is the OpenMPI Java library function not VTK library.</span></p><span><span></span></span></div><div> </div><div><span><span>Additional information:<br /></span></span><p><span>Simple Java/MPI program (without VTK) works properly.</span></p><p><span>Simple Java/MPI program with VTK but without </span><span>controller.SingleMethodExecute()</span><span>call also work properly.</span></p><span><span><br /></span></span><p><span>I have found a simple trick how to use a vtkMPIController, for example, with </span><span>vtkCompositeRenderManager</span><span> feature:</span></p><span><span><br /></span></span><p><span style="font-family:"courier new",courier;">public static void main(String[] args) {</span></p><p><span style="font-family:"courier new",courier;">  try {</span></p><p><span style="font-family:"courier new",courier;">MPI.Init(args);</span></p><p><span style="font-family:"courier new",courier;">vtkMPIController controller = new vtkMPIController();</span></p><p><span style="font-family:"courier new",courier;">controller.Initialize();</span></p><p><span style="font-family:"courier new",courier;">Process p = new Process(controller);</span></p><p><span style="font-family:"courier new",courier;">p.Execute();</span></p><p><span style="font-family:"courier new",courier;">controller.Finalize();</span></p><p><span style="font-family:"courier new",courier;">  }catch(Exception e){</span></p><p><span style="font-family:"courier new",courier;">   } </span></p><p><span style="font-family:"courier new",courier;">}</span></p><p><span style="font-family:"courier new",courier;">public class Process extends vtkProcess {</span></p><p><span style="font-family:"courier new",courier;">  final vtkMPIController controller;</span></p><p><span style="font-family:"courier new",courier;">  final int mpiId;</span></p><p><span style="font-family:"courier new",courier;">  public Process(final vtkMPIController controller){</span></p><p><span style="font-family:"courier new",courier;">     this. controller=controller;</span></p><p><span style="font-family:"courier new",courier;">     mpiId = controller.GetLocalProcessId();</span></p><p><span style="font-family:"courier new",courier;">}</span></p><p><span style="font-family:"courier new",courier;">  public void Execute(){       </span></p><p><span style="font-family:"courier new",courier;"><span></span>    …</span></p><p><span style="font-family:"courier new",courier;">    vtkCompositeRenderManager crm = new vtkCompositeRenderManager();</span></p><p><span style="font-family:"courier new",courier;">    crm.SetRenderWindow(renWin);</span></p><p><span style="font-family:"courier new",courier;">    crm.SetController(controller);</span></p><p><span style="font-family:"courier new",courier;">    crm.StartInteractor();</span></p><p><span style="font-family:"courier new",courier;">   }</span></p><p><span style="font-family:"courier new",courier;">}</span></p><span style="font-family:"courier new",courier;"><br /></span><p><span>It works properly using </span><span>crm.SetController(controller) </span><span>command, but i don’t think that it is the best way.</span></p><span><span><br /></span></span><p><span>Would you please advise what I can do.</span></p><span><br /><span>Thanks in advance, Marat</span></span></div>