PetscErrorCode PCCreateGAMG_Classical(PC pc) { PetscErrorCode ierr; PC_MG *mg = (PC_MG*)pc->data; PC_GAMG *pc_gamg = (PC_GAMG*)mg->innerctx; PC_GAMG_Classical *pc_gamg_classical; PetscFunctionBegin; ierr = PCGAMGClassicalInitializePackage(); if (pc_gamg->subctx) { /* call base class */ ierr = PCDestroy_GAMG(pc);CHKERRQ(ierr); } /* create sub context for SA */ ierr = PetscNewLog(pc,&pc_gamg_classical);CHKERRQ(ierr); pc_gamg->subctx = pc_gamg_classical; pc->ops->setfromoptions = PCGAMGSetFromOptions_Classical; /* reset does not do anything; setup not virtual */ /* set internal function pointers */ pc_gamg->ops->destroy = PCGAMGDestroy_Classical; pc_gamg->ops->graph = PCGAMGGraph_Classical; pc_gamg->ops->coarsen = PCGAMGCoarsen_Classical; pc_gamg->ops->prolongator = PCGAMGProlongator_Classical; pc_gamg->ops->optprol = PCGAMGOptProl_Classical_Jacobi; pc_gamg->ops->setfromoptions = PCGAMGSetFromOptions_Classical; pc_gamg->ops->createdefaultdata = PCGAMGSetData_Classical; pc_gamg_classical->interp_threshold = 0.2; pc_gamg_classical->nsmooths = 0; ierr = PetscObjectComposeFunction((PetscObject)pc,"PCGAMGClassicalSetType_C",PCGAMGClassicalSetType_GAMG);CHKERRQ(ierr); ierr = PCGAMGClassicalSetType(pc,PCGAMGCLASSICALSTANDARD);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode PCCreateGAMG_Classical(PC pc) { PetscErrorCode ierr; PC_MG *mg = (PC_MG*)pc->data; PC_GAMG *pc_gamg = (PC_GAMG*)mg->innerctx; PC_GAMG_Classical *pc_gamg_classical; PetscFunctionBegin; if (pc_gamg->subctx) { /* call base class */ ierr = PCDestroy_GAMG(pc);CHKERRQ(ierr); } /* create sub context for SA */ ierr = PetscNewLog(pc, PC_GAMG_Classical, &pc_gamg_classical);CHKERRQ(ierr); pc_gamg->subctx = pc_gamg_classical; pc->ops->setfromoptions = PCGAMGSetFromOptions_Classical; /* reset does not do anything; setup not virtual */ /* set internal function pointers */ pc_gamg->ops->destroy = PCGAMGDestroy_Classical; pc_gamg->ops->graph = PCGAMGGraph_Classical; pc_gamg->ops->coarsen = PCGAMGCoarsen_Classical; pc_gamg->ops->prolongator = PCGAMGProlongator_Classical; pc_gamg->ops->optprol = NULL; pc_gamg->ops->createdefaultdata = PCGAMGSetData_Classical; PetscFunctionReturn(0); }