This page was generated from unit-1.1-poisson/poisson.ipynb.

1.1 First NGSolve example

Let us solve the Poisson problem of finding \(u\) satisfying

\[\begin{split}\begin{aligned} -\Delta u & = f && \text { in the unit square}, \\ u & = 0 && \text{ on the bottom and right parts of the boundary}, \\ \frac{\partial u }{\partial n } & = 0 && \text{ on the remaining boundary parts}. \end{aligned}\end{split}\]

Quick steps to solution:

1. Import NGSolve and Netgen Python modules:

[1]:
import netgen.gui
from ngsolve import *
from netgen.geom2d import unit_square

2. Generate an unstructured mesh

[2]:
mesh = Mesh(unit_square.GenerateMesh(maxh=0.2))
mesh.nv, mesh.ne   # number of vertices & elements
[2]:
(39, 56)
  • Here we prescribed a maximal mesh-size of 0.2 using the maxh flag.

  • The mesh can be viewed by switching to the Mesh tab in the Netgen GUI.

3. Declare a finite element space:

[3]:
fes = H1(mesh, order=2, dirichlet="bottom|right")
fes.ndof  # number of unknowns in this space
[3]:
133

Python’s help system displays further documentation.

[4]:
help(fes)
Help on H1 in module ngsolve.comp object:

