File: dolfinx.cpp

package info (click to toggle)
fenics-dolfinx 1%3A0.9.0-11
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 5,376 kB
  • sloc: cpp: 33,701; python: 22,338; makefile: 230; sh: 171; xml: 55
file content (82 lines) | stat: -rw-r--r-- 2,340 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Copyright (C) 2017-2023 Chris N. Richardson and Garth N. Wells
//
// This file is part of DOLFINx (https://www.fenicsproject.org)
//
// SPDX-License-Identifier:    LGPL-3.0-or-later

#include <nanobind/nanobind.h>

namespace nb = nanobind;

namespace dolfinx_wrappers
{
void common(nb::module_& m);
void mpi(nb::module_& m);

void petsc(nb::module_& m_fem, nb::module_& m_la, nb::module_& m_nls);

void log(nb::module_& m);
void assemble(nb::module_& m);
void fem(nb::module_& m);
void geometry(nb::module_& m);
void graph(nb::module_& m);
void io(nb::module_& m);
void la(nb::module_& m);
void mesh(nb::module_& m);
void nls(nb::module_& m);
void refinement(nb::module_& m);
} // namespace dolfinx_wrappers

NB_MODULE(cpp, m)
{
  // Create module for C++ wrappers
  m.doc() = "DOLFINx Python interface";
  m.attr("__version__") = DOLFINX_VERSION;

#ifdef NDEBUG
  nanobind::set_leak_warnings(false);
#endif

  // Create common submodule [common]
  nb::module_ common = m.def_submodule("common", "Common module");
  dolfinx_wrappers::common(common);

  // Create common submodule [log]
  nb::module_ log = m.def_submodule("log", "Logging module");
  dolfinx_wrappers::log(log);

  // Create mesh submodule [mesh]
  nb::module_ mesh = m.def_submodule("mesh", "Mesh library module");
  dolfinx_wrappers::mesh(mesh);

  // Create graph submodule [graph]
  nb::module_ graph = m.def_submodule("graph", "Graph module");
  dolfinx_wrappers::graph(graph);

  // Create fem submodule [fem]
  nb::module_ fem = m.def_submodule("fem", "FEM module");
  dolfinx_wrappers::assemble(fem);
  dolfinx_wrappers::fem(fem);

  // Create geometry submodule
  nb::module_ geometry = m.def_submodule("geometry", "Geometry module");
  dolfinx_wrappers::geometry(geometry);

  // Create io submodule
  nb::module_ io = m.def_submodule("io", "I/O module");
  dolfinx_wrappers::io(io);

  // Create la submodule
  nb::module_ la = m.def_submodule("la", "Linear algebra module");
  dolfinx_wrappers::la(la);

  // Create refinement submodule
  nb::module_ refinement = m.def_submodule("refinement", "Refinement module");
  dolfinx_wrappers::refinement(refinement);

#if defined(HAS_PETSC) && defined(HAS_PETSC4PY)
  // PETSc-specific wrappers
  nb::module_ nls = m.def_submodule("nls", "Nonlinear solver module");
  dolfinx_wrappers::petsc(fem, la, nls);
#endif
}