<div dir="ltr"><div><div><div>I have used Eigen (a C++ template library ) to set up a spin dynamics simulation program, and now I would like to speed up the simulation in parallel using PETSc, mostly use sparse Mat and Vec operations. After some rewrite work (just replace the matrix operations by PETSc), I can firstly set up a spin system and calculate its relaxation matrix R.<br>
<br>PetscErrorCode ierr;<br>PetscInitialize(&argc, &argv, (char*) 0, help);<br>  SpinSystem sys;<br>  sys.set_magnet(14.1);<br>  sys.set_isotopes("1H 13C");<br>  sys.set_basis("sphten_liouv");<br>
  sys.set_zeeman_eigs("(7 15 -22) (11 18 -29)");<br>  sys.set_zeeman_euler("(1.0472 0.7854 0.6283) (0.5236 0.4488 0.3927)");<br>  sys.set_coordinates("1 (0 0 0) 2 (0 0 1.02)");<br>  sys.create(); <br>
  Relaxation relax(sys);<br>  Mat R = relax.Rmat();<br>  ierr = MatView(R, PETSC_VIEWER_STDOUT_WORLD);<br>  ierr = MatDestroy(&R);<br>  CHKERRQ(ierr);<br>  ierr = PetscFinalize();<br><br></div>And run it with mpirun -np 1 ./Release/spin-scenarios-petsc it is ok.<br>
</div>However if I set the np to be 2 or more, the program would generate the same number of the spin system object and it is time consuming to get the result. I am very confused that in the implementation the Mat and Vec variables are not sequential like Eigen, so could you give me some advise how to organize my program based on PETSc? <br>
I am a beginner of both OPENMPI and PETSc. Also, after the simple set up part, there will be some more time consuming work to do, that's why I switch from Eigen to PETSc.<br></div><div>Thanks a lot!<br></div><div><div>
<div><br></div></div></div></div>