NUMCXX  0.13.20181108
Numerical library for small projects and teaching purposes
41-stationary-heat-fv.cxx
Go to the documentation of this file.
1 #include <cstdio>
7 #include <iostream>
8 #include <ctime>
9 #include <cmath>
10 #include <numcxx/numcxx.hxx>
11 #include <numcxx/simplegrid.hxx>
12 #include <numcxx/fvm2d.hxx>
13 #ifdef VTKFIG
15 #endif
16 
17 #include "vtkfigFrame.h"
18 #include "vtkfigDataSet.h"
19 #include "vtkfigGridView.h"
20 #include "vtkfigScalarView.h"
21 
22 
23 
24 int main(void)
25 {
26  numcxx::Geometry Geometry;
27  Geometry.set_points({
28  {-2,0},
29  {0,0},
30  {2,0},
31  {2,2},
32  {0.5,2},
33  {0,1},
34  {-0.5,2},
35  {-2,2}
36  });
37 
38  Geometry.set_bfaces({
39  {0,1},
40  {1,2},
41  {2,3},
42  {3,4},
43  {4,5},
44  {5,6},
45  {6,7},
46  {7,0},
47  {5,1},
48  });
49 
50 
51  Geometry.set_bfaceregions({1,1,2,3,4,4,3,2,5});
52 
53  Geometry.set_regionpoints({
54  {-0.5,1},
55  {0.5,1}
56  });
57  Geometry.set_regionnumbers({1,2});
58  Geometry.set_regionvolumes({0.1,0.1});
59 
60 
61 
62  numcxx::SimpleGrid grid(Geometry,"zpaAqDV");
63 
64 
65 
66  numcxx::DArray1 bcfac(6);
67  numcxx::DArray1 bcval(6);
68  bcfac=0;
69  bcval=0;
70  bcfac(4)=fvm2d::Dirichlet;
71  bcfac(1)=fvm2d::Dirichlet;
72  bcval(4)=1.0;
73  bcval(0)=0.0;
74 
75  auto nnodes=grid.npoints();
76 
77  numcxx::DArray1 source(nnodes);
78  numcxx::DArray1 kappa(nnodes);
79  kappa=1;
80  source=0;
81 
82  numcxx::DSparseMatrix SGlobal(nnodes,nnodes);
83  numcxx::DArray1 Rhs(nnodes);
84  numcxx::DArray1 Sol(nnodes);
85 
86  fvm2d::assemble_heat_problem(grid,bcfac,bcval,source,kappa,SGlobal, Rhs);
87  numcxx::DSolverUMFPACK Solver(SGlobal);
88 
89  Solver.update(SGlobal);
90  Solver.solve(Sol,Rhs);
91 
92 
93 #ifdef VTKFIG
94  auto griddata=numcxx::vtkfigDataSet(grid);
95  griddata->SetPointScalar(Sol ,"Sol");
96 
97  auto frame=vtkfig::Frame::New();
98  frame->SetSize(800,400);
99  frame->SetLayout(2,1);
100 
101  auto gridview=vtkfig::GridView::New();
102  gridview->SetData(griddata);
103  frame->AddFigure(gridview,0);
104 
105  auto solview=vtkfig::ScalarView::New();
106  solview->SetData(griddata,"Sol");
107  frame->AddFigure(solview,1);
108 
109 
110 
111  frame->Interact();
112 #endif
113 }
114 
115 
Class collecting data for the description of piecewise linear geometries.
Definition: geometry.hxx:17
Sparse matrix class using CRS storage scheme.
void set_regionpoints(const std::initializer_list< std::initializer_list< double >> &il)
Set member via intializer list.
Definition: geometry.hxx:32
void set_regionvolumes(const std::initializer_list< double > &il)
Set member via intializer list.
Definition: geometry.hxx:38
Header for simple grid data class.
void solve(TArray< T > &Sol, const TArray< T > &Rhs)
Solve LU factorized system.
Main header of the library.
void set_points(const std::initializer_list< std::initializer_list< double >> &il)
Set member via intializer list.
Definition: geometry.hxx:23
void set_regionnumbers(const std::initializer_list< int > &il)
Set member via intializer list.
Definition: geometry.hxx:35
void assemble_heat_problem(const numcxx::SimpleGrid &Grid, const numcxx::DArray1 &BCfac, const numcxx::DArray1 &BCval, const numcxx::DArray1 &Source, const numcxx::DArray1 &Kappa, numcxx::DSparseMatrix &SGlobal, numcxx::DArray1 &Rhs)
Definition: fvm2d.cxx:158
void set_bfaces(const std::initializer_list< std::initializer_list< int >> &il)
Set member via intializer list.
Definition: geometry.hxx:26
int main(void)
void set_bfaceregions(const std::initializer_list< int > &il)
Set member via intializer list.
Definition: geometry.hxx:29
One dimensional array class.
Definition: tarray1.hxx:31
Class containing data for simple grid data structure.
Definition: simplegrid.hxx:19
Header for adapter beteween vtkfig dataset and simple grid.
Bridge class for using umfpack as solver for vmatrix.
const int npoints() const
Return number of points.
Definition: simplegrid.hxx:66
const double Dirichlet
BC value marking Dirichlet boundary condition.
Definition: fvm2d.hxx:13
void update()
Perform actual computation of LU factorization.