OpenLB 1.8.1
Loading...
Searching...
No Matches
olb::AnalyticalFfromBlockF3D< T, W > Class Template Referencefinal

Converts block functors to analytical functors. More...

#include <interpolationF3D.h>

+ Inheritance diagram for olb::AnalyticalFfromBlockF3D< T, W >:
+ Collaboration diagram for olb::AnalyticalFfromBlockF3D< T, W >:

Public Member Functions

 AnalyticalFfromBlockF3D (BlockF3D< W > &f, Cuboid3D< T > &cuboid)
 
bool operator() (W output[], const T physC[]) override
 trilinear interpolation on cubic lattice
 
- Public Member Functions inherited from olb::AnalyticalF< D, T, S >
AnalyticalF< D, T, S > & operator- (AnalyticalF< D, T, S > &rhs)
 
AnalyticalF< D, T, S > & operator+ (AnalyticalF< D, T, S > &rhs)
 
AnalyticalF< D, T, S > & operator* (AnalyticalF< D, T, S > &rhs)
 
AnalyticalF< D, T, S > & operator/ (AnalyticalF< D, T, S > &rhs)
 
- Public Member Functions inherited from olb::GenericF< T, S >
virtual ~GenericF ()=default
 
int getSourceDim () const
 read only access to member variable _m
 
int getTargetDim () const
 read only access to member variable _n
 
std::string & getName ()
 read and write access to name
 
std::string const & getName () const
 read only access to name
 
virtual bool operator() (T output[], const S input[])=0
 has to be implemented for 'every' derived class
 
bool operator() (T output[])
 wrapper that call the pure virtual operator() (T output[], const S input[]) from above
 
bool operator() (T output[], S input0)
 
bool operator() (T output[], S input0, S input1)
 
bool operator() (T output[], S input0, S input1, S input2)
 
bool operator() (T output[], S input0, S input1, S input2, S input3)
 

Protected Attributes

BlockF3D< W > & _f
 
Cuboid3D< T > & _cuboid
 

Additional Inherited Members

- Public Types inherited from olb::AnalyticalF< D, T, S >
using identity_functor_type = AnalyticalIdentity<D,T,S>
 
- Public Types inherited from olb::GenericF< T, S >
using targetType = T
 
using sourceType = S
 
- Public Attributes inherited from olb::GenericF< T, S >
std::shared_ptr< GenericF< T, S > > _ptrCalcC
 memory management, frees resouces (calcClass)
 
- Static Public Attributes inherited from olb::AnalyticalF< D, T, S >
static constexpr unsigned dim = D
 
- Protected Member Functions inherited from olb::AnalyticalF< D, T, S >
 AnalyticalF (int n)
 
- Protected Member Functions inherited from olb::GenericF< T, S >
 GenericF (int targetDim, int sourceDim)
 

Detailed Description

template<typename T, typename W = T>
class olb::AnalyticalFfromBlockF3D< T, W >

Converts block functors to analytical functors.

Definition at line 53 of file interpolationF3D.h.

Constructor & Destructor Documentation

◆ AnalyticalFfromBlockF3D()

template<typename T , typename W >
olb::AnalyticalFfromBlockF3D< T, W >::AnalyticalFfromBlockF3D ( BlockF3D< W > & f,
Cuboid3D< T > & cuboid )

Definition at line 176 of file interpolationF3D.hh.

178 : AnalyticalF3D<T,W>(f.getTargetDim()),
179 _f(f), _cuboid(cuboid)
180{
181 this->getName() = "fromBlockF";
182}
std::string & getName()
read and write access to name
Definition genericF.hh:51
AnalyticalF< 3, T, S > AnalyticalF3D

References olb::GenericF< T, S >::getName().

+ Here is the call graph for this function:

Member Function Documentation

◆ operator()()

template<typename T , typename W >
bool olb::AnalyticalFfromBlockF3D< T, W >::operator() ( W output[],
const T physC[] )
override

trilinear interpolation on cubic lattice

Definition at line 186 of file interpolationF3D.hh.

