1
// Copyright (C) 2008 Dag Lindbo, Anders Logg, Ilmar Wilbers.
2
// Licensed under the GNU LGPL Version 2.1.
4
// First added: 2008-07-22
5
// Last changed: 2008-08-07
11
using namespace dolfin;
13
double assemble_form(Form& form, Mesh& mesh)
16
const double t0 = time();
18
assemble(A, form, mesh);
22
double reassemble_form(Form& form, Mesh& mesh)
26
assemble(A, form, mesh);
29
const double t0 = time();
30
assemble(A, form, mesh, false);
36
dolfin_set("output destination", "silent");
39
Array<std::string> backends;
40
backends.push_back("uBLAS");
41
backends.push_back("PETSc");
42
backends.push_back("Epetra");
43
backends.push_back("MTL4");
44
backends.push_back("STL");
47
Array<std::string> forms;
48
forms.push_back("Poisson2DP1");
49
forms.push_back("Poisson2DP2");
50
forms.push_back("Poisson2DP3");
51
forms.push_back("THStokes2D");
52
forms.push_back("StabStokes2D");
53
forms.push_back("Elasticity3D");
54
forms.push_back("NSEMomentum3D");
57
Table t0("Assemble total");
58
Table t1("Init dof map");
59
Table t2("Build sparsity");
60
Table t3("Init tensor");
61
Table t4("Delete sparsity");
62
Table t5("Assemble cells");
64
Table t7("Reassemble total");
67
for (unsigned int i = 0; i < backends.size(); i++)
69
dolfin_set("linear algebra backend", backends[i]);
70
dolfin_set("timer prefix", backends[i]);
71
std::cout << "Backend: " << backends[i] << std::endl;
72
for (unsigned int j = 0; j < forms.size(); j++)
74
std::cout << " Form: " << forms[j] << std::endl;
75
t0(backends[i], forms[j]) = bench_form(forms[j], assemble_form);
76
t1(backends[i], forms[j]) = timing(backends[i] + t1.title(), true);
77
t2(backends[i], forms[j]) = timing(backends[i] + t2.title(), true);
78
t3(backends[i], forms[j]) = timing(backends[i] + t3.title(), true);
79
t4(backends[i], forms[j]) = timing(backends[i] + t4.title(), true);
80
t5(backends[i], forms[j]) = timing(backends[i] + t5.title(), true);
84
// Benchmark reassembly
85
for (unsigned int i = 0; i < backends.size(); i++)
87
dolfin_set("linear algebra backend", backends[i]);
88
dolfin_set("timer prefix", backends[i]);
89
std::cout << "Backend: " << backends[i] << std::endl;
90
for (unsigned int j = 0; j < forms.size(); j++)
92
std::cout << " Form: " << forms[j] << std::endl;
93
t7(backends[i], forms[j]) = bench_form(forms[j], reassemble_form);
98
t6 = t0 - t1 - t2 - t3 - t4 - t5;
101
dolfin_set("output destination", "terminal");
102
cout << endl; t0.disp();
103
cout << endl; t1.disp();
104
cout << endl; t2.disp();
105
cout << endl; t3.disp();
106
cout << endl; t4.disp();
107
cout << endl; t5.disp();
108
cout << endl; t6.disp();
109
cout << endl; t7.disp();