copied the templates
This commit is contained in:
commit
46636593b5
63 changed files with 570970 additions and 0 deletions
65
mgrid_2/generateCRS.cpp
Normal file
65
mgrid_2/generateCRS.cpp
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
#include "binaryIO.h"
|
||||
#include "geom.h"
|
||||
#include "getmatrix.h"
|
||||
#include "jacsolve.h"
|
||||
#include "userset.h"
|
||||
#include "vdop.h"
|
||||
|
||||
#include <cassert>
|
||||
#include <chrono> // timing
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <omp.h>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
using namespace std::chrono; // timing
|
||||
|
||||
/// Generates sparse matrices (CRS) and right hand side for the Laplace on the given mesh
|
||||
/// and stores them in binary files.
|
||||
///
|
||||
/// - meshname("square_100") reads ASCii mesh file square_100.txt
|
||||
/// - Right hand side is defined via function fNice(x,y) in userset.h
|
||||
/// - the initial mesh is refined (nmesh-1) 2 times by standard.
|
||||
/// - ./generateCRS nmesh --> nmesh-1 refinement steps
|
||||
|
||||
int main(int argc, char **argv )
|
||||
{
|
||||
const string meshname("square_100");
|
||||
//const string meshname("square_06");
|
||||
int nmesh = 3;
|
||||
if (argc > 1) nmesh = atoi(argv[1]);
|
||||
|
||||
Mesh const mesh_c(meshname+".txt");
|
||||
bool ba = mesh_c.checkObtuseAngles();
|
||||
if (ba) cout << "mesh corrected" << endl;
|
||||
//mesh_c.Debug(); cout << endl << "#############################\n";
|
||||
|
||||
gMesh_Hierarchy ggm(mesh_c, nmesh);
|
||||
|
||||
for (size_t ll = 0; ll < ggm.size(); ++ll)
|
||||
{
|
||||
const Mesh &mesh = ggm[ll];
|
||||
cout << "Matrix for mesh " << ll << " with " << mesh.Nnodes() << " nodes."<< endl;
|
||||
FEM_Matrix SK(mesh);
|
||||
vector<double> uv(SK.Nrows(), 0.0); // temperature
|
||||
vector<double> fv(SK.Nrows(), 0.0); // r.h.s.
|
||||
SK.CalculateLaplace(fv);
|
||||
//SK.CheckRowSum();
|
||||
SK.CheckMatrix();
|
||||
mesh.SetValues(uv, [](double x, double y) -> double
|
||||
{
|
||||
return x *x * std::sin(2.5 * M_PI * y);
|
||||
} );
|
||||
SK.ApplyDirichletBC(uv, fv);
|
||||
|
||||
const string binname(meshname+"_"+to_string(ll)+"_mat"+".bin");
|
||||
SK.writeBinary(binname);
|
||||
const string rhsname(meshname+"_"+to_string(ll)+"_rhs"+".bin");
|
||||
write_binVector(rhsname,fv);
|
||||
//SK.Debug();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue