Lines Matching refs:xyt_handle

56 static PetscErrorCode do_xyt_solve(xyt_ADT xyt_handle, PetscScalar *rhs);
57 static PetscErrorCode check_handle(xyt_ADT xyt_handle);
58 static PetscErrorCode det_separators(xyt_ADT xyt_handle);
60 static PetscErrorCode xyt_generate(xyt_ADT xyt_handle);
61 static PetscErrorCode do_xyt_factor(xyt_ADT xyt_handle);
66 xyt_ADT xyt_handle;
70 xyt_handle = (xyt_ADT)malloc(sizeof(struct xyt_CDT));
71 xyt_handle->id = ++n_xyt;
72 xyt_handle->info = NULL;
73 xyt_handle->mvi = NULL;
75 return xyt_handle;
78 PetscErrorCode XYT_factor(xyt_ADT xyt_handle, /* prev. allocated xyt handle */
87 PetscCall(check_handle(xyt_handle));
90 PetscCheck((1 << (xyt_handle->level = PCTFS_i_log2_num_nodes)) == PCTFS_num_nodes, PETSC_COMM_SELF, PETSC_ERR_PLIB, "only 2^k for now and MPI_COMM_WORLD!!! %d != %d", 1 << PCTFS_i_log2_num_nodes, PCTFS_num_nodes);
93 xyt_handle->info = (xyt_info *)malloc(sizeof(xyt_info));
96 xyt_handle->mvi = set_mvi(local2global, n, m, (PetscErrorCode (*)(mv_info *, PetscScalar *, PetscScalar *))matvec, grid_data);
100 xyt_handle->ns = 0;
103 PetscCall(det_separators(xyt_handle));
105 PetscCall(do_xyt_factor(xyt_handle));
109 PetscErrorCode XYT_solve(xyt_ADT xyt_handle, PetscScalar *x, PetscScalar *b)
113 PetscCall(check_handle(xyt_handle));
116 if (b) PetscCall(PCTFS_rvec_copy(x, b, xyt_handle->mvi->n));
117 PetscCall(do_xyt_solve(xyt_handle, x));
121 PetscErrorCode XYT_free(xyt_ADT xyt_handle)
125 PetscCall(check_handle(xyt_handle));
128 free(xyt_handle->info->nsep);
129 free(xyt_handle->info->lnsep);
130 free(xyt_handle->info->fo);
131 free(xyt_handle->info->stages);
132 free(xyt_handle->info->solve_uu);
133 free(xyt_handle->info->solve_w);
134 free(xyt_handle->info->x);
135 free(xyt_handle->info->xcol_vals);
136 free(xyt_handle->info->xcol_sz);
137 free(xyt_handle->info->xcol_indices);
138 free(xyt_handle->info->y);
139 free(xyt_handle->info->ycol_vals);
140 free(xyt_handle->info->ycol_sz);
141 free(xyt_handle->info->ycol_indices);
142 free(xyt_handle->info);
143 free(xyt_handle->mvi->local2global);
144 PetscCall(PCTFS_gs_free(xyt_handle->mvi->PCTFS_gs_handle));
145 free(xyt_handle->mvi);
146 free(xyt_handle);
155 PetscErrorCode XYT_stats(xyt_ADT xyt_handle)
164 PetscCall(check_handle(xyt_handle));
167 if (!xyt_handle->info || !xyt_handle->mvi) {
172 vals[0] = vals[1] = vals[2] = xyt_handle->info->nnz;
173 vals[3] = vals[4] = vals[5] = xyt_handle->mvi->n;
174 vals[6] = vals[7] = vals[8] = xyt_handle->info->msg_buf_sz;
177 fvals[0] = fvals[1] = fvals[2] = xyt_handle->info->tot_solve_time / xyt_handle->info->nsolves++;
214 static PetscErrorCode do_xyt_factor(xyt_ADT xyt_handle)
216 return xyt_generate(xyt_handle);
219 static PetscErrorCode xyt_generate(xyt_ADT xyt_handle)
233 PetscInt a_n = xyt_handle->mvi->n;
234 PetscInt a_m = xyt_handle->mvi->m;
235 PetscInt *a_local2global = xyt_handle->mvi->local2global;
248 n = xyt_handle->mvi->n;
249 nsep = xyt_handle->info->nsep;
250 lnsep = xyt_handle->info->lnsep;
251 fo = xyt_handle->info->fo;
253 level = xyt_handle->level;
254 PCTFS_gs_handle = xyt_handle->mvi->PCTFS_gs_handle;
260 m = j - xyt_handle->ns;
261 if (m != j) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "xyt_generate() :: null space exists %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT "\n", m, j, xyt_handle->ns));
307 n_global = xyt_handle->info->n_global;
350 PetscCall(do_matvec(xyt_handle->mvi, v, u));
389 PetscCall(do_matvec(xyt_handle->mvi, v, u));
489 xyt_handle->info->n = xyt_handle->mvi->n;
490 xyt_handle->info->m = m;
491 xyt_handle->info->nnz = xt_nnz + yt_nnz;
492 xyt_handle->info->max_nnz = xt_max_nnz + yt_max_nnz;
493 xyt_handle->info->msg_buf_sz = stages[level] - stages[0];
494 xyt_handle->info->solve_uu = (PetscScalar *)malloc(m * sizeof(PetscScalar));
495 xyt_handle->info->solve_w = (PetscScalar *)malloc(m * sizeof(PetscScalar));
496 xyt_handle->info->x = x;
497 xyt_handle->info->xcol_vals = xcol_vals;
498 xyt_handle->info->xcol_sz = xcol_sz;
499 xyt_handle->info->xcol_indices = xcol_indices;
500 xyt_handle->info->stages = stages;
501 xyt_handle->info->y = y;
502 xyt_handle->info->ycol_vals = ycol_vals;
503 xyt_handle->info->ycol_sz = ycol_sz;
504 xyt_handle->info->ycol_indices = ycol_indices;
516 static PetscErrorCode do_xyt_solve(xyt_ADT xyt_handle, PetscScalar *uc)
519 PetscInt level = xyt_handle->level;
520 PetscInt n = xyt_handle->info->n;
521 PetscInt m = xyt_handle->info->m;
522 PetscInt *stages = xyt_handle->info->stages;
523 PetscInt *xcol_indices = xyt_handle->info->xcol_indices;
524 PetscInt *ycol_indices = xyt_handle->info->ycol_indices;
526 PetscScalar *solve_uu = xyt_handle->info->solve_uu;
527 PetscScalar *solve_w = xyt_handle->info->solve_w;
528 PetscScalar *x = xyt_handle->info->x;
529 PetscScalar *y = xyt_handle->info->y;
560 static PetscErrorCode check_handle(xyt_ADT xyt_handle)
565 PetscCheck(xyt_handle, PETSC_COMM_SELF, PETSC_ERR_PLIB, "check_handle() :: bad handle :: NULL %p", (void *)xyt_handle);
567 vals[0] = vals[1] = xyt_handle->id;
569 PetscCheck(!(vals[0] != vals[1]) && !(xyt_handle->id <= 0), PETSC_COMM_SELF, PETSC_ERR_PLIB, "check_handle() :: bad handle :: id mismatch min/max %" PetscInt_FMT "/%" PetscInt_FMT " %" PetscInt_FMT, vals[0], vals[1], xyt_handle->id);
573 static PetscErrorCode det_separators(xyt_ADT xyt_handle)
583 PCTFS_gs_ADT PCTFS_gs_handle = xyt_handle->mvi->PCTFS_gs_handle;
584 PetscInt *local2global = xyt_handle->mvi->local2global;
585 PetscInt n = xyt_handle->mvi->n;
586 PetscInt m = xyt_handle->mvi->m;
587 PetscInt level = xyt_handle->level;
624 xyt_handle->info->n_global = xyt_handle->info->m_global = (PetscInt)rsum[0];
625 xyt_handle->mvi->n_global = xyt_handle->mvi->m_global = (PetscInt)rsum[0];
712 xyt_handle->info->nsep = nsep;
713 xyt_handle->info->lnsep = lnsep;
714 xyt_handle->info->fo = fo;
715 xyt_handle->info->nfo = nfo;