| Line 853... |
Line 853... |
Level: developer
|
Level: developer
|
|
|
@*/
|
@*/
|
PetscErrorCode SlepcVecMAXPBY(Vec y,PetscScalar beta,PetscScalar alpha,PetscInt nv,PetscScalar a[],Vec x[])
|
PetscErrorCode SlepcVecMAXPBY(Vec y,PetscScalar beta,PetscScalar alpha,PetscInt nv,PetscScalar a[],Vec x[])
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
PetscBLASInt n,m,one=1;
|
PetscBLASInt n,m,one=1;
|
PetscScalar *py,*px;
|
PetscScalar *py;
|
|
const PetscScalar *px;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(y,VEC_CLASSID,1);
|
PetscValidHeaderSpecific(y,VEC_CLASSID,1);
|
if (!nv || !(y)->map->n) PetscFunctionReturn(0);
|
if (!nv || !(y)->map->n) PetscFunctionReturn(0);
|
if (nv < 0) SETERRQ1(((PetscObject)y)->comm,PETSC_ERR_ARG_OUTOFRANGE,"Number of vectors (given %D) cannot be negative",nv);
|
if (nv < 0) SETERRQ1(((PetscObject)y)->comm,PETSC_ERR_ARG_OUTOFRANGE,"Number of vectors (given %D) cannot be negative",nv);
|
| Line 875... |
Line 876... |
if ((*x)->map->N != (y)->map->N) SETERRQ(((PetscObject)y)->comm,PETSC_ERR_ARG_INCOMP,"Incompatible vector global lengths");
|
if ((*x)->map->N != (y)->map->N) SETERRQ(((PetscObject)y)->comm,PETSC_ERR_ARG_INCOMP,"Incompatible vector global lengths");
|
if ((*x)->map->n != (y)->map->n) SETERRQ(((PetscObject)y)->comm,PETSC_ERR_ARG_INCOMP,"Incompatible vector local lengths");
|
if ((*x)->map->n != (y)->map->n) SETERRQ(((PetscObject)y)->comm,PETSC_ERR_ARG_INCOMP,"Incompatible vector local lengths");
|
|
|
ierr = PetscLogEventBegin(SLEPC_VecMAXPBY,*x,y,0,0);CHKERRQ(ierr);
|
ierr = PetscLogEventBegin(SLEPC_VecMAXPBY,*x,y,0,0);CHKERRQ(ierr);
|
ierr = VecGetArray(y,&py);CHKERRQ(ierr);
|
ierr = VecGetArray(y,&py);CHKERRQ(ierr);
|
ierr = VecGetArray(*x,&px);CHKERRQ(ierr);
|
ierr = VecGetArrayRead(*x,&px);CHKERRQ(ierr);
|
n = PetscBLASIntCast(nv);
|
n = PetscBLASIntCast(nv);
|
m = PetscBLASIntCast((y)->map->n);
|
m = PetscBLASIntCast((y)->map->n);
|
BLASgemv_("N",&m,&n,&alpha,px,&m,a,&one,&beta,py,&one);
|
BLASgemv_("N",&m,&n,&alpha,px,&m,a,&one,&beta,py,&one);
|
ierr = VecRestoreArray(y,&py);CHKERRQ(ierr);
|
ierr = VecRestoreArray(y,&py);CHKERRQ(ierr);
|
ierr = VecRestoreArray(*x,&px);CHKERRQ(ierr);
|
ierr = VecRestoreArrayRead(*x,&px);CHKERRQ(ierr);
|
ierr = PetscLogFlops(nv*2*(y)->map->n);CHKERRQ(ierr);
|
ierr = PetscLogFlops(nv*2*(y)->map->n);CHKERRQ(ierr);
|
ierr = PetscLogEventEnd(SLEPC_VecMAXPBY,*x,y,0,0);CHKERRQ(ierr);
|
ierr = PetscLogEventEnd(SLEPC_VecMAXPBY,*x,y,0,0);CHKERRQ(ierr);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|