57 T
project(T x)
const override {
return x; }
59 T
inverse(T x)
const override {
return x; }
75 T
inverse(T x)
const override {
return 0; }
84 template <
typename DESCRIPTOR>
86 :
scale {converter.getConversionFactorMass() / converter.getConversionFactorForce()}
99 template <
typename DESCRIPTOR>
101 :
scale {converter.getConversionFactorMass() / converter.getConversionFactorForce()}
113 T
derivative(T x)
const override {
return (x >= T(1) ? T(1)/(x*x) : T(0)); }
114 T
inverse(T x)
const override {
return T(1)/(T(1)-x); }
132 const T y = T(0.5) + T(0.5) *
util::sin((x-T(0.5))*
pi);
164template<
typename T,
typename DESCRIPTOR>
177 return projection.
inverse(porosity);
181template<
typename T,
typename DESCRIPTOR>
185 return (T(1) -
gridTerm(converter) / permeability);
189template<
typename T,
typename DESCRIPTOR>
193 return gridTerm(converter) / (T(1) - porosity);
197template<
typename T,
typename DESCRIPTOR>
201 return (T(1) - porosity) /
gridTerm(converter);
205template<
typename T,
typename DESCRIPTOR>
215template<
typename T,
typename DESCRIPTOR>
228 clout <<
"Transform porosity startValue into control startValue:\n";
229 clout <<
"Porosity: " << startValue << std::endl;
230 clout <<
"Control: " <<
control << std::endl;
237 clout <<
"Transform permeability startValue into control startValue:\n";
238 clout <<
"Permeability: " << startValue << std::endl;
239 clout <<
"Porosity: " << tmpPorosity << std::endl;
240 clout <<
"Control: " <<
control << std::endl;
248 throw std::invalid_argument(
249 "Error: unknown start value type.");
254template<
typename T,
typename OptiCaseDual_Type>
258 *(optiCase._projection),
259 *(optiCase._converter),
260 optiCase._startValueType,
273template <
typename T,
typename DESCRIPTOR>
298template <
typename T,
typename DESCRIPTOR>
302 :
GiBase<T,DESCRIPTOR>{converter}
314template <
typename T,
typename DESCRIPTOR>
320 :
GiBase<T,DESCRIPTOR>(converter),
_n(n)
338template <
typename T,
typename DESCRIPTOR>
344 :
GiBase<T,DESCRIPTOR>(converter),
_n(n)
358template <
typename T,
typename DESCRIPTOR>
363 if (name ==
"Identity") {
364 return std::make_shared<Identity<T>>();
365 }
else if (name ==
"Sigmoid") {
366 return std::make_shared<Sigmoid<T>>();
367 }
else if (name ==
"ForceFactor") {
368 return std::make_shared<ForceFactor<T>>(converter);
369 }
else if (name ==
"Rectifier") {
370 return std::make_shared<Rectifier<T>>();
371 }
else if (name ==
"Softplus") {
372 return std::make_shared<Softplus<T>>();
373 }
else if (name ==
"Baron") {
374 return std::make_shared<Baron<T>>();
375 }
else if (name ==
"Krause") {
376 return std::make_shared<Krause<T>>();
377 }
else if (name ==
"Foerster") {
378 return std::make_shared<Foerster<T,DESCRIPTOR>>(converter);
379 }
else if (std::regex_match(name, match, std::regex (
"(Foerster)([0-9])"))) {
380 const unsigned n = std::stoi(match[2]);
381 return std::make_shared<FoersterN<T,DESCRIPTOR>>(converter, n);
382 }
else if (std::regex_match(name, match, std::regex (
"(Stasius)([0-9])"))) {
383 const unsigned n = std::stoi(match[2]);
384 return std::make_shared<StasiusN<T,DESCRIPTOR>>(converter, n);
386 throw std::invalid_argument(
387 "Error: unknown projection name selected.");
393template <
typename PROJECTION,
typename T>
395 std::vector<T> projected;
396 for (
auto& e : vector) {
397 projected.push_back(PROJECTION().project(e));
402template <
typename PROJECTION,
typename T,
typename ARG>
404 std::vector<T> projected;
405 for (
auto& e : vector) {
406 projected.push_back(PROJECTION(arg).project(e));
class for marking output with some text
Conversion between physical and lattice units, as well as discretization.
constexpr T getLatticeViscosity() const
conversion from physical to lattice viscosity
constexpr T getLatticeRelaxationTime() const
return relaxation time in lattice units
constexpr T getPhysDeltaX() const
returns grid spacing (voxel length) in m
std::shared_ptr< projection::Base< T > > construct(const UnitConverter< T, DESCRIPTOR > &converter, std::string &name)
T porosityToControl(T porosity, const Base< T > &projection)
Get control value for given porosity.
T porosityToPermeability(T porosity, const UnitConverter< T, DESCRIPTOR > &converter)
Get permeability for given porosity.
T permeabilityToControl(T permeability, const Base< T > &projection, const UnitConverter< T, DESCRIPTOR > &converter)
Get control for given permeability.
T getInitialControl(T startValue, const Base< T > &projection, const UnitConverter< T, DESCRIPTOR > &converter, StartValueType type, bool verbose=true)
Transform porosity/ permeability/ other startValue into control.
T permeabilityToPorosity(T permeability, const UnitConverter< T, DESCRIPTOR > &converter)
Get porosity for given permeability.
T gridTerm(const UnitConverter< T, DESCRIPTOR > &converter)
T porosityToInvPermeability(T porosity, const UnitConverter< T, DESCRIPTOR > &converter)
Get inverse of permeability for given porosity.
std::vector< T > applyProjection(const std::vector< T > &vector)
ADf< T, DIM > log(const ADf< T, DIM > &a)
ADf< T, DIM > sin(const ADf< T, DIM > &a)
Expr pow(Expr base, Expr exp)
ADf< T, DIM > asin(const ADf< T, DIM > &a)
ADf< T, DIM > atan(const ADf< T, DIM > &a)
ADf< T, DIM > cos(const ADf< T, DIM > &a)
Top level namespace for all of OpenLB.
#define OLB_PRECONDITION(COND)
T derivative(T x) const override
T project(T x) const override
T inverse(T x) const override
virtual T inverse(T) const =0
virtual T derivative(T) const =0
virtual T project(T) const =0
FoersterProjection for arbitrary n.
T subprojection(T x) const override
FoersterN(const UnitConverter< T, DESCRIPTOR > &converter, unsigned n)
T derivSubprojection(T x) const override
T inverseSubprojection(T x) const override
Foerster(const UnitConverter< T, DESCRIPTOR > &converter)
T subprojection(T x) const override
T derivSubprojection(T x) const override
T inverseSubprojection(T x) const override
T project(T x) const override
T derivative(T x) const override
ForceFactorD(const UnitConverter< T, DESCRIPTOR > &converter)
T inverse(T x) const override
Convert force to lattice units.
T project(T x) const override
ForceFactor(const UnitConverter< T, DESCRIPTOR > &converter)
T inverse(T x) const override
T derivative(T x) const override
Gridterm-dependent projection base class.
virtual T inverseSubprojection(T x) const =0
T project(T x) const override
virtual T derivSubprojection(T x) const =0
GiBase(const UnitConverter< T, DESCRIPTOR > &converter)
T inverse(T x) const override
virtual T subprojection(T x) const =0
T derivative(T x) const override
T derivative(T x) const override
T inverse(T x) const override
T project(T x) const override
T project(T x) const override
T derivative(T x) const override
T inverse(T x) const override
T derivative(T x) const override
T project(T x) const override
T inverse(T x) const override
T derivative(T x) const override
T inverse(T x) const override
T project(T x) const override
T project(T x) const override
T inverse(T x) const override
T derivative(T x) const override
T derivative(T x) const override
T project(T x) const override
T inverse(T x) const override
StasiusProjection for arbitrary n.
T inverseSubprojection(T x) const override
StasiusN(const UnitConverter< T, DESCRIPTOR > &converter, unsigned n)
T derivSubprojection(T x) const override
T subprojection(T x) const override
Unit conversion handling – header file.