escript Revision_
speckley/src/WaveAssembler2D.h
Go to the documentation of this file.
1
2/*****************************************************************************
3*
4* Copyright (c) 2003-2020 by The University of Queensland
5* http://www.uq.edu.au
6*
7* Primary Business: Queensland, Australia
8* Licensed under the Apache License, version 2.0
9* http://www.apache.org/licenses/LICENSE-2.0
10*
11* Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12* Development 2012-2013 by School of Earth Sciences
13* Development from 2014-2017 by Centre for Geoscience Computing (GeoComp)
14* Development from 2019 by School of Earth and Environmental Sciences
15**
16*****************************************************************************/
17#ifndef __SPECKLEY_WAVE_ASSEMBLER_2D_H__
18#define __SPECKLEY_WAVE_ASSEMBLER_2D_H__
19
20#include <speckley/Rectangle.h>
21
22namespace speckley {
23
24
26{
27public:
29 const dim_t *NE, const dim_t *NN, const DataMap& c)
31 m_dx(dx),
32 m_NE(NE),
33 m_NN(NN)
34 {
35 domain = REFCOUNTNS::static_pointer_cast<const Rectangle>(dom);
36 isHTI = isVTI = false;
37 DataMap::const_iterator a = c.find("c12"), b = c.find("c23");
38 if (c.find("c11") == c.end()
39 || c.find("c13") == c.end() || c.find("c33") == c.end()
40 || c.find("c44") == c.end() || c.find("c66") == c.end()
41 || (a == c.end() && b == c.end()))
42 throw SpeckleyException("required constants missing for WaveAssembler");
43
44 if (a != c.end() && b != c.end()) {
45 throw SpeckleyException("WaveAssembler3D() doesn't support general form waves");
46 } else if (a == c.end()) {
47 c23 = b->second;
48 isHTI = true;
50 throw SpeckleyException("C tensor elements must be reduced");
51 }
52 if (c23.isEmpty()) {
53 throw SpeckleyException("C tensor elements must not be empty");
54 }
55 } else if (b == c.end()) {
56 c12 = a->second;
57 isVTI = true;
59 throw SpeckleyException("C tensor elements must be reduced");
60 }
61 if (c12.isEmpty()) {
62 throw SpeckleyException("C tensor elements must not be empty");
63 }
64 } // final else case taken care of with the missing constants above
65 c11 = c.find("c11")->second;
66 c13 = c.find("c13")->second;
67 c33 = c.find("c33")->second;
68 c44 = c.find("c44")->second;
69 c66 = c.find("c66")->second;
75 throw SpeckleyException("C tensor elements must be reduced");
76 }
77 if (c11.isEmpty()
78 || c13.isEmpty()
79 || c33.isEmpty()
80 || c44.isEmpty()
81 || c66.isEmpty()) {
82 throw SpeckleyException("C tensor elements must not be empty");
83 }
84 }
85
87
88 /* The default SpeckleyDomain assemblers, with original signatures */
89
93 const escript::Data& A, const escript::Data& B,
94 const escript::Data& C, const escript::Data& D,
95 const escript::Data& du, const escript::Data& Y) const;
96
100 escript::Data& rhs, const escript::Data& d,
101 const escript::Data& y) const;
102
106 escript::Data& rhs, const escript::Data& A, const escript::Data& B,
107 const escript::Data& C, const escript::Data& D,
108 const escript::Data& du, const escript::Data& Y) const;
109
113 escript::Data& rhs, const escript::Data& d,
114 const escript::Data& y) const;
115
119 const escript::Data& A, const escript::Data& B,
120 const escript::Data& C, const escript::Data& D,
121 const escript::Data& du, const escript::Data& Y) const;
122
126 escript::Data& rhs, const escript::Data& d,
127 const escript::Data& y) const;
128
132 escript::Data& rhs, const escript::Data& A, const escript::Data& B,
133 const escript::Data& C, const escript::Data& D,
134 const escript::Data& du, const escript::Data& Y) const;
135
139 escript::Data& rhs, const escript::Data& d,
140 const escript::Data& y) const;
141
142 /* The new interface for assemblers */
143
145 escript::Data& rhs,
146 const DataMap& coefs) const;
148 escript::Data& rhs,
149 const DataMap& coefs) const;
151 escript::Data& rhs,
152 const DataMap& coefs) const;
155 escript::Data& rhs,
156 const DataMap& coefs) const;
158 escript::Data& rhs,
159 const DataMap& coefs) const;
161 escript::Data& rhs,
162 const DataMap& coefs) const;
164 escript::Data& rhs,
165 const DataMap& coefs) const;
168 escript::Data& rhs,
169 const DataMap& coefs) const;
170
171 virtual void collateFunctionSpaceTypes(std::vector<int>& fsTypes,
172 const DataMap& coefs) const;
173
174protected:
176 const double *m_dx;
177 const dim_t *m_NE;
178 const dim_t *m_NN;
181};
182
183} // namespace speckley
184
185#endif // __SPECKLEY_DEFAULTASSEMBLER2D_H__
186
Base class for escript system matrices.
Definition AbstractSystemMatrix.h:44
Data represents a collection of datapoints.
Definition Data.h:64
const FunctionSpace & getFunctionSpace() const
Return the function space.
Definition Data.h:463
bool isEmpty() const
Definition Data.cpp:1132
int getTypeCode() const
Returns the function space type code.
Definition FunctionSpace.cpp:95
Definition speckley/src/AbstractAssembler.h:35
Rectangle is the 2-dimensional implementation of a SpeckleyDomain.
Definition speckley/src/Rectangle.h:34
SpeckleyException exception class.
Definition SpeckleyException.h:31
Definition speckley/src/WaveAssembler2D.h:26
bool isVTI
Definition speckley/src/WaveAssembler2D.h:179
const dim_t * m_NN
Definition speckley/src/WaveAssembler2D.h:178
virtual void assemblePDEBoundarySystem(escript::AbstractSystemMatrix *mat, escript::Data &rhs, const escript::Data &d, const escript::Data &y) const
Definition speckley/src/WaveAssembler2D.cpp:391
virtual void assemblePDEBoundarySystemReduced(escript::AbstractSystemMatrix *mat, escript::Data &rhs, const escript::Data &d, const escript::Data &y) const
Definition speckley/src/WaveAssembler2D.cpp:397
virtual void assemblePDESingleReduced(escript::AbstractSystemMatrix *mat, escript::Data &rhs, const escript::Data &A, const escript::Data &B, const escript::Data &C, const escript::Data &D, const escript::Data &du, const escript::Data &Y) const
Definition speckley/src/WaveAssembler2D.cpp:414
virtual void assemblePDEBoundarySingleReduced(escript::AbstractSystemMatrix *mat, escript::Data &rhs, const escript::Data &d, const escript::Data &y) const
Definition speckley/src/WaveAssembler2D.cpp:384
escript::Data c11
Definition speckley/src/WaveAssembler2D.h:180
virtual void assemblePDESingle(escript::AbstractSystemMatrix *mat, escript::Data &rhs, const escript::Data &A, const escript::Data &B, const escript::Data &C, const escript::Data &D, const escript::Data &du, const escript::Data &Y) const
Definition speckley/src/WaveAssembler2D.cpp:405
escript::Data c66
Definition speckley/src/WaveAssembler2D.h:180
escript::Data c12
Definition speckley/src/WaveAssembler2D.h:180
escript::Data c33
Definition speckley/src/WaveAssembler2D.h:180
const dim_t * m_NE
Definition speckley/src/WaveAssembler2D.h:177
escript::Data c23
Definition speckley/src/WaveAssembler2D.h:180
virtual void assemblePDESystem(escript::AbstractSystemMatrix *mat, escript::Data &rhs, const escript::Data &A, const escript::Data &B, const escript::Data &C, const escript::Data &D, const escript::Data &du, const escript::Data &Y) const
Definition speckley/src/WaveAssembler2D.cpp:212
virtual void assemblePDESystemReduced(escript::AbstractSystemMatrix *mat, escript::Data &rhs, const escript::Data &A, const escript::Data &B, const escript::Data &C, const escript::Data &D, const escript::Data &du, const escript::Data &Y) const
Definition speckley/src/WaveAssembler2D.cpp:369
POINTER_WRAPPER_CLASS(const Rectangle) domain
escript::Data c13
Definition speckley/src/WaveAssembler2D.h:180
WaveAssembler2D(escript::const_Domain_ptr dom, const double *dx, const dim_t *NE, const dim_t *NN, const DataMap &c)
Definition speckley/src/WaveAssembler2D.h:28
bool isHTI
Definition speckley/src/WaveAssembler2D.h:179
const double * m_dx
Definition speckley/src/WaveAssembler2D.h:176
escript::Data c44
Definition speckley/src/WaveAssembler2D.h:180
virtual void assemblePDEBoundarySingle(escript::AbstractSystemMatrix *mat, escript::Data &rhs, const escript::Data &d, const escript::Data &y) const
Definition speckley/src/WaveAssembler2D.cpp:378
~WaveAssembler2D()
Definition speckley/src/WaveAssembler2D.h:86
virtual void collateFunctionSpaceTypes(std::vector< int > &fsTypes, const DataMap &coefs) const
Definition speckley/src/WaveAssembler2D.cpp:116
boost::shared_ptr< const AbstractDomain > const_Domain_ptr
Definition AbstractDomain.h:44
Definition AbstractAssembler.cpp:19
@ ReducedElements
Definition Speckley.h:64
std::map< std::string, escript::Data > DataMap
Definition speckley/src/domainhelpers.h:25