class H1(FESpace)
 |  An H1-conforming finite element space.
 |
 |  The H1 finite element space consists of continuous and
 |  element-wise polynomial functions. It uses a hierarchical (=modal)
 |  basis built from integrated Legendre polynomials on tensor-product elements,
 |  and Jaboci polynomials on simplicial elements.
 |
 |  Boundary values are well defined. The function can be used directly on the
 |  boundary, using the trace operator is optional.
 |
 |  The H1 space supports variable order, which can be set individually for edges,
 |  faces and cells.
 |
 |  Internal degrees of freedom are declared as local dofs and are eliminated
 |  if static condensation is on.
 |
 |  The wirebasket consists of all vertex dofs. Optionally, one can include the
 |  first (the quadratic bubble) edge basis function, or all edge basis functions
 |  into the wirebasket.
 |
 |   Keyword arguments can be:
 |  order: int = 1
 |    order of finite element space
 |  complex: bool = False
 |    Set if FESpace should be complex
 |  dirichlet: regexpr
 |    Regular expression string defining the dirichlet boundary.
 |    More than one boundary can be combined by the | operator,
 |    i.e.: dirichlet = 'top|right'
 |  dirichlet_bbnd: regexpr
 |    Regular expression string defining the dirichlet bboundary,
 |    i.e. points in 2D and edges in 3D.
 |    More than one boundary can be combined by the | operator,
 |    i.e.: dirichlet_bbnd = 'top|right'
 |  dirichlet_bbbnd: regexpr
 |    Regular expression string defining the dirichlet bbboundary,
 |    i.e. points in 3D.
 |    More than one boundary can be combined by the | operator,
 |    i.e.: dirichlet_bbbnd = 'top|right'
 |  definedon: Region or regexpr
 |    FESpace is only defined on specific Region, created with mesh.Materials('regexpr')
 |    or mesh.Boundaries('regexpr'). If given a regexpr, the region is assumed to be
 |    mesh.Materials('regexpr').
 |  dim: int = 1
 |    Create multi dimensional FESpace (i.e. [H1]^3)
 |  dgjumps: bool = False
 |    Enable discontinuous space for DG methods, this flag is needed for DG methods,
 |    since the dofs have a different coupling then and this changes the sparsity
 |    pattern of matrices.
 |  low_order_space: bool = True
 |    Generate a lowest order space together with the high-order space,
 |    needed for some preconditioners.
 |  order_policy: ORDER_POLICY = ORDER_POLICY.OLDSTYLE
 |    CONSTANT .. use the same fixed order for all elements,
 |    NODAL ..... use the same order for nodes of same shape,
 |    VARIBLE ... use an individual order for each edge, face and cell,
 |    OLDSTYLE .. as it used to be for the last decade
 |  wb_withedges: bool = true(3D) / false(2D)
 |    use lowest-order edge dofs for BDDC wirebasket
 |  wb_fulledges: bool = false
 |    use all edge dofs for BDDC wirebasket
 |
 |  Method resolution order:
 |      H1
 |      FESpace
 |      NGS_Object
 |      pybind11_builtins.pybind11_object
 |      builtins.object
 |
 |  Methods defined here:
 |
 |  __getstate__(...)
 |      __getstate__(self: ngsolve.comp.FESpace) -> tuple
 |
 |  __init__(...)
 |      __init__(self: ngsolve.comp.H1, mesh: ngsolve.comp.Mesh, autoupdate: bool = False, **kwargs) -> None
 |
 |  __setstate__(...)
 |      __setstate__(self: ngsolve.comp.H1, arg0: tuple) -> None
 |
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |
 |  __flags_doc__(...) from builtins.PyCapsule
 |      __flags_doc__() -> dict
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |
 |  __dict__
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from FESpace:
 |
 |  ApplyM(...)
 |      ApplyM(self: ngsolve.comp.FESpace, vec: ngsolve.la.BaseVector, rho: ngsolve.fem.CoefficientFunction = None, definedon: ngsolve.comp.Region = None) -> None
 |
 |      Apply mass-matrix. Available only for L2-like spaces
 |
 |  ConvertL2Operator(...)
 |      ConvertL2Operator(self: ngsolve.comp.FESpace, l2space: ngsolve.comp.FESpace) -> BaseMatrix
 |
 |  CouplingType(...)
 |      CouplingType(self: ngsolve.comp.FESpace, dofnr: int) -> ngsolve.comp.COUPLING_TYPE
 |
 |
 |               Get coupling type of a degree of freedom.
 |
 |      Parameters:
 |
 |      dofnr : int
 |        input dof number
 |
 |  Elements(...)
 |      Elements(self: ngsolve.comp.FESpace, VOL_or_BND: ngsolve.comp.VorB = <VorB.VOL: 0>) -> ngsolve.comp.FESpaceElementRange
 |
 |
 |      Returns an iterable range of elements.
 |
 |      Parameters:
 |
 |      VOL_or_BND : ngsolve.comp.VorB
 |        input VOL, BND, BBND,...
 |
 |  FinalizeUpdate(...)
 |      FinalizeUpdate(self: ngsolve.comp.FESpace) -> None
 |
 |      finalize update
 |
 |  FreeDofs(...)
 |      FreeDofs(self: ngsolve.comp.FESpace, coupling: bool = False) -> pyngcore.BitArray
 |
 |
 |
 |      Return BitArray of free (non-Dirichlet) dofs\n
 |      coupling=False ... all free dofs including local dofs\n
 |      coupling=True .... only element-boundary free dofs
 |
 |      Parameters:
 |
 |      coupling : bool
 |        input coupling
 |
 |  GetDofNrs(...)
 |      GetDofNrs(*args, **kwargs)
 |      Overloaded function.
 |
 |      1. GetDofNrs(self: ngsolve.comp.FESpace, ei: ngsolve.comp.ElementId) -> tuple
 |
 |
 |
 |      Parameters:
 |
 |      ei : ngsolve.comp.ElementId
 |        input element id
 |
 |
 |
 |      2. GetDofNrs(self: ngsolve.comp.FESpace, ni: ngsolve.comp.NodeId) -> tuple
 |
 |
 |
 |      Parameters:
 |
 |      ni : ngsolve.comp.NodeId
 |        input node id
 |
 |  GetDofs(...)
 |      GetDofs(self: ngsolve.comp.FESpace, region: ngsolve.comp.Region) -> pyngcore.BitArray
 |
 |
 |      Returns all degrees of freedom in given region.
 |
 |      Parameters:
 |
 |      region : ngsolve.comp.Region
 |        input region
 |
 |  GetFE(...)
 |      GetFE(self: ngsolve.comp.FESpace, ei: ngsolve.comp.ElementId) -> object
 |
 |
 |      Get the finite element to corresponding element id.
 |
 |      Parameters:
 |
 |      ei : ngsolve.comp.ElementId
 |         input element id
 |
 |  GetOrder(...)
 |      GetOrder(self: ngsolve.comp.FESpace, nodeid: ngsolve.comp.NodeId) -> int
 |
 |      return order of node.
 |      by now, only isotropic order is supported here
 |
 |  GetTrace(...)
 |      GetTrace(self: ngsolve.comp.FESpace, arg0: ngsolve.comp.FESpace, arg1: ngsolve.la.BaseVector, arg2: ngsolve.la.BaseVector, arg3: bool) -> None
 |
 |  GetTraceTrans(...)
 |      GetTraceTrans(self: ngsolve.comp.FESpace, arg0: ngsolve.comp.FESpace, arg1: ngsolve.la.BaseVector, arg2: ngsolve.la.BaseVector, arg3: bool) -> None
 |
 |  HideAllDofs(...)
 |      HideAllDofs(self: ngsolve.comp.FESpace, component: object = <ngsolve.ngstd.DummyArgument>) -> None
 |
 |      set all visible coupling types to HIDDEN_DOFs (will be overwritten by any Update())
 |
 |  InvM(...)
 |      InvM(self: ngsolve.comp.FESpace, rho: ngsolve.fem.CoefficientFunction = None) -> BaseMatrix
 |
 |  Mass(...)
 |      Mass(self: ngsolve.comp.FESpace, rho: ngsolve.fem.CoefficientFunction = None, definedon: Optional[ngsolve.comp.Region] = None) -> BaseMatrix
 |
 |  ParallelDofs(...)
 |      ParallelDofs(self: ngsolve.comp.FESpace) -> ngsolve.la.ParallelDofs
 |
 |      Return dof-identification for MPI-distributed meshes
 |
 |  Prolongation(...)
 |      Prolongation(self: ngsolve.comp.FESpace) -> ngmg::Prolongation
 |
 |      Return prolongation operator for use in multi-grid
 |
 |  Range(...)
 |      Range(self: ngsolve.comp.FESpace, arg0: int) -> ngsolve.la.DofRange
 |
 |      deprecated, will be only available for ProductSpace
 |
 |  SetCouplingType(...)
 |      SetCouplingType(*args, **kwargs)
 |      Overloaded function.
 |
 |      1. SetCouplingType(self: ngsolve.comp.FESpace, dofnr: int, coupling_type: ngsolve.comp.COUPLING_TYPE) -> None
 |
 |
 |               Set coupling type of a degree of freedom.
 |
 |      Parameters:
 |
 |      dofnr : int
 |        input dof number
 |
 |      coupling_type : ngsolve.comp.COUPLING_TYPE
 |        input coupling type
 |
 |
 |
 |      2. SetCouplingType(self: ngsolve.comp.FESpace, dofnrs: ngsolve.ngstd.IntRange, coupling_type: ngsolve.comp.COUPLING_TYPE) -> None
 |
 |
 |               Set coupling type for interval of dofs.
 |
 |      Parameters:
 |
 |      dofnrs : Range
 |        range of dofs
 |
 |      coupling_type : ngsolve.comp.COUPLING_TYPE
 |        input coupling type
 |
 |  SetDefinedOn(...)
 |      SetDefinedOn(self: ngsolve.comp.FESpace, region: ngsolve.comp.Region) -> None
 |
 |
 |      Set the regions on which the FESpace is defined.
 |
 |      Parameters:
 |
 |      region : ngsolve.comp.Region
 |        input region
 |
 |  SetOrder(...)
 |      SetOrder(*args, **kwargs)
 |      Overloaded function.
 |
 |      1. SetOrder(self: ngsolve.comp.FESpace, element_type: ngsolve.fem.ET, order: int) -> None
 |
 |
 |
 |      Parameters:
 |
 |      element_type : ngsolve.fem.ET
 |        input element type
 |
 |      order : object
 |        input polynomial order
 |
 |
 |      2. SetOrder(self: ngsolve.comp.FESpace, nodeid: ngsolve.comp.NodeId, order: int) -> None
 |
 |
 |
 |      Parameters:
 |
 |      nodeid : ngsolve.comp.NodeId
 |        input node id
 |
 |      order : int
 |        input polynomial order
 |
 |  SolveM(...)
 |      SolveM(self: ngsolve.comp.FESpace, vec: ngsolve.la.BaseVector, rho: ngsolve.fem.CoefficientFunction = None, definedon: ngsolve.comp.Region = None) -> None
 |
 |
 |               Solve with the mass-matrix. Available only for L2-like spaces.
 |
 |      Parameters:
 |
 |      vec : ngsolve.la.BaseVector
 |        input right hand side vector
 |
 |      rho : ngsolve.fem.CoefficientFunction
 |        input CF
 |
 |  TestFunction(...)
 |      TestFunction(self: ngsolve.comp.FESpace) -> object
 |
 |      Return a proxy to be used as a testfunction for :any:`Symbolic Integrators<symbolic-integrators>`
 |
 |  TnT(...)
 |      TnT(self: ngsolve.comp.FESpace) -> Tuple[object, object]
 |
 |      Return a tuple of trial and testfunction
 |
 |  TraceOperator(...)
 |      TraceOperator(self: ngsolve.comp.FESpace, tracespace: ngsolve.comp.FESpace, average: bool) -> BaseMatrix
 |
 |  TrialFunction(...)
 |      TrialFunction(self: ngsolve.comp.FESpace) -> object
 |
 |      Return a proxy to be used as a trialfunction in :any:`Symbolic Integrators<symbolic-integrators>`
 |
 |  Update(...)
 |      Update(self: ngsolve.comp.FESpace) -> None
 |
 |      update space after mesh-refinement
 |
 |  UpdateDofTables(...)
 |      UpdateDofTables(self: ngsolve.comp.FESpace) -> None
 |
 |      update dof-tables after changing polynomial order distribution
 |
 |  __eq__(...)
 |      __eq__(self: ngsolve.comp.FESpace, space: ngsolve.comp.FESpace) -> bool
 |
 |  __mul__(...)
 |      __mul__(self: ngsolve.comp.FESpace, arg0: ngsolve.comp.FESpace) -> ngcomp::CompoundFESpace
 |
 |  __pow__(...)
 |      __pow__(self: ngsolve.comp.FESpace, arg0: int) -> ngcomp::CompoundFESpaceAllSame
 |
 |  __str__(...)
 |      __str__(self: ngsolve.comp.FESpace) -> str
 |
 |  __timing__(...)
 |      __timing__(self: ngsolve.comp.FESpace) -> object
 |
 |  ----------------------------------------------------------------------
 |  Static methods inherited from FESpace:
 |
 |  __special_treated_flags__(...) from builtins.PyCapsule
 |      __special_treated_flags__() -> dict
 |
 |  ----------------------------------------------------------------------
 |  Readonly properties inherited from FESpace:
 |
 |  components
 |      deprecated, will be only available for ProductSpace
 |
 |  couplingtype
 |
 |  dim
 |      multi-dim of FESpace
 |
 |  globalorder
 |      query global order of space
 |
 |  is_complex
 |
 |  loembedding
 |
 |  lospace
 |
 |  mesh
 |      mesh on which the FESpace is created
 |
 |  ndof
 |      number of degrees of freedom
 |
 |  ndofglobal
 |      global number of dofs on MPI-distributed mesh
 |
 |  type
 |      type of finite element space
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes inherited from FESpace:
 |
 |  __hash__ = None
 |
 |  ----------------------------------------------------------------------
 |  Readonly properties inherited from NGS_Object:
 |
 |  __memory__
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from NGS_Object:
 |
 |  name
 |
 |  ----------------------------------------------------------------------
 |  Static methods inherited from pybind11_builtins.pybind11_object:
 |
 |  __new__(*args, **kwargs) from pybind11_builtins.pybind11_type
 |      Create and return a new object.  See help(type) for accurate signature.

