/* This file is part of the OpenLB library
*
* Copyright (C) 2012 Lukas Baron, Tim Dornieden, Mathias J. Krause, Albert Mink
* 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 ANALYTICAL_BASE_F_HH
#define ANALYTICAL_BASE_F_HH
#include "analyticalBaseF.h"
namespace olb {
template
AnalyticalF1D::AnalyticalF1D(int n) : GenericF(n,1) { }
template
AnalyticalF2D::AnalyticalF2D(int n) : GenericF(n,2) { }
template
AnalyticalF3D::AnalyticalF3D(int n) : GenericF(n,3) { }
// identity to "store results"
template
AnalyticalIdentity1D::AnalyticalIdentity1D(AnalyticalF1D& f)
: AnalyticalF1D(f.getTargetDim()), _f(f)
{
this->getName() = _f.getName();
std::swap( _f._ptrCalcC, this->_ptrCalcC );
}
template
bool AnalyticalIdentity1D::operator()(T output[], const S input[])
{
_f(output,input);
return true;
}
// identity to "store results"
template
AnalyticalIdentity2D::AnalyticalIdentity2D(AnalyticalF2D& f)
: AnalyticalF2D(f.getTargetDim()), _f(f)
{
this->getName() = _f.getName();
// pass through the shared_ptr from _f, e.g. an arithemticClass, to the identity
std::swap( _f._ptrCalcC, this->_ptrCalcC );
}
template
bool AnalyticalIdentity2D::operator()(T output[], const S input[])
{
_f(output,input);
return true;
}
// identity to "store results"
template
AnalyticalIdentity3D::AnalyticalIdentity3D(AnalyticalF3D& f)
: AnalyticalF3D(f.getTargetDim()), _f(f)
{
this->getName() = _f.getName();
std::swap( _f._ptrCalcC, this->_ptrCalcC );
}
template
bool AnalyticalIdentity3D::operator()(T output[], const S input[])
{
_f(output,input);
return true;
}
template
AnalyticalFfromIndicatorF3D::AnalyticalFfromIndicatorF3D(IndicatorF3D& indicatorF)
: AnalyticalF3D(1), _indicatorF(indicatorF)
{
this->getName() = "IndicatorFfrom" + _indicatorF.getName();
}
template
bool AnalyticalFfromIndicatorF3D::operator() (T output[], const S input[])
{
bool tmp = false;
_indicatorF(&tmp, input);
if ( tmp ) {
output[0] = T(1);
} else {
output[0] = T(0);
}
return tmp;
}
} // end namespace olb
#endif