~ubuntu-branches/ubuntu/maverick/dolfin/maverick

« back to all changes in this revision

Viewing changes to bench/fem/assembly/cpp/main.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Johannes Ring
  • Date: 2008-09-16 08:41:20 UTC
  • Revision ID: james.westby@ubuntu.com-20080916084120-i8k3u6lhx3mw3py3
Tags: upstream-0.9.2
ImportĀ upstreamĀ versionĀ 0.9.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (C) 2008 Dag Lindbo, Anders Logg, Ilmar Wilbers.
 
2
// Licensed under the GNU LGPL Version 2.1.
 
3
//
 
4
// First added:  2008-07-22
 
5
// Last changed: 2008-08-07
 
6
 
 
7
#include <iostream>
 
8
#include <dolfin.h>
 
9
#include "forms.h"
 
10
 
 
11
using namespace dolfin;
 
12
 
 
13
double assemble_form(Form& form, Mesh& mesh)
 
14
{
 
15
  // Assemble once
 
16
  const double t0 = time();
 
17
  Matrix A;
 
18
  assemble(A, form, mesh);
 
19
  return time() - t0;
 
20
}
 
21
 
 
22
double reassemble_form(Form& form, Mesh& mesh)
 
23
{
 
24
  // Assemble once
 
25
  Matrix A;
 
26
  assemble(A, form, mesh);
 
27
 
 
28
  // Reassemble
 
29
  const double t0 = time();
 
30
  assemble(A, form, mesh, false);
 
31
  return time() - t0;
 
32
}
 
33
 
 
34
int main()
 
35
{
 
36
  dolfin_set("output destination", "silent");
 
37
 
 
38
  // Backends
 
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");
 
45
 
 
46
  // Forms
 
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");
 
55
 
 
56
  // Tables for results
 
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");
 
63
  Table t6("Overhead");
 
64
  Table t7("Reassemble total");
 
65
  
 
66
  // Benchmark assembly
 
67
  for (unsigned int i = 0; i < backends.size(); i++)
 
68
  {
 
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++)
 
73
    {
 
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);
 
81
    }
 
82
  }
 
83
 
 
84
  // Benchmark reassembly
 
85
  for (unsigned int i = 0; i < backends.size(); i++)
 
86
  {
 
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++)
 
91
    {
 
92
      std::cout << "  Form: " << forms[j] << std::endl;
 
93
      t7(backends[i], forms[j]) = bench_form(forms[j], reassemble_form);
 
94
    }
 
95
  }
 
96
  
 
97
  // Compute overhead
 
98
  t6 = t0 - t1 - t2 - t3 - t4 - t5;
 
99
 
 
100
  // Display results
 
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();
 
110
  
 
111
  return 0;
 
112
}