code: def solve(self):
          r
          self._initialize_A()
          self._create_solver()
          self._initialize_b_x()
  
          # PETSc
          self.ksp.setOperators(self.petsc_A)
          self.ksp.setFromOptions()
  
          self.ksp.solve(self.petsc_b, self.petsc_x)
  
          # Convert solution vector from PETSc.Vec instance
          # to a numpy array
          self.solution = PETSc.Vec.getArray(self.petsc_x)
  
          # Destroy petsc solver, coefficients matrix, rhs, and solution vectors
          PETSc.KSP.destroy(self.ksp)
          PETSc.Mat.destroy(self.petsc_A)
          PETSc.Vec.destroy(self.petsc_b)
          PETSc.Vec.destroy(self.petsc_x)
  
          return(self.solution)
docs: r"""
          This method solves the sparse linear system, converts the
          solution vector from a PETSc.Vec instance to a numpy array,
          and finally destroys all the petsc objects to free memory.
  
          Parameters
          ----------
          solver_type : string, optional
              Default is the iterative solver 'cg' based on the
              Conjugate Gradient method.
          preconditioner_type : string, optional
              Default is the 'jacobi' preconditioner, i.e., diagonal
              scaling preconditioning. The preconditioner is used with
              iterative solvers. When a direct solver is used, this
              parameter is ignored.
          factorization_type : string, optional
              The factorization type used with the direct solver.
              Default is 'lu'. This parameter is ignored when an
              iterative solver is used.
  
          Returns
          -------
          Returns a numpy array corresponding to the solution of
          the linear sparse system Ax = b.
  
          Notes
          -----
          Certain combinations of iterative solvers and precondioners
          or direct solvers and factorization types are not supported.
          The summary table of the different possibilities
          can be found here:
          https://www.mcs.anl.gov/petsc/documentation/linearsolvertable.html