Lines Matching refs:pcnn

104   PC_NN *pcnn = (PC_NN *)pc->data;  in PCDestroy_NN()  local
109 PetscCall(MatDestroy(&pcnn->coarse_mat)); in PCDestroy_NN()
110 PetscCall(VecDestroy(&pcnn->coarse_x)); in PCDestroy_NN()
111 PetscCall(VecDestroy(&pcnn->coarse_b)); in PCDestroy_NN()
112 PetscCall(KSPDestroy(&pcnn->ksp_coarse)); in PCDestroy_NN()
113 if (pcnn->DZ_IN) { in PCDestroy_NN()
114 PetscCall(PetscFree(pcnn->DZ_IN[0])); in PCDestroy_NN()
115 PetscCall(PetscFree(pcnn->DZ_IN)); in PCDestroy_NN()
160 PC_NN *pcnn; in PCCreate_NN() local
167 PetscCall(PetscNew(&pcnn)); in PCCreate_NN()
168 pc->data = (void *)pcnn; in PCCreate_NN()
171 pcnn->coarse_mat = NULL; in PCCreate_NN()
172 pcnn->coarse_x = NULL; in PCCreate_NN()
173 pcnn->coarse_b = NULL; in PCCreate_NN()
174 pcnn->ksp_coarse = NULL; in PCCreate_NN()
175 pcnn->DZ_IN = NULL; in PCCreate_NN()
206 PC_NN *pcnn = (PC_NN *)pc->data; in PCNNCreateCoarseMatrix() local
223 PetscCall(PetscMalloc((n_neigh + 1) * sizeof(PetscScalar *), &pcnn->DZ_IN)); in PCNNCreateCoarseMatrix()
224 DZ_IN = pcnn->DZ_IN; in PCNNCreateCoarseMatrix()
309 PetscCall(VecCreateMPI(PetscObjectComm((PetscObject)pc), 1, size, &pcnn->coarse_b)); in PCNNCreateCoarseMatrix()
310 PetscCall(VecDuplicate(pcnn->coarse_b, &pcnn->coarse_x)); in PCNNCreateCoarseMatrix()
312 PetscCall(MatCreate(PetscObjectComm((PetscObject)pc), &pcnn->coarse_mat)); in PCNNCreateCoarseMatrix()
313 PetscCall(MatSetSizes(pcnn->coarse_mat, 1, 1, size, size)); in PCNNCreateCoarseMatrix()
314 PetscCall(MatSetType(pcnn->coarse_mat, MATAIJ)); in PCNNCreateCoarseMatrix()
315 PetscCall(MatSeqAIJSetPreallocation(pcnn->coarse_mat, 1, NULL)); in PCNNCreateCoarseMatrix()
316 PetscCall(MatMPIAIJSetPreallocation(pcnn->coarse_mat, 1, NULL, n_neigh, NULL)); in PCNNCreateCoarseMatrix()
317 PetscCall(MatSetOption(pcnn->coarse_mat, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE)); in PCNNCreateCoarseMatrix()
318 PetscCall(MatSetOption(pcnn->coarse_mat, MAT_NEW_NONZERO_LOCATION_ERR, PETSC_FALSE)); in PCNNCreateCoarseMatrix()
319 PetscCall(MatSetValues(pcnn->coarse_mat, n_neigh, neigh, n_neigh, neigh, mat, ADD_VALUES)); in PCNNCreateCoarseMatrix()
320 PetscCall(MatAssemblyBegin(pcnn->coarse_mat, MAT_FINAL_ASSEMBLY)); in PCNNCreateCoarseMatrix()
321 PetscCall(MatAssemblyEnd(pcnn->coarse_mat, MAT_FINAL_ASSEMBLY)); in PCNNCreateCoarseMatrix()
330 PetscCall(MatZeroRows(pcnn->coarse_mat, 0, NULL, one, NULL, NULL)); in PCNNCreateCoarseMatrix()
333 PetscCall(MatZeroRows(pcnn->coarse_mat, 1, &row, one, NULL, NULL)); in PCNNCreateCoarseMatrix()
342 PetscCall(KSPCreate(PetscObjectComm((PetscObject)pc), &pcnn->ksp_coarse)); in PCNNCreateCoarseMatrix()
343 PetscCall(KSPSetNestLevel(pcnn->ksp_coarse, pc->kspnestlevel)); in PCNNCreateCoarseMatrix()
344 PetscCall(PetscObjectIncrementTabLevel((PetscObject)pcnn->ksp_coarse, (PetscObject)pc, 2)); in PCNNCreateCoarseMatrix()
345 PetscCall(KSPSetOperators(pcnn->ksp_coarse, pcnn->coarse_mat, pcnn->coarse_mat)); in PCNNCreateCoarseMatrix()
346 PetscCall(KSPGetPC(pcnn->ksp_coarse, &pc_ctx)); in PCNNCreateCoarseMatrix()
348 PetscCall(KSPSetType(pcnn->ksp_coarse, KSPPREONLY)); in PCNNCreateCoarseMatrix()
352 PetscCall(KSPSetOptionsPrefix(pcnn->ksp_coarse, "nn_coarse_")); in PCNNCreateCoarseMatrix()
353 PetscCall(KSPSetFromOptions(pcnn->ksp_coarse)); in PCNNCreateCoarseMatrix()
355 PetscCall(KSPSetUp(pcnn->ksp_coarse)); in PCNNCreateCoarseMatrix()
369 PetscCall(MatView(pcnn->coarse_mat, viewer)); in PCNNCreateCoarseMatrix()
376 pcnn->factor_coarse_rhs = (pcis->pure_neumann) ? 1.0 : 0.0; in PCNNCreateCoarseMatrix()
507 PC_NN *pcnn = (PC_NN *)pc->data; in PCNNBalancing() local
531 …for (k = 0, value = 0.0; k < pcis->n_shared[0]; k++) value += pcnn->DZ_IN[0][k] * work_N[pcis->sha… in PCNNBalancing()
532 value *= pcnn->factor_coarse_rhs; /* This factor is set in CreateCoarseMatrix(). */ in PCNNBalancing()
536 PetscCall(VecSetValue(pcnn->coarse_b, rank, value, INSERT_VALUES)); in PCNNBalancing()
544 PetscCall(KSPSolve(pcnn->ksp_coarse, pcnn->coarse_b, pcnn->coarse_x)); in PCNNBalancing()
545 if (!u) PetscCall(VecScale(pcnn->coarse_x, -1.0)); in PCNNBalancing()
546 PetscCall(VecGetArray(pcnn->coarse_x, &lambda)); in PCNNBalancing()
547 for (k = 0; k < pcis->n_shared[0]; k++) work_N[pcis->shared[0][k]] = *lambda * pcnn->DZ_IN[0][k]; in PCNNBalancing()
548 PetscCall(VecRestoreArray(pcnn->coarse_x, &lambda)); in PCNNBalancing()