-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathkernel.h
More file actions
129 lines (109 loc) · 3.72 KB
/
kernel.h
File metadata and controls
129 lines (109 loc) · 3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// ---------------------------------------------------------------------
//
// Copyright (C) 2014 - 2019 by the BEMStokes authors.
//
// This file is part of the BEMStokes library.
//
// The BEMStokes is free software; you can use it, redistribute
// it, and/or modify it under the terms of the GNU Lesser General
// Public License version 2.1 as published by the Free Software Foundation.
// The full text of the license can be found in the file LICENSE at
// the top level of the BEMStokes distribution.
//
// Authors: Nicola Giuliani, Luca Heltai, Antonio DeSimone
//
// ---------------------------------------------------------------------
#ifndef __mathlab__kernel_h // Avoid double definitions
#define __mathlab__kernel_h
#include <deal.II/numerics/vector_tools.h>
#include <deal.II/base/utilities.h>
#include <deal.II/base/conditional_ostream.h>
#include <cmath>
#include <iostream>
#include <fstream>
#include <string>
#include <set>
#include <map>
#include <deal.II/base/function.h>
#include <deal.II/base/tensor_function.h>
#include <Sacado.hpp>
#include <Sacado_cmath.hpp>
//#include <>
typedef Sacado::Fad::DFad<double> SacadoDouble;
typedef Sacado::Fad::DFad<SacadoDouble> SacadoSacadoDouble;
DEAL_II_NAMESPACE_OPEN
template <int rank, int dim>
class SacadoKernel : public TensorFunction<rank, dim, double>
{
public:
virtual Tensor<rank,dim,double>
value_tens (const Tensor<1, dim, double > &p) const;
virtual Tensor<rank+1,dim,double>
value_tens2 (const Tensor<1, dim, double > &p) const;
// virtual Tensor<rank+2,dim,double>
// value_tens3 (const Tensor<1, dim, double > &p) const;
virtual Tensor<rank+1,dim,double>
gradient_tens (const Tensor<1, dim, double > &p) const;
typedef Sacado::Fad::DFad<double> SacadoDouble;
typedef Sacado::Fad::DFad<SacadoDouble> SacadoSacadoDouble;
private:
virtual Tensor<rank, dim, SacadoDouble>
sacado_value(const Tensor<1, dim, SacadoDouble> &p) const = 0;
virtual Tensor<rank+1, dim, SacadoDouble>
sacado_value2(const Tensor<1, dim, SacadoDouble> &p) const = 0;
// virtual Tensor<rank+2, dim, SacadoDouble>
// sacado_value3(const Tensor<1, dim, SacadoDouble> &p) const;
};
template <int dim>
class StokesKernel : public SacadoKernel<2,dim>
{
public:
StokesKernel(const double eps = 0.);
virtual Tensor<2, dim, SacadoDouble>
sacado_value(const Tensor<1,dim,SacadoDouble> &p) const;
virtual Tensor<3, dim, SacadoDouble>
sacado_value2(const Tensor<1,dim,SacadoDouble> &p) const;
virtual Tensor<2, dim, double>
value_tens(const Tensor<1,dim,double> &p) const;
virtual Tensor<3, dim, double>
value_tens2(const Tensor<1,dim,double> &p) const;
virtual Tensor<4, dim, double>
value_tens3(const Tensor<1,dim,double> &p) const;
private:
const double epsilon;
};
DEAL_II_NAMESPACE_CLOSE
// using namespace dealii;
//
// template <int dim, class Type=double>
// class Kernel: public Function<dim>
// {
// public:
// Kernel(const unsigned int n_components=1) :
// Function<dim>(n_components) {}
//
// typedef Sacado::Fad::DFad<double> sacado_double;
// typedef Sacado::Fad::DFad<sacado_double> sacado_sacado_double;
//
// virtual Type t_value (const Tensor<1, dim, Type> &p,
// const unsigned int dimension = 0) const;
//
// virtual double value_tens (const Tensor<1, dim> &p,
// const unsigned int dimension = 0) const;
//
// virtual Tensor<1,dim> gradient_tens(const Tensor<1, dim> &p,
// const unsigned int component = 0) const;
//
// private:
// virtual
// Type convert_to_type(double d) const;
//
// virtual
// double convert_to_double(Type d) const;
//
// // virtual double Hessian (const Tensor<1, dim> &p,
//
// //const unsigned int n_components;
// };
//
#endif