Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #include "ExternalPetscSolverApp.h" 11 : #include "Moose.h" 12 : #include "AppFactory.h" 13 : #include "MooseSyntax.h" 14 : #include "PETScDiffusionFDM.h" 15 : #include "libmesh/petsc_vector.h" 16 : #include "ExternalPETScProblem.h" 17 : #include "Executioner.h" 18 : 19 : #include "libmesh/petsc_solver_exception.h" 20 : 21 : InputParameters 22 749 : ExternalPetscSolverApp::validParams() 23 : { 24 749 : InputParameters params = MooseApp::validParams(); 25 : 26 749 : params.set<bool>("use_legacy_material_output") = false; 27 749 : params.set<bool>("use_legacy_initial_residual_evaluation_behavior") = false; 28 749 : return params; 29 0 : } 30 : 31 749 : ExternalPetscSolverApp::ExternalPetscSolverApp(const InputParameters & parameters) 32 749 : : MooseApp(parameters), _ts(nullptr), _is_petsc_app(false) 33 : { 34 749 : ExternalPetscSolverApp::registerAll(_factory, _action_factory, _syntax); 35 749 : } 36 : 37 : TS & 38 1110 : ExternalPetscSolverApp::getPetscTS() 39 : { 40 1110 : if (!_ts) 41 : { 42 : // Create an external PETSc solver 43 370 : LibmeshPetscCall(PETScExternalSolverCreate(_comm->get(), &_ts)); 44 370 : _is_petsc_app = true; 45 : } 46 1110 : return _ts; 47 : } 48 : 49 1024 : ExternalPetscSolverApp::~ExternalPetscSolverApp() 50 : { 51 : // Destroy PETSc solver 52 749 : auto ierr = PETScExternalSolverDestroy(_ts); 53 : libmesh_ignore(ierr); 54 1024 : } 55 : 56 : void 57 1223 : ExternalPetscSolverApp::registerAll(Factory & f, ActionFactory & af, Syntax & /*s*/) 58 : { 59 1223 : Registry::registerObjectsTo(f, {"ExternalPetscSolverApp"}); 60 1223 : Registry::registerActionsTo(af, {"ExternalPetscSolverApp"}); 61 : 62 : /* register custom execute flags, action syntax, etc. here */ 63 1223 : } 64 : 65 : void 66 379 : ExternalPetscSolverApp::registerApps() 67 : { 68 379 : registerApp(ExternalPetscSolverApp); 69 379 : } 70 : 71 : /*************************************************************************************************** 72 : *********************** Dynamic Library Entry Points - DO NOT MODIFY ****************************** 73 : **************************************************************************************************/ 74 : extern "C" void 75 0 : ExternalPetscSolverApp__registerAll(Factory & f, ActionFactory & af, Syntax & s) 76 : { 77 0 : ExternalPetscSolverApp::registerAll(f, af, s); 78 0 : } 79 : extern "C" void 80 0 : ExternalPetscSolverApp__registerApps() 81 : { 82 0 : ExternalPetscSolverApp::registerApps(); 83 0 : }