/* This file is part of the OpenLB library
*
* Copyright (C) 2014-2016 Cyril Masquelier, Mathias J. Krause, Benjamin Förster
* E-mail contact: info@openlb.net
* The most recent release of OpenLB can be downloaded at
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef SMOOTH_INDICATOR_BASE_F_2D_HH
#define SMOOTH_INDICATOR_BASE_F_2D_HH
#include
#include "smoothIndicatorBaseF2D.h"
namespace olb {
template
SmoothIndicatorF2D::SmoothIndicatorF2D()
: AnalyticalF2D(1),
_myMin(S()), _myMax(S()), _pos(S()), _rotMat(S()), _circumRadius(S()), _theta(S()), _epsilon(S())
{ }
template
void SmoothIndicatorF2D::init(T theta, Vector vel, T mass, T mofi) {
_rotMat[0] = std::cos(theta);
_rotMat[1] = std::sin(theta);
_rotMat[2] = -std::sin(theta);
_rotMat[3] = std::cos(theta);
}
template
const Vector& SmoothIndicatorF2D::getMin() const {
return _myMin;
}
template
const Vector& SmoothIndicatorF2D::getMax() const {
return _myMax;
}
template
const Vector& SmoothIndicatorF2D::getPos() const {
return _pos;
}
template
const Vector& SmoothIndicatorF2D::getRotationMatrix() const {
return _rotMat;
}
template
const S& SmoothIndicatorF2D::getCircumRadius() const {
return _circumRadius;
}
template
const S& SmoothIndicatorF2D::getTheta() const {
return _theta;
}
template
const S& SmoothIndicatorF2D::getEpsilon() const {
return _epsilon;
}
template
std::string SmoothIndicatorF2D::name() {
return _name;
}
template
void SmoothIndicatorF2D::setRotationMatrix(Vector rotMat) {
_rotMat[0] = rotMat[0];
_rotMat[1] = rotMat[1];
_rotMat[2] = rotMat[2];
_rotMat[3] = rotMat[3];
}
template
void SmoothIndicatorF2D::setTheta(S theta) {
_theta = theta;
}
template
void SmoothIndicatorF2D::setEpsilon(S epsilon) {
_epsilon = epsilon;
}
// identity to "store results"
template
SmoothIndicatorIdentity2D::SmoothIndicatorIdentity2D(SmoothIndicatorF2D& f)
: _f(f) {
this->_myMin = _f.getMin();
this->_myMax = _f.getMax();
std::swap( _f._ptrCalcC, this->_ptrCalcC );
}
template
bool SmoothIndicatorIdentity2D::operator() (T output[], const S input[]) {
_f(output, input);
return true;
}
///////////////////////// for template specialisation HLBM=true
template
SmoothIndicatorF2D::SmoothIndicatorF2D()
: AnalyticalF2D(1),
_myMin(S()), _myMax(S()), _pos(S()), _vel(S()), _acc(S()), _acc2(S()), _force(S()),
_rotMat(S()), _circumRadius(S()), _theta(S()), _omega(S()), _alpha(S()),
_alpha2(S()), _mass(S()), _mofi(S()), _epsilon(S())
{ }
template
void SmoothIndicatorF2D::init(T theta, Vector vel, T mass, T mofi) {
_rotMat[0] = std::cos(theta);
_rotMat[1] = std::sin(theta);
_rotMat[2] = -std::sin(theta);
_rotMat[3] = std::cos(theta);
_vel = vel;
_mass = mass;
_mofi = mofi;
}
template
const Vector& SmoothIndicatorF2D::getMin() const {
return _myMin;
}
template
const Vector& SmoothIndicatorF2D::getMax() const {
return _myMax;
}
template
const Vector& SmoothIndicatorF2D::getPos() const {
return _pos;
}
template
const Vector& SmoothIndicatorF2D::getVel() const {
return _vel;
}
template
const Vector& SmoothIndicatorF2D::getAcc() const {
return _acc;
}
template
const Vector& SmoothIndicatorF2D::getAcc2() const {
return _acc2;
}
template
const Vector& SmoothIndicatorF2D::getForce() const {
return _force;
}
template
const Vector& SmoothIndicatorF2D::getRotationMatrix() const {
return _rotMat;
}
template
const S& SmoothIndicatorF2D::getCircumRadius() const {
return _circumRadius;
}
template
const S& SmoothIndicatorF2D::getTheta() const {
return _theta;
}
template
const S& SmoothIndicatorF2D::getOmega() const {
return _omega;
}
template
const S& SmoothIndicatorF2D::getAlpha() const {
return _alpha;
}
template
const S& SmoothIndicatorF2D::getAlpha2() const {
return _alpha2;
}
template
const S& SmoothIndicatorF2D::getMass() const {
return _mass;
}
template
const S& SmoothIndicatorF2D::getMofi() const {
return _mofi;
}
template
const S& SmoothIndicatorF2D::getEpsilon() const {
return _epsilon;
}
template
std::string SmoothIndicatorF2D::name() {
return _name;
}
template
void SmoothIndicatorF2D::setPos(Vector pos) {
_pos[0] = pos[0];
_pos[1] = pos[1];
}
template
void SmoothIndicatorF2D::setVel(Vector vel) {
_vel[0] = vel[0];
_vel[1] = vel[1];
}
template
void SmoothIndicatorF2D::setAcc(Vector acc) {
_acc[0] = acc[0];
_acc[1] = acc[1];
}
template
void SmoothIndicatorF2D::setAcc2(Vector acc2) {
_acc2[0] = acc2[0];
_acc2[1] = acc2[1];
}
template
void SmoothIndicatorF2D::setForce(Vector force) {
_force[0] = force[0];
_force[1] = force[1];
}
template
void SmoothIndicatorF2D::setRotationMatrix(Vector rotMat) {
_rotMat[0] = rotMat[0];
_rotMat[1] = rotMat[1];
_rotMat[2] = rotMat[2];
_rotMat[3] = rotMat[3];
}
template
void SmoothIndicatorF2D::setTheta(S theta) {
_theta = theta;
}
template
void SmoothIndicatorF2D::setOmega(S omega) {
_omega = omega;
}
template
void SmoothIndicatorF2D::setAlpha(S alpha) {
_alpha = alpha;
}
template
void SmoothIndicatorF2D::setAlpha2(S alpha2) {
_alpha2 = alpha2;
}
template
void SmoothIndicatorF2D::setMass(S mass) {
_mass = mass;
}
template
void SmoothIndicatorF2D::setMofi(S mofi) {
_mofi = mofi;
}
template
void SmoothIndicatorF2D::setEpsilon(S epsilon) {
_epsilon = epsilon;
}
} // namespace olb
#endif