4. Declare test function, trial function, and grid function

  • Test and trial function are symbolic objects - called ProxyFunctions - that help you construct bilinear forms (and have no space to hold solutions).

  • GridFunctions, on the other hand, represent functions in the finite element space and contains memory to hold coefficient vectors.

[5]:
u = fes.TrialFunction()  # symbolic object
v = fes.TestFunction()   # symbolic object
gfu = GridFunction(fes)  # solution

Alternately, you can get both the trial and test variables at once:

[6]:
u, v = fes.TnT()

5. Define and assemble linear and bilinear forms:

[7]:
a = BilinearForm(fes, symmetric=True)
a += grad(u)*grad(v)*dx
a.Assemble()

f = LinearForm(fes)
f += x*v*dx
f.Assemble()
[7]:
<ngsolve.comp.LinearForm at 0x7f2133b63d30>

You can examine the linear system in more detail:

[8]:
print(f.vec)
 0.000333333
 0.00888574
 0.00633333
 0.00074628
 0.00399953
 0.00769352
 0.0104008
 0.0115294
 0.0150217
 0.0167909
 0.015258
 0.0182768
 0.0211091
 0.0106045
 0.00711336
 0.00320035
 0.000735854
 0.000876249
 0.000529403
 0.00282218
 0.0124495
 0.0182096
 0.0224435
 0.0204234
 0.0317338
 0.0270543
 0.0291603
 0.0187131
 0.0217393
 0.00854715
 0.00505989
 0.0038006
 0.00883394
 0.0205505
 0.0163797
 0.0213793
 0.0150785
 0.0170279
 0.0191555
 -6.66667e-05
 -3.33333e-05
 -0.000526369
 -0.000575033
 -0.00109143
 -0.0008
 -0.000766667
 -8.08556e-05
 -2.24397e-05
 -0.000120589
 -0.000249038
 -0.000218716
 -0.000440093
 -0.000380259
 -0.000572665
 -0.000711098
 -0.000487162
 -0.00080946
 -0.000916707
 -0.000914728
 -0.000944161
 -0.000759221
 -0.00110619
 -0.00127157
 -0.000646306
 -0.0014197
 -0.00131979
 -0.000648788
 -0.00123697
 -0.0012392
 -0.0015957
 -0.00146355
 -0.000469258
 -0.0014082
 -0.00106589
 -0.000437144
 -0.000880349
 -0.000856527
 -0.000190932
 -0.000699086
 -0.000461922
 -0.000315546
 -0.000220954
 -1.64401e-05
 -9.82846e-05
 -8.35917e-05
 -2.64702e-05
 -9.73025e-05
 -0.000122662
 -2.64702e-05
 -0.000105881
 -0.000353264
 -0.00021487
 -0.00066398
 -0.000468351
 -0.00059592
 -0.000843865
 -0.000796408
 -0.000722285
 -0.000922806
 -0.00105484
 -0.000955488
 -0.00104202
 -0.00117171
 -0.00100951
 -0.000963748
 -0.00114996
 -0.000965717
 -0.00092025
 -0.00104152
 -0.00098591
 -0.000825307
 -0.000865806
 -0.000574259
 -0.000880372
 -0.000710639
 -0.000885225
 -0.000308496
 -0.000477574
 -0.000191583
 -0.00032424
 -0.000250767
 -0.000328592
 -0.000559968
 -0.00047995
 -0.000773918
 -0.00082872
 -0.000774775
 -0.000675938
 -0.000761632
 -0.000801479
 -0.000841885
 -0.000775647
 -0.000743459


