static PetscErrorCode ComputeKSPFETIDP(DomainData dd, KSP ksp_bddc, KSP *ksp_fetidp) { PetscErrorCode ierr; KSP temp_ksp; PC pc,D; Mat F; PetscFunctionBeginUser; ierr = KSPGetPC(ksp_bddc,&pc);CHKERRQ(ierr); ierr = PCBDDCCreateFETIDPOperators(pc,&F,&D);CHKERRQ(ierr); ierr = KSPCreate(PetscObjectComm((PetscObject)F),&temp_ksp);CHKERRQ(ierr); ierr = KSPSetOperators(temp_ksp,F,F);CHKERRQ(ierr); ierr = KSPSetType(temp_ksp,KSPCG);CHKERRQ(ierr); ierr = KSPSetPC(temp_ksp,D);CHKERRQ(ierr); ierr = KSPSetComputeSingularValues(temp_ksp,PETSC_TRUE);CHKERRQ(ierr); ierr = KSPSetFromOptions(temp_ksp);CHKERRQ(ierr); ierr = KSPSetUp(temp_ksp);CHKERRQ(ierr); *ksp_fetidp = temp_ksp; ierr = MatDestroy(&F);CHKERRQ(ierr); ierr = PCDestroy(&D);CHKERRQ(ierr); PetscFunctionReturn(0); }
PETSC_EXTERN void PETSC_STDCALL pcbddccreatefetidpoperators_(PC pc,Mat *fetidp_mat,PC *fetidp_pc, int *__ierr ){ *__ierr = PCBDDCCreateFETIDPOperators( (PC)PetscToPointer((pc) ),fetidp_mat,fetidp_pc); }