MCPcopy Create free account
hub / github.com/FEniCS/dolfinx / petsc_nls_module

Function petsc_nls_module

python/dolfinx/wrappers/petsc.cpp:275–353  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

273}
274
275void petsc_nls_module(nb::module_& m)
276{
277 // dolfinx::NewtonSolver
278 nb::class_<dolfinx::nls::petsc::NewtonSolver>(m, "NewtonSolver")
279 .def(
280 "__init__",
281 [](dolfinx::nls::petsc::NewtonSolver* ns,
282 const dolfinx_wrappers::MPICommWrapper comm)
283 {
284 new (ns) dolfinx::nls::petsc::NewtonSolver(comm.get());
285 std::cerr << "NewtonSolver is deprecated, and will be removed in a "
286 "future release.\n";
287 },
288 nb::arg("comm"))
289 .def_prop_ro("krylov_solver",
290 [](const dolfinx::nls::petsc::NewtonSolver& self)
291 {
292 KSP ksp = self.get_krylov_solver().ksp();
293 PyObject* obj = PyPetscKSP_New(ksp);
294 return nb::steal(obj);
295 })
296 .def("setF", &dolfinx::nls::petsc::NewtonSolver::setF, nb::arg("F"),
297 nb::arg("b"))
298 .def("setJ", &dolfinx::nls::petsc::NewtonSolver::setJ, nb::arg("J"),
299 nb::arg("Jmat"))
300 .def("setP", &dolfinx::nls::petsc::NewtonSolver::setP, nb::arg("P"),
301 nb::arg("Pmat"))
302 .def(
303 "set_update",
304 [](dolfinx::nls::petsc::NewtonSolver& self,
305 const std::function<void(
306 const dolfinx::nls::petsc::NewtonSolver* solver, const Vec,
307 Vec)>&
308 update) // See
309 // https://github.com/wjakob/nanobind/discussions/361
310 // on why we pass NewtonSolver* rather than
311 // NewtonSolver&
312 {
313 self.set_update(
314 [update](const dolfinx::nls::petsc::NewtonSolver& solver,
315 const Vec dx, Vec x) { update(&solver, dx, x); });
316 },
317 nb::arg("update"))
318 .def(
319 "set_convergence_check",
320 [](dolfinx::nls::petsc::NewtonSolver& self,
321 const std::function<std::pair<double, bool>(
322 const dolfinx::nls::petsc::NewtonSolver* solver, const Vec)>&
323 convergence_check) // See
324 // https://github.com/wjakob/nanobind/discussions/361
325 // on why we pass NewtonSolver* rather than
326 // NewtonSolver&
327 {
328 self.set_convergence_check(
329 [convergence_check](
330 const dolfinx::nls::petsc::NewtonSolver& solver,
331 const Vec r) { return convergence_check(&solver, r); });
332 },

Callers 1

petscFunction · 0.85

Calls 4

kspMethod · 0.80
set_updateMethod · 0.80
set_convergence_checkMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected