| Line 116... |
Line 116... |
/*
|
/*
|
Fill V with user vectors
|
Fill V with user vectors
|
*/
|
*/
|
|
|
typedef struct {
|
typedef struct {
|
Vec *userV; /* custom initial search subspace */
|
|
PetscInt size_userV, /* size of userV */
|
PetscInt size_userV, /* size of userV */
|
k; /* desired initial subspace size */
|
k; /* desired initial subspace size */
|
void *old_initV_data; /* old initV data */
|
void *old_initV_data; /* old initV data */
|
} dvdInitV_User;
|
} dvdInitV_User;
|
|
|
#undef __FUNCT__
|
#undef __FUNCT__
|
#define __FUNCT__ "dvd_initV_user"
|
#define __FUNCT__ "dvd_initV_user"
|
PetscErrorCode dvd_initV_user(dvdDashboard *d, dvdBlackboard *b, Vec *userV,
|
PetscErrorCode dvd_initV_user(dvdDashboard *d, dvdBlackboard *b,
|
PetscInt size_userV, PetscInt k)
|
PetscInt size_userV, PetscInt k)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
dvdInitV_User *data;
|
dvdInitV_User *data;
|
|
|
| Line 140... |
Line 139... |
/* Setup the step */
|
/* Setup the step */
|
if (b->state >= DVD_STATE_CONF) {
|
if (b->state >= DVD_STATE_CONF) {
|
ierr = PetscMalloc(sizeof(dvdInitV_User), &data); CHKERRQ(ierr);
|
ierr = PetscMalloc(sizeof(dvdInitV_User), &data); CHKERRQ(ierr);
|
data->k = k;
|
data->k = k;
|
data->size_userV = size_userV;
|
data->size_userV = size_userV;
|
data->userV = userV;
|
|
data->old_initV_data = d->initV_data;
|
data->old_initV_data = d->initV_data;
|
d->initV_data = data;
|
d->initV_data = data;
|
d->initV = dvd_initV_user_0;
|
d->initV = dvd_initV_user_0;
|
DVD_FL_ADD(d->destroyList, dvd_initV_user_d);
|
DVD_FL_ADD(d->destroyList, dvd_initV_user_d);
|
}
|
}
|
| Line 159... |
Line 157... |
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
dvdInitV_User *data = (dvdInitV_User*)d->initV_data;
|
dvdInitV_User *data = (dvdInitV_User*)d->initV_data;
|
PetscInt i;
|
PetscInt i;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
|
|
|
/* The user vectors are already in V */
|
|
i = PetscMin(data->size_userV,d->max_size_V);
|
|
|
/* Generate a set of random initial vectors and orthonormalize them */
|
/* Generate a set of random initial vectors and orthonormalize them */
|
for (i=0; i<PetscMin(data->size_userV,d->max_size_V); i++) {
|
|
ierr = VecCopy(data->userV[i], d->V[i]); CHKERRQ(ierr);
|
|
}
|
|
for (; i<PetscMin(data->k,d->max_size_V); i++) {
|
for (; i<PetscMin(data->k,d->max_size_V); i++) {
|
ierr = SlepcVecSetRandom(d->V[i], d->eps->rand); CHKERRQ(ierr);
|
ierr = SlepcVecSetRandom(d->V[i], d->eps->rand); CHKERRQ(ierr);
|
}
|
}
|
d->size_V = i;
|
d->size_V = i;
|
d->V_imm_s = 0; d->V_imm_e = 0;
|
d->V_imm_s = 0; d->V_imm_e = 0;
|