Matthew Knepley <knep...@gmail.com> writes:

> On Tue, May 17, 2016 at 2:27 PM, Mark Adams <mfad...@lbl.gov> wrote:
>
>> Other than set userandom = PETSC_TRUE, should I do anything else?
>>
>> I see:
>>
>> ierr = VecSetRandom(B,cheb->random);CHKERRQ(ierr);
>>
>> Should I use a special one or change this default to the special one?
>>
>
> I think Jed means this:
>
>   Make a special implementation of PetscRandom. The VecSetRandom() function
> will
>   assign to each row
>
>     v(r) = hash(r)

That's what I want, but it won't work with VecSetRandom as currently
implemented.  This function is called by both Seq and MPI Vecs:

PetscErrorCode VecSetRandom_Seq(Vec xin,PetscRandom r)
{
  PetscErrorCode ierr;
  PetscInt       n = xin->map->n,i;
  PetscScalar    *xx;

  PetscFunctionBegin;
  ierr = VecGetArray(xin,&xx);CHKERRQ(ierr);
  for (i=0; i<n; i++) {ierr = PetscRandomGetValue(r,&xx[i]);CHKERRQ(ierr);}
  ierr = VecRestoreArray(xin,&xx);CHKERRQ(ierr);
  PetscFunctionReturn(0);
}

The global index is not available to the PetscRandom so we can't
implement v(r) = hash(r).

Attachment: signature.asc
Description: PGP signature

Reply via email to