[petsc-users] How to copy vectors to/from petsc?

Karl Rupp rupp at iue.tuwien.ac.at
Thu Sep 28 15:46:45 CDT 2017


Hi Klaus,

there are several options, e.g.:
  * 
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecCreateSeqWithArray.html 
(sequential)
  * 
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecSetValues.html 
(use with multiple MPI ranks if you cannot easily determine the local parts)
  * 
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecGetArray.html 
(get a pointer to the data and assign values yourself)

Best regards,
Karli


On 09/28/2017 02:43 PM, Klaus Burkart wrote:
> Hello,
> 
> I want to solve a physics problem with support of petsc i.e. solve the 
> linear system using petsc. So far I have been using another linear 
> algebra library. I am using c++. Now I am struggling to load the rhs 
> vector/array from the physics application to petsc and copying the 
> result x back to the physics application. I found information about how 
> to load data from binaries or from files but both is not the case here. 
> The computation will take place on a multi core CPU using MPI.
> 
> This is how far I am and includes my questions:
> 
> ...
> #include <petscvec.h>
> 
> 
> // vector x, rhs size n; "matrix" is the matrix from the physics application
> PetscMPIInt n = matrix.diag().size();
> 
> Vec            rhs; // Question 1: How to set the value type to double?
> VecSetSizes(rhs, n, PETSC_DECIDE); // Question 2: What is "global size"?
> 
> Vec            x;
> VecSetSizes(x, n, PETSC_DECIDE);
> 
> 
> 
> 
> // Question 3:
> // How to load petsc rhs vector with data from vector (= pointer array) 
> named rhs_source?
> // Current load/copy syntax is:    fast_copy(rhs_source.begin(), 
> rhs_source.end(), rhs.begin());
> 
> 
> 
> // Question 4:
> // How to export petsc result vector x i.e. load the result x into array 
> named x_result?
> // Current load/copy syntax is:    fast_copy(x.begin(), x.end(), 
> x_result.begin());
> 
> 
> 
> // destroy petsc vectors
> VecDestroy(&rhs);
> VecDestroy(&x);
> PetscFinalize();
> 
> // What's the best way to copy rhs to petsc and to copy the result x 
> back to the physics application?
> 


More information about the petsc-users mailing list