1
// Copyright (C) 2006-2007 Anders Logg.
2
// Licensed under the GNU LGPL Version 2.1.
4
// First added: 2006-02-09
5
// Last changed: 2007-04-24
7
#include <dolfin/dolfin_log.h>
8
#include <dolfin/Mesh.h>
9
#include <dolfin/ConstantFunction.h>
11
using namespace dolfin;
13
//-----------------------------------------------------------------------------
14
ConstantFunction::ConstantFunction(Mesh& mesh, real value)
15
: GenericFunction(mesh), ufc::function(), value(value), size(1)
19
//-----------------------------------------------------------------------------
20
ConstantFunction::~ConstantFunction()
24
//-----------------------------------------------------------------------------
25
dolfin::uint ConstantFunction::rank() const
27
// Just return 0 for now (might extend to vectors later)
30
//-----------------------------------------------------------------------------
31
dolfin::uint ConstantFunction::dim(uint i) const
33
// Just return 1 for now (might extend to vectors later)
36
//-----------------------------------------------------------------------------
37
void ConstantFunction::interpolate(real* values)
39
dolfin_assert(values);
41
// Set all vertex values to the constant value
42
const uint num_values = size*mesh.numVertices();
43
for (uint i = 0; i < num_values; i++)
46
//-----------------------------------------------------------------------------
47
void ConstantFunction::interpolate(real* coefficients,
48
const ufc::cell& cell,
49
const ufc::finite_element& finite_element)
51
dolfin_assert(coefficients);
53
// Compute size of value (number of entries in tensor value)
55
for (uint i = 0; i < finite_element.value_rank(); i++)
56
size *= finite_element.value_dimension(i);
58
// Evaluate each dof to get coefficients for nodal basis expansion
59
for (uint i = 0; i < finite_element.space_dimension(); i++)
60
coefficients[i] = finite_element.evaluate_dof(i, *this, cell);
62
//-----------------------------------------------------------------------------
63
void ConstantFunction::evaluate(real* values,
64
const real* coordinates,
65
const ufc::cell& cell) const
67
dolfin_assert(values);
68
dolfin_assert(coordinates);
70
// Set all values to the constant value
71
for (uint i = 0; i < size; i++)
74
//-----------------------------------------------------------------------------