[9]:
print(a.mat)
Row 0:   0: 1   4: -0.5   19: -0.5   39: -0.0833333   40: -0.0833333   50: 0.166667
Row 1:   1: 0.828441   7: -0.208968   8: -0.209694   23: -0.40978   41: -0.0340869   42: -0.0342097   43: -0.069777   59: 0.0689149   61: 0.0691587
Row 2:   2: 1   11: -0.5   12: -0.5   44: -0.0833333   45: -0.0833333   69: 0.166667
Row 3:   3: 0.870927   15: -0.344377   16: -0.336878   30: -0.189673   46: -0.0173948   47: -0.0142173   48: -0.113542   81: 0.074791   83: 0.0703636
Row 4:   0: -0.5   4: 1.88347   5: -0.397227   19: -0.177276   20: -0.808965   39: 0   40: 0.0833333   49: -0.0535736   50: -0.164587   51: -0.0957505   53: 0.119778   90: 0.1108
Row 5:   4: -0.397227   5: 1.77564   6: -0.326749   20: -0.345183   21: -0.706484   49: -0.028366   51: 0.0945705   52: -0.0526905   53: -0.131261   54: -0.0836226   56: 0.107149   92: 0.0942211
Row 6:   5: -0.326749   6: 1.7517   7: -0.273913   21: -0.432506   22: -0.718531   52: -0.0380314   54: 0.0924896   55: -0.0573097   56: -0.116904   57: -0.0797051   58: 0.102962   95: 0.0964985
Row 7:   1: -0.208968   6: -0.273913   7: 1.82559   22: -0.374026   23: -0.968685   41: -0.0835417   43: 0.11837   55: -0.0420363   57: 0.0876885   58: -0.123558   59: -0.0551294   98: 0.0982072
Row 8:   1: -0.209694   8: 1.8809   9: -0.350939   23: -1.05698   24: -0.263291   42: -0.0831255   43: 0.118074   60: -0.0322109   61: -0.0466199   62: -0.151527   64: 0.0907008   101: 0.104708
Row 9:   8: -0.350939   9: 1.74429   10: -0.262838   24: -0.64648   25: -0.484029   60: -0.0557926   62: 0.114282   63: -0.0342301   64: -0.104931   65: -0.0957605   67: 0.0780365   102: 0.0983955
Row 10:   9: -0.262838   10: 1.77715   11: -0.267845   25: -0.84644   26: -0.400025   63: -0.0697744   65: 0.113581   66: -0.0327463   67: -0.0777309   68: -0.11594   70: 0.0773871   105: 0.105223
Row 11:   2: -0.5   10: -0.267845   11: 1.9829   12: -0.115438   26: -1.09961   44: 0   45: 0.0833333   66: -0.0708467   68: 0.115488   69: -0.195755   70: -0.0638806   72: 0.131662
Row 12:   2: -0.5   11: -0.115438   12: 1.81266   13: -0.253469   26: -0.239874   27: -0.703881   44: 0.0833333   45: 0   69: -0.11965   70: 0.0555561   71: -0.0432149   72: -0.0933383   73: -0.0459076   75: 0.0854598   108: 0.0777613
Row 13:   12: -0.253469   13: 1.79007   14: -0.404897   27: -0.775929   28: -0.355771   71: -0.0598976   73: 0.102142   74: -0.0406718   75: -0.0608683   76: -0.136907   78: 0.108155   110: 0.0880473
Row 14:   13: -0.404897   14: 1.83152   15: -0.218833   28: -0.309609   29: -0.898185   74: -0.0388314   76: 0.106314   77: -0.0683139   78: -0.148866   79: -0.0492423   80: 0.104786   112: 0.0941536
Row 15:   3: -0.344377   14: -0.218833   15: 1.78023   29: -0.432178   30: -0.784846   46: -0.0795022   48: 0.136898   77: -0.0424951   79: 0.0789672   80: -0.0877775   81: -0.0869308   116: 0.0808401
Row 16:   3: -0.336878   16: 1.81347   17: -0.20561   30: -0.908731   31: -0.36225   47: -0.0873491   48: 0.143495   82: -0.033994   83: -0.0825273   84: -0.0983745   86: 0.0682624   118: 0.0904872
Row 17:   16: -0.20561   17: 1.94288   18: -0.368349   31: -1.16439   32: -0.204537   82: -0.0846663   84: 0.118935   85: -0.0154075   86: -0.0529503   87: -0.17079   89: 0.076799   120: 0.12808
Row 18:   17: -0.368349   18: 2.04376   19: -0.553239   32: -1.12218   85: -0.0781072   87: 0.139499   88: -0.108922   89: -0.153598   91: 0.201129
Row 19:   0: -0.5   4: -0.177276   18: -0.553239   19: 1.87497   20: -0.545937   32: -0.098519   39: 0.0833333   40: 0   50: -0.124342   51: 0.0705543   88: 0.0154075   89: 0.076799   90: -0.0613734   91: -0.142188   93: 0.0818086
Row 20:   4: -0.808965   5: -0.345183   19: -0.545937   20: 3.54246   21: -0.647227   32: -0.584699   34: -0.610448   49: 0.0819397   50: 0.122262   51: -0.0693744   53: -0.10714   54: 0.082731   90: -0.146695   91: 0.115423   92: -0.077413   93: -0.103474   94: -0.0863131   97: 0.102553   122: 0.0855011
Row 21:   5: -0.706484   6: -0.432506   20: -0.647227   21: 3.50609   22: -0.571505   33: -0.714154   34: -0.43421   52: 0.0907219   53: 0.118623   54: -0.091598   56: -0.102619   57: 0.0839811   92: -0.107223   94: 0.0964712   95: -0.0880292   96: -0.0755245   97: -0.119354   100: 0.0992989   124: 0.0952513
Row 22:   6: -0.718531   7: -0.374026   21: -0.571505   22: 3.51428   23: -0.708085   24: -0.536887   33: -0.60525   55: 0.099346   56: 0.112374   57: -0.0919644   58: -0.111917   59: 0.0749089   95: -0.107744   96: 0.0906212   98: -0.0555055   99: -0.118983   100: -0.0995997   101: 0.0986109   103: 0.109853
Row 23:   1: -0.40978   7: -0.968685   8: -1.05698   22: -0.708085   23: 3.76596   24: -0.62243   41: 0.117629   42: 0.117335   43: -0.166667   58: 0.132513   59: -0.0886944   61: -0.0901615   62: 0.148989   98: -0.125692   99: 0.111193   101: -0.156444
Row 24:   8: -0.263291   9: -0.64648   22: -0.536887   23: -0.62243   24: 3.433   25: -0.459506   33: -0.354764   37: -0.549644   60: 0.0880035   61: 0.0676228   62: -0.111744   64: -0.0782661   65: 0.0980093   98: 0.0829906   99: -0.0835425   100: 0.0900331   101: -0.0468751   102: -0.0942456   103: -0.103593   104: -0.0539003   107: 0.0728206   125: 0.072687
Row 25:   9: -0.484029   10: -0.84644   24: -0.459506   25: 3.57375   26: -0.517151   35: -0.379385   37: -0.887236   63: 0.104004   64: 0.0924966   65: -0.11583   67: -0.0772401   68: 0.114309   102: -0.124075   104: 0.108163   105: -0.111385   106: -0.113421   107: -0.0536744   109: 0.0832674   129: 0.0933844
Row 26:   10: -0.400025   11: -1.09961   12: -0.239874   25: -0.517151   26: 3.71385   27: -0.788273   35: -0.66891   66: 0.103593   67: 0.0769345   68: -0.113857   69: 0.148738   70: -0.0690626   72: -0.198236   73: 0.0894771   105: -0.0965358   106: 0.105793   108: -0.0525365   109: -0.0887462   111: 0.0944382
Row 27:   12: -0.703881   13: -0.775929   26: -0.788273   27: 3.68527   28: -0.733256   35: -0.683932   71: 0.103112   72: 0.159913   73: -0.145712   75: -0.107402   76: 0.133611   108: -0.124052   109: 0.0955182   110: -0.133459   111: -0.103586   113: 0.122057
Row 28:   13: -0.355771   14: -0.309609   27: -0.733256   28: 3.48151   29: -0.790531   35: -0.449095   36: -0.434461   38: -0.408789   74: 0.0795032   75: 0.0828109   76: -0.103019   78: -0.10339   79: 0.0754885   110: -0.0450785   111: 0.0844769   112: -0.0400872   113: -0.0863546   114: -0.108835   115: -0.0934871   117: 0.0963537   130: 0.0767268   131: 0.0848918
Row 29:   14: -0.898185   15: -0.432178   28: -0.790531   29: 3.74275   30: -0.98463   36: -0.637229   77: 0.110809   78: 0.144102   79: -0.105213   80: -0.135473   81: 0.0966939   112: -0.133883   114: 0.121537   116: -0.0832396   117: -0.165982   119: 0.150651
Row 30:   3: -0.189673   15: -0.784846   16: -0.908731   29: -0.98463   30: 3.81689   31: -0.851669   36: -0.0973365   46: 0.096897   47: 0.101566   48: -0.166851   80: 0.118465   81: -0.0845541   83: -0.0722726   84: 0.122161   116: -0.0628419   117: 0.108482   118: -0.0687924   119: -0.180835   121: 0.0885758
Row 31:   16: -0.36225   17: -1.16439   30: -0.851669   31: 3.85451   32: -0.517495   36: -0.958711   82: 0.11866   83: 0.0844363   84: -0.142722   86: -0.0722565   87: 0.147661   118: -0.100344   119: 0.157852   120: -0.195221   121: -0.131876   123: 0.133809
Row 32:   17: -0.204537   18: -1.12218   19: -0.098519   20: -0.584699   31: -0.517495   32: 3.69368   34: -0.800343   36: -0.365907   85: 0.0935147   86: 0.0569444   87: -0.11637   88: 0.0935147   89: 0   90: 0.0972688   91: -0.174364   93: -0.0930223   94: 0.0932033   120: -0.0398024   121: 0.0691071   122: -0.0718724   123: -0.120182   127: 0.11206
Row 33:   21: -0.714154   22: -0.60525   24: -0.354764   33: 3.57925   34: -0.624553   37: -0.928035   38: -0.352491   95: 0.0992748   96: -0.0975796   97: 0.11733   99: 0.0913324   100: -0.0897323   103: -0.135259   104: 0.103054   124: -0.105243   125: -0.0419266   126: -0.126801   128: 0.0920044   132: 0.0935455
Row 34:   20: -0.610448   21: -0.43421   32: -0.800343   33: -0.624553   34: 3.5401   36: -0.341534   38: -0.729009   92: 0.0904152   93: 0.114688   94: -0.103361   96: 0.0824828   97: -0.10053   122: -0.0897809   123: 0.108484   124: -0.083047   126: 0.104656   127: -0.140852   128: -0.0724453   131: 0.0892903
Row 35:   25: -0.379385   26: -0.66891   27: -0.683932   28: -0.449095   35: 3.53739   37: -0.674877   38: -0.68119   105: 0.102697   106: -0.119567   107: 0.0801006   108: 0.0988275   109: -0.0900393   110: 0.09049   111: -0.0753288   113: -0.136673   115: 0.121032   129: -0.0640386   130: -0.103918   132: 0.0964175
Row 36:   28: -0.434461   29: -0.637229   30: -0.0973365   31: -0.958711   32: -0.365907   34: -0.341534   36: 3.57061   38: -0.735427   112: 0.079817   114: -0.113163   115: 0.105756   116: 0.0652415   117: -0.0388535   118: 0.078649   119: -0.127668   120: 0.106943   121: -0.0258068   122: 0.0761522   123: -0.122111   127: -0.101772   128: 0.0825421   131: -0.0657272
Row 37:   24: -0.549644   25: -0.887236   33: -0.928035   35: -0.674877   37: 3.68681   38: -0.64702   102: 0.119925   103: 0.128998   104: -0.157316   106: 0.127194   107: -0.0992469   125: -0.108677   126: 0.134351   129: -0.118715   130: 0.104   132: -0.130514
Row 38:   28: -0.408789   33: -0.352491   34: -0.729009   35: -0.68119   36: -0.735427   37: -0.64702   38: 3.55392   113: 0.100971   114: 0.100462   115: -0.133301   124: 0.0930384   125: 0.0779166   126: -0.112206   127: 0.130564   128: -0.102101   129: 0.0893687   130: -0.0768082   131: -0.108455   132: -0.0594486
Row 39:   0: -0.0833333   4: 0   19: 0.0833333   39: 0.0416667   40: 0   50: -0.0208333
Row 40:   0: -0.0833333   4: 0.0833333   19: 0   39: 0   40: 0.0416667   50: -0.0208333
Row 41:   1: -0.0340869   7: -0.0835417   23: 0.117629   41: 0.0381141   43: -0.0208854   59: -0.00852172
Row 42:   1: -0.0342097   8: -0.0831255   23: 0.117335   42: 0.038071   43: -0.0207814   61: -0.00855243
Row 43:   1: -0.069777   7: 0.11837   8: 0.118074   23: -0.166667   41: -0.0208854   42: -0.0207814   43: 0.0761852   59: -0.008707   61: -0.00873724
Row 44:   2: -0.0833333   11: 0   12: 0.0833333   44: 0.0416667   45: 1.73472e-18   69: -0.0208333
Row 45:   2: -0.0833333   11: 0.0833333   12: 0   44: 1.73472e-18   45: 0.0416667   69: -0.0208333
Row 46:   3: -0.0173948   15: -0.0795022   30: 0.096897   46: 0.0385733   48: -0.0198756   81: -0.00434871
Row 47:   3: -0.0142173   16: -0.0873491   30: 0.101566   47: 0.0394282   48: -0.0218373   83: -0.00355433
Row 48:   3: -0.113542   15: 0.136898   16: 0.143495   30: -0.166851   46: -0.0198756   47: -0.0218373   48: 0.0780015   81: -0.014349   83: -0.0140366
Row 49:   4: -0.0535736   5: -0.028366   20: 0.0819397   49: 0.037036   51: -0.00709151   53: -0.0133934
Row 50:   0: 0.166667   4: -0.164587   19: -0.124342   20: 0.122262   39: -0.0208333   40: -0.0208333   50: 0.0796187   51: -0.0102521   90: -0.0203135
Row 51:   4: -0.0957505   5: 0.0945705   19: 0.0705543   20: -0.0693744   49: -0.00709151   50: -0.0102521   51: 0.0749881   53: -0.0165511   90: -0.0073865
Row 52:   5: -0.0526905   6: -0.0380314   21: 0.0907219   52: 0.036295   54: -0.00950784   56: -0.0131726
Row 53:   4: 0.119778   5: -0.131261   20: -0.10714   21: 0.118623   49: -0.0133934   51: -0.0165511   53: 0.073983   54: -0.0133916   92: -0.0162642
Row 54:   5: -0.0836226   6: 0.0924896   20: 0.082731   21: -0.091598   52: -0.00950784   53: -0.0133916   54: 0.073242   56: -0.0136146   92: -0.00729109
Row 55:   6: -0.0573097   7: -0.0420363   22: 0.099346   55: 0.0362495   57: -0.0105091   58: -0.0143274
Row 56:   5: 0.107149   6: -0.116904   21: -0.102619   22: 0.112374   52: -0.0131726   54: -0.0136146   56: 0.0729017   57: -0.012482   95: -0.0156114
Row 57:   6: -0.0797051   7: 0.0876885   21: 0.0839811   22: -0.0919644   55: -0.0105091   56: -0.012482   57: 0.0728562   58: -0.011413   95: -0.00851324
Row 58:   6: 0.102962   7: -0.123558   22: -0.111917   23: 0.132513   55: -0.0143274   57: -0.011413   58: 0.0744532   59: -0.0136519   98: -0.0194765
Row 59:   1: 0.0689149   7: -0.0551294   22: 0.0749089   23: -0.0886944   41: -0.00852172   43: -0.008707   58: -0.0136519   59: 0.0763178   98: -0.00507535
Row 60:   8: -0.0322109   9: -0.0557926   24: 0.0880035   60: 0.0366233   62: -0.0139482   64: -0.00805273
Row 61:   1: 0.0691587   8: -0.0466199   23: -0.0901615   24: 0.0676228   42: -0.00855243   43: -0.00873724   61: 0.078236   62: -0.013988   101: -0.00291774
Row 62:   8: -0.151527   9: 0.114282   23: 0.148989   24: -0.111744   60: -0.0139482   61: -0.013988   62: 0.0767883   64: -0.0146225   101: -0.0232593
Row 63:   9: -0.0342301   10: -0.0697744   25: 0.104004   63: 0.0369527   65: -0.0174436   67: -0.00855753
Row 64:   8: 0.0907008   9: -0.104931   24: -0.0782661   25: 0.0924966   60: -0.00805273   62: -0.0146225   64: 0.072736   65: -0.0115138   102: -0.0116104
Row 65:   9: -0.0957605   10: 0.113581   24: 0.0980093   25: -0.11583   63: -0.0174436   64: -0.0115138   65: 0.0730654   67: -0.0109516   102: -0.0129885
Row 66:   10: -0.0327463   11: -0.0708467   26: 0.103593   66: 0.0370585   68: -0.0177117   70: -0.00818658
Row 67:   9: 0.0780365   10: -0.0777309   25: -0.0772401   26: 0.0769345   63: -0.00855753   65: -0.0109516   67: 0.0740111   68: -0.0107525   105: -0.00848113
Row 68:   10: -0.11594   11: 0.115488   25: 0.114309   26: -0.113857   66: -0.0177117   67: -0.0107525   68: 0.0741168   70: -0.0111602   105: -0.0178247
Row 69:   2: 0.166667   11: -0.195755   12: -0.11965   26: 0.148738   44: -0.0208333   45: -0.0208333   69: 0.0836612   70: -0.00907908   72: -0.0281055
Row 70:   10: 0.0773871   11: -0.0638806   12: 0.0555561   26: -0.0690626   66: -0.00818658   68: -0.0111602   69: -0.00907908   70: 0.079053   72: -0.00480994
Row 71:   12: -0.0432149   13: -0.0598976   27: 0.103112   71: 0.0363393   73: -0.0149744   75: -0.0108037
Row 72:   11: 0.131662   12: -0.0933383   26: -0.198236   27: 0.159913   69: -0.0281055   70: -0.00480994   72: 0.0828885   73: -0.0214536   108: -0.0185246
Row 73:   12: -0.0459076   13: 0.102142   26: 0.0894771   27: -0.145712   71: -0.0149744   72: -0.0214536   73: 0.0772333   75: -0.0105612   108: -0.000915684
Row 74:   13: -0.0406718   14: -0.0388314   28: 0.0795032   74: 0.0367465   76: -0.00970785   78: -0.010168
Row 75:   12: 0.0854598   13: -0.0608683   27: -0.107402   28: 0.0828109   71: -0.0108037   73: -0.0105612   75: 0.074398   76: -0.0160469   110: -0.00465584
Row 76:   13: -0.136907   14: 0.106314   27: 0.133611   28: -0.103019   74: -0.00970785   75: -0.0160469   76: 0.0748052   78: -0.0168707   110: -0.017356
Row 77:   14: -0.0683139   15: -0.0424951   29: 0.110809   77: 0.0368203   79: -0.0106238   80: -0.0170785
Row 78:   13: 0.108155   14: -0.148866   28: -0.10339   29: 0.144102   74: -0.010168   76: -0.0168707   78: 0.0759645   79: -0.0156796   112: -0.0203459
Row 79:   14: -0.0492423   15: 0.0789672   28: 0.0754885   29: -0.105213   77: -0.0106238   78: -0.0156796   79: 0.0760383   80: -0.00911803   112: -0.00319254
Row 80:   14: 0.104786   15: -0.0877775   29: -0.135473   30: 0.118465   77: -0.0170785   79: -0.00911803   80: 0.0738201   81: -0.0167898   116: -0.0128264
Row 81:   3: 0.074791   15: -0.0869308   29: 0.0966939   30: -0.0845541   46: -0.00434871   48: -0.014349   80: -0.0167898   81: 0.0755731   116: -0.00738366
Row 82:   16: -0.033994   17: -0.0846663   31: 0.11866   82: 0.0382322   84: -0.0211666   86: -0.0084985
Row 83:   3: 0.0703636   16: -0.0825273   30: -0.0722726   31: 0.0844363   47: -0.00355433   48: -0.0140366   83: 0.0765638   84: -0.0145138   118: -0.00659526
Row 84:   16: -0.0983745   17: 0.118935   30: 0.122161   31: -0.142722   82: -0.0211666   83: -0.0145138   84: 0.0753678   86: -0.00856709   118: -0.0160265
Row 85:   17: -0.0154075   18: -0.0781072   32: 0.0935147   85: 0.0387265   87: -0.0195268   89: -0.00385189
Row 86:   16: 0.0682624   17: -0.0529503   31: -0.0722565   32: 0.0569444   82: -0.0084985   84: -0.00856709   86: 0.0798179   87: -0.00956562   120: -0.00467048
Row 87:   17: -0.17079   18: 0.139499   31: 0.147661   32: -0.11637   85: -0.0195268   86: -0.00956562   87: 0.0803122   89: -0.0153479   120: -0.0273496
Row 88:   18: -0.108922   19: 0.0154075   32: 0.0935147   88: 0.0464303   89: 0.00385189   91: -0.0272306
Row 89:   17: 0.076799   18: -0.153598   19: 0.076799   32: 0   85: -0.00385189   87: -0.0153479   88: 0.00385189   89: 0.0851569   91: -0.0230516
Row 90:   4: 0.1108   19: -0.0613734   20: -0.146695   32: 0.0972688   50: -0.0203135   51: -0.0073865   90: 0.0747646   91: -0.0163604   93: -0.00795685
Row 91:   18: 0.201129   19: -0.142188   20: 0.115423   32: -0.174364   88: -0.0272306   89: -0.0230516   90: -0.0163604   91: 0.0832428   93: -0.0124953
Row 92:   5: 0.0942211   20: -0.077413   21: -0.107223   34: 0.0904152   53: -0.0162642   54: -0.00729109   92: 0.0731269   94: -0.0105417   97: -0.0120622
Row 93:   19: 0.0818086   20: -0.103474   32: -0.0930223   34: 0.114688   90: -0.00795685   91: -0.0124953   93: 0.0734865   94: -0.0152987   122: -0.0133732
Row 94:   20: -0.0863131   21: 0.0964712   32: 0.0932033   34: -0.103361   92: -0.0105417   93: -0.0152987   94: 0.0728539   97: -0.0135762   122: -0.00800211
Row 95:   6: 0.0964985   21: -0.0880292   22: -0.107744   33: 0.0992748   56: -0.0156114   57: -0.00851324   95: 0.072756   96: -0.0113246   100: -0.0134941
Row 96:   21: -0.0755245   22: 0.0906212   33: -0.0975796   34: 0.0824828   95: -0.0113246   96: 0.0730324   97: -0.0130703   100: -0.0113307   124: -0.00755045
Row 97:   20: 0.102553   21: -0.119354   33: 0.11733   34: -0.10053   92: -0.0120622   94: -0.0135762   96: -0.0130703   97: 0.073063   124: -0.0162624
Row 98:   7: 0.0982072   22: -0.0555055   23: -0.125692   24: 0.0829906   58: -0.0194765   59: -0.00507535   98: 0.074803   99: -0.0119466   101: -0.00880103
Row 99:   22: -0.118983   23: 0.111193   24: -0.0835425   33: 0.0913324   98: -0.0119466   99: 0.0730017   100: -0.00893901   101: -0.0158517   103: -0.0138941
Row 100:   21: 0.0992989   22: -0.0995997   24: 0.0900331   33: -0.0897323   95: -0.0134941   96: -0.0113307   99: -0.00893901   100: 0.0725517   103: -0.0135693
Row 101:   8: 0.104708   22: 0.0986109   23: -0.156444   24: -0.0468751   61: -0.00291774   62: -0.0232593   98: -0.00880103   99: -0.0158517   101: 0.0767643
Row 102:   9: 0.0983955   24: -0.0942456   25: -0.124075   37: 0.119925   64: -0.0116104   65: -0.0129885   102: 0.0737262   104: -0.0194084   107: -0.0105729
Row 103:   22: 0.109853   24: -0.103593   33: -0.135259   37: 0.128998   99: -0.0138941   100: -0.0135693   103: 0.0744947   104: -0.0199206   125: -0.0123289
Row 104:   24: -0.0539003   25: 0.108163   33: 0.103054   37: -0.157316   102: -0.0194084   103: -0.0199206   104: 0.0757059   107: -0.00763227   125: -0.00584281
Row 105:   10: 0.105223   25: -0.111385   26: -0.0965358   35: 0.102697   67: -0.00848113   68: -0.0178247   105: 0.073528   106: -0.0156528   109: -0.0100214
Row 106:   25: -0.113421   26: 0.105793   35: -0.119567   37: 0.127194   105: -0.0156528   106: 0.0740546   107: -0.0142388   109: -0.0107954   129: -0.0175598
Row 107:   24: 0.0728206   25: -0.0536744   35: 0.0801006   37: -0.0992469   102: -0.0105729   104: -0.00763227   106: -0.0142388   107: 0.0751985   129: -0.00578633
Row 108:   12: 0.0777613   26: -0.0525365   27: -0.124052   35: 0.0988275   72: -0.0185246   73: -0.000915684   108: 0.0769919   109: -0.0124884   111: -0.0122184
Row 109:   25: 0.0832674   26: -0.0887462   27: 0.0955182   35: -0.0900393   105: -0.0100214   106: -0.0107954   108: -0.0124884   109: 0.0725676   111: -0.0113911
Row 110:   13: 0.0880473   27: -0.133459   28: -0.0450785   35: 0.09049   75: -0.00465584   76: -0.017356   110: 0.0751867   111: -0.00661378   113: -0.0160087
Row 111:   26: 0.0944382   27: -0.103586   28: 0.0844769   35: -0.0753288   108: -0.0122184   109: -0.0113911   110: -0.00661378   111: 0.0732259   113: -0.0145055
Row 112:   14: 0.0941536   28: -0.0400872   29: -0.133883   36: 0.079817   78: -0.0203459   79: -0.00319254   112: 0.0764314   114: -0.013125   117: -0.00682926
Row 113:   27: 0.122057   28: -0.0863546   35: -0.136673   38: 0.100971   110: -0.0160087   111: -0.0145055   113: 0.0744692   115: -0.0181596   130: -0.00708319
Row 114:   28: -0.108835   29: 0.121537   36: -0.113163   38: 0.100462   112: -0.013125   114: 0.0736021   115: -0.0151658   117: -0.0172592   131: -0.00994967
Row 115:   28: -0.0934871   35: 0.121032   36: 0.105756   38: -0.133301   113: -0.0181596   114: -0.0151658   115: 0.07373   130: -0.0120985   131: -0.0112733
Row 116:   15: 0.0808401   29: -0.0832396   30: -0.0628419   36: 0.0652415   80: -0.0128264   81: -0.00738366   116: 0.0775466   117: -0.00288412   119: -0.0134262
Row 117:   28: 0.0963537   29: -0.165982   30: 0.108482   36: -0.0388535   112: -0.00682926   114: -0.0172592   116: -0.00288412   117: 0.0777602   119: -0.0242364
Row 118:   16: 0.0904872   30: -0.0687924   31: -0.100344   36: 0.078649   83: -0.00659526   84: -0.0160265   118: 0.0777703   119: -0.0184907   121: -0.00117156
Row 119:   29: 0.150651   30: -0.180835   31: 0.157852   36: -0.127668   116: -0.0134262   117: -0.0242364   118: -0.0184907   119: 0.0811814   121: -0.0209724
Row 120:   17: 0.12808   31: -0.195221   32: -0.0398024   36: 0.106943   86: -0.00467048   87: -0.0273496   120: 0.0803181   121: -0.00528012   123: -0.0214556
Row 121:   30: 0.0885758   31: -0.131876   32: 0.0691071   36: -0.0258068   118: -0.00117156   119: -0.0209724   120: -0.00528012   121: 0.0793671   123: -0.0119967
Row 122:   20: 0.0855011   32: -0.0718724   34: -0.0897809   36: 0.0761522   93: -0.0133732   94: -0.00800211   122: 0.0737609   123: -0.00907206   127: -0.00996599
Row 123:   31: 0.133809   32: -0.120182   34: 0.108484   36: -0.122111   120: -0.0214556   121: -0.0119967   122: -0.00907206   123: 0.0758193   127: -0.0180489
Row 124:   21: 0.0952513   33: -0.105243   34: -0.083047   38: 0.0930384   96: -0.00755045   97: -0.0162624   124: 0.0730955   126: -0.0132113   128: -0.0100483
Row 125:   24: 0.072687   33: -0.0419266   37: -0.108677   38: 0.0779166   103: -0.0123289   104: -0.00584281   125: 0.076319   126: -0.0148403   132: -0.00463885
Row 126:   33: -0.126801   34: 0.104656   37: 0.134351   38: -0.112206   124: -0.0132113   125: -0.0148403   126: 0.0744391   128: -0.0129528   132: -0.0187475
Row 127:   32: 0.11206   34: -0.140852   36: -0.101772   38: 0.130564   122: -0.00996599   123: -0.0180489   127: 0.0748865   128: -0.015477   131: -0.0171641
Row 128:   33: 0.0920044   34: -0.0724453   36: 0.0825421   38: -0.102101   124: -0.0100483   126: -0.0129528   127: -0.015477   128: 0.074012   131: -0.00515852
Row 129:   25: 0.0933844   35: -0.0640386   37: -0.118715   38: 0.0893687   106: -0.0175598   107: -0.00578633   129: 0.0738082   130: -0.0121189   132: -0.0102233
Row 130:   28: 0.0767268   35: -0.103918   37: 0.104   38: -0.0768082   113: -0.00708319   115: -0.0120985   129: -0.0121189   130: 0.0735645   132: -0.0138811
Row 131:   28: 0.0848918   34: 0.0892903   36: -0.0657272   38: -0.108455   114: -0.00994967   115: -0.0112733   127: -0.0171641   128: -0.00515852   131: 0.0741883
Row 132:   33: 0.0935455   35: 0.0964175   37: -0.130514   38: -0.0594486   125: -0.00463885   126: -0.0187475   129: -0.0102233   130: -0.0138811   132: 0.0744499