187{
188 int latticeC[3];
189 auto latticeR = _cuboid.getFloorLatticeR(physC);
190
191 auto& block = _f.getBlockStructure();
192 auto padding = std::min(1, block.getPadding());
193
194 if (latticeR >= -padding && latticeR < block.getExtent()+padding-1) {
195 const int& locX = latticeR[0];
196 const int& locY = latticeR[1];
197 const int& locZ = latticeR[2];
198
199 Vector<T,3> physCv(physC);
200 Vector<T,3> physRiC = _cuboid.getPhysR({locX, locY, locZ});
201
202 // compute weights
203 Vector<W,3> d = (physCv - physRiC) * (1. / _cuboid.getDeltaR());
204 Vector<W,3> e = 1. - d;
205
206 W output_tmp[_f.getTargetDim()];
207 for (int iD = 0; iD < _f.getTargetDim(); ++iD) {
208 output_tmp[iD] = W();
209 }
210
211 latticeC[0] = locX;
212 latticeC[1] = locY;
213 latticeC[2] = locZ;
214 _f(output_tmp,latticeC);
215 for (int iD = 0; iD < _f.getTargetDim(); ++iD) {
216 output[iD] += output_tmp[iD] * e[0] * e[1] * e[2];
217 output_tmp[iD] = W();
218 }
219
220 latticeC[0] = locX;
221 latticeC[1] = locY + 1;
222 latticeC[2] = locZ;
223 _f(output_tmp,latticeC);
224 for (int iD = 0; iD < _f.getTargetDim(); ++iD) {
225 output[iD] += output_tmp[iD] * e[0] * d[1] * e[2];
226 output_tmp[iD] = W();
227 }
228
229 latticeC[0] = locX + 1;
230 latticeC[1] = locY;
231 latticeC[2] = locZ;
232 _f(output_tmp,latticeC);
233 for (int iD = 0; iD < _f.getTargetDim(); ++iD) {
234 output[iD] += output_tmp[iD] * d[0] * e[1] * e[2];
235 output_tmp[iD] = W();
236 }
237
238 latticeC[0] = locX + 1;
239 latticeC[1] = locY + 1;
240 latticeC[2] = locZ;
241 _f(output_tmp,latticeC);
242 for (int iD = 0; iD < _f.getTargetDim(); ++iD) {
243 output[iD] += output_tmp[iD] * d[0] * d[1] * e[2];
244 output_tmp[iD] = W();
245 }
246
247 latticeC[0] = locX;
248 latticeC[1] = locY;
249 latticeC[2] = locZ + 1;
250 _f(output_tmp,latticeC);
251 for (int iD = 0; iD < _f.getTargetDim(); ++iD) {
252 output[iD] += output_tmp[iD] * e[0] * e[1] * d[2];
253 output_tmp[iD] = W();
254 }
255
256 latticeC[0] = locX;
257 latticeC[1] = locY + 1;
258 latticeC[2] = locZ + 1;
259 _f(output_tmp,latticeC);
260 for (int iD = 0; iD < _f.getTargetDim(); ++iD) {
261 output[iD] += output_tmp[iD] * e[0] * d[1] * d[2];
262 output_tmp[iD] = W();
263 }
264
265 latticeC[0] = locX + 1;
266 latticeC[1] = locY;
267 latticeC[2] = locZ + 1;
268 _f(output_tmp,latticeC);
269 for (int iD = 0; iD < _f.getTargetDim(); ++iD) {
270 output[iD] += output_tmp[iD] * d[0] * e[1] * d[2];
271 output_tmp[iD] = W();
272 }
273
274 latticeC[0] = locX + 1;
275 latticeC[1] = locY + 1;
276 latticeC[2] = locZ + 1;
277 _f(output_tmp,latticeC);
278 for (int iD = 0; iD < _f.getTargetDim(); ++iD) {
279 output[iD] += output_tmp[iD] * d[0] * d[1] * d[2];
280 output_tmp[iD] = W();
281 }
282
283 return true;
284 }
285 else {
286 return false;
287 }
288}
virtual BlockStructureD< 3 > & getBlockStructure() const
int getTargetDim() const
read only access to member variable _n
Definition genericF.hh:45
constexpr int d() any_platform
Definition functions.h:127
Vector(T &&t, Ts &&... ts) -> Vector< std::remove_cvref_t< T >, 1+sizeof...(Ts)>

Member Data Documentation

◆ _cuboid

template<typename T , typename W = T>
Cuboid3D<T>& olb::AnalyticalFfromBlockF3D< T, W >::_cuboid
protected

Definition at line 56 of file interpolationF3D.h.

◆ _f

template<typename T , typename W = T>
BlockF3D<W>& olb::AnalyticalFfromBlockF3D< T, W >::_f
protected

Definition at line 55 of file interpolationF3D.h.


The documentation for this class was generated from the following files: