OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
Shear.cpp
Go to the documentation of this file.
4
5#include <regex>
6
7namespace mslang {
8 void Shear::print(int indentwidth) {
9 std::string indent(indentwidth, ' ');
10 std::string indent2(indentwidth + 8, ' ');
11 std::cout << indent << "shear, " << std::endl;
12 func_m->print(indentwidth + 8);
13 if (std::abs(angleX_m) > 0.0) {
14 std::cout << ",\n" << indent2 << "angle X: " << angleX_m;
15 } else {
16 std::cout << ",\n" << indent2 << "angle Y: " << angleY_m;
17 }
18 }
19
20 void Shear::applyShear(std::vector<std::shared_ptr<Base> >& bfuncs) {
22 Vector_t<double, 3>(1.0, tan(angleX_m), 0.0),
23 Vector_t<double, 3>(-tan(angleY_m), 1.0, 0.0));
24
25 const unsigned int size = bfuncs.size();
26
27 for (unsigned int j = 0; j < size; ++j) {
28 std::shared_ptr<Base>& obj = bfuncs[j];
29 obj->trafo_m = obj->trafo_m.mult(shear);
30
31 if (!obj->divisor_m.empty()) applyShear(obj->divisor_m);
32 }
33 }
34
35 void Shear::apply(std::vector<std::shared_ptr<Base> >& bfuncs) {
36 func_m->apply(bfuncs);
37 applyShear(bfuncs);
38 }
39
40 bool Shear::parse_detail(iterator& it, const iterator& end, Function*& fun) {
41 Shear* shr = static_cast<Shear*>(fun);
42 if (!parse(it, end, shr->func_m)) return false;
43
44 ArgumentExtractor arguments(std::string(++it, end));
45 try {
46 shr->angleX_m = parseMathExpression(arguments.get(0));
47 shr->angleY_m = parseMathExpression(arguments.get(1));
48 } catch (std::runtime_error& e) {
49 std::cout << e.what() << std::endl;
50 return false;
51 }
52
53 it += (arguments.getLengthConsumed() + 1);
54
55 return true;
56 }
57} // namespace mslang
ippl::Vector< T, Dim > Vector_t
double parseMathExpression(const std::string &str)
Definition matheval.cpp:4
std::string::iterator iterator
Definition MSLang.h:14
std::string get(unsigned int i) const
unsigned int getLengthConsumed() const
virtual void apply(std::vector< std::shared_ptr< Base > > &bfuncs)=0
static bool parse(iterator &it, const iterator &end, Function *&fun)
Definition MSLang.cpp:47
virtual void print(int indent)=0
Function * func_m
Definition Shear.h:8
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
Definition Shear.cpp:40
virtual void apply(std::vector< std::shared_ptr< Base > > &bfuncs)
Definition Shear.cpp:35
void applyShear(std::vector< std::shared_ptr< Base > > &bfuncs)
Definition Shear.cpp:20
virtual void print(int indentwidth)
Definition Shear.cpp:8
double angleX_m
Definition Shear.h:9
double angleY_m
Definition Shear.h:10