6. Solve the system:

[10]:
gfu.vec.data = \
    a.mat.Inverse(freedofs=fes.FreeDofs()) * f.vec
Draw(gfu)

The Dirichlet boundary condition constrains some degrees of freedom. The argument fes.FreeDofs() indicates that only the remaining “free” degrees of freedom should participate in the linear solve.

You can examine the coefficient vector of solution if needed:

[11]:
print(gfu.vec)
       0
       0
       0
 0.0923044
       0
       0
       0
       0
       0
       0
       0
       0
 0.0578972
 0.0863393
 0.0954128
 0.0944891
 0.0888235
 0.0780439
 0.059628
 0.0330628
 0.0374521
 0.0370446
 0.0317995
 0.0185123
 0.0383632
 0.0427969
 0.047351
 0.0760518
 0.0895602
 0.0939297
 0.0914143
 0.0833171
 0.0654761
 0.0574569
 0.0647326
 0.0723792
 0.0852186
 0.0626708
 0.0776805
       0
 -0.00576774
       0
       0
 0.0208108
       0
 -0.0350847
 0.00263379
 -0.00729372
 -0.0027615
       0
 -0.00993549
 -0.00711876
       0
 -0.0174982
 -0.0120617
       0
 -0.0150936
 -0.0195578
 -0.00638541
 -0.0213554
       0
 -0.0254715
 -0.00955261
       0
 -0.0381111
 -0.0132127
       0
 -0.0262138
 -0.0182002
 -0.0333693
 -0.0245117
 -0.0242838
 -0.00451911
 -0.0119297
 -0.014536
 -0.00612786
 -0.0105674
 -0.00558557
 -0.00891829
 -0.00493114
 -0.0051195
 -0.00519767
 -0.007602
 0.00247896
 -0.00133557
 -0.00800354
 0.00157024
 -0.00177994
 -0.00829596
 0.00374357
 0.00436653
 -0.00759115
 -0.00373981
 -0.0120787
 -0.0104187
 -0.00708368
 -0.0136752
 -0.0120743
 -0.00778966
 -0.0256197
 -0.0072408
 -0.00331602
 -0.00900117
 -0.0206949
 -0.0050238
 -0.00300073
 -0.0140407
 -0.0179806
 -0.0153171
 -0.020859
 -0.0164647
 -0.00404961
 -0.00810738
 -0.0130797
 -0.0135373
 -0.00892006
 -0.00206078
 -0.00747051
 -0.00532125
 -0.00675915
 -0.00966483
 -0.00121964
 -0.00276467
 -0.0111685
 -0.00868831
 -0.0118313
 -0.00814322
 -0.0124053
 -0.0120342
 -0.00417412
 -0.0154546
 -0.00866456
 -0.010265


Ways to interact with NGSolve

  • A jupyter notebook (like this one) gives you one way to interact with NGSolve. When you have a complex sequence of tasks to perform, the notebook may not be adequate.

  • You can write an entire python module in a text editor and call python on the command line. (A script of the above is provided in poisson.py.) python3 poisson.py

  • If you want the Netgen GUI, then use netgen on the command line: netgen poisson.py You can then ask for a python shell from the GUI’s menu options (Solve -> Python shell).