24#ifndef SUPER_LATTICE_TIME_AVERAGED_F3_D_HH
25#define SUPER_LATTICE_TIME_AVERAGED_F3_D_HH
37 :
SuperF3D<T,T>(sFunctor.getSuperStructure(),sFunctor.getTargetDim()*2),
40 _sData(_sFunctor.getSuperStructure().getCuboidGeometry(),
41 _sFunctor.getSuperStructure().getLoadBalancer(),
42 _sFunctor.getSuperStructure().getOverlap(),
43 _sFunctor.getTargetDim()),
44 _sDataP2(_sFunctor.getSuperStructure().getCuboidGeometry(),
45 _sFunctor.getSuperStructure().getLoadBalancer(),
46 _sFunctor.getSuperStructure().getOverlap(),
47 _sFunctor.getTargetDim())
54 :
SuperF3D<T,T>(sFunctor.getSuperStructure(),sFunctor.getTargetDim()),
57 _sData(_sFunctor.getSuperStructure().getCuboidGeometry(),
58 _sFunctor.getSuperStructure().getLoadBalancer(),
59 _sFunctor.getSuperStructure().getOverlap(),
60 _sFunctor.getTargetDim()),
61 _sDataP2(_sFunctor.getSuperStructure().getCuboidGeometry(),
62 _sFunctor.getSuperStructure().getLoadBalancer(),
63 _sFunctor.getSuperStructure().getOverlap(),
64 _sFunctor.getTargetDim())
66 this->
getName() =
"Time Averaged Magnitudes" + _sFunctor.
getName();
72 T iCloc = _sData.getLoadBalancer().loc(input[0]);
73 for (
int iDim = 0; iDim < _sData.getDataSize(); iDim++) {
74 output[iDim] = _sData.getBlock(iCloc).get(input+1,iDim) / _ensembles;
76 for (
int iDim = _sData.getDataSize(); iDim < _sData.getDataSize()*2; iDim++)
77 if (_sDataP2.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())/_ensembles - _sData.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())*_sData.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())/_ensembles/_ensembles<0) {
81 output[iDim] =
util::sqrt(_sDataP2.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())/_ensembles - _sData.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())*_sData.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())/_ensembles/_ensembles);
89 T iCloc = _sData.getLoadBalancer().loc(input[0]);
90 for (
int iDim = 0; iDim < _sData.getDataSize(); iDim++) {
91 output[iDim] = _sData.getBlock(iCloc).get(input+1,iDim) / _ensembles;
93 for (
int iDim = _sData.getDataSize(); iDim < _sData.getDataSize()*2; iDim++)
94 if (_sDataP2.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())/_ensembles - _sData.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())*_sData.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())/_ensembles/_ensembles<0) {
98 output[iDim] =
util::sqrt(_sDataP2.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())/_ensembles - _sData.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())*_sData.getBlock(iCloc).get(input+1,(
int) iDim-_sDataP2.getDataSize())/_ensembles/_ensembles);
119 for (
int iCloc=0; iCloc < _sData.getLoadBalancer().size(); ++iCloc) {
120 i[0] = _sData.getLoadBalancer().glob(iCloc);
121 _sData.getBlock(iCloc).forSpatialLocations([&](
auto iX,
auto iY,
auto iZ) {
126 T tmp[_sFunctor.getTargetDim()];
128 for (
int iDim=0; iDim<_sFunctor.getTargetDim(); iDim++) {
129 _sData.getBlock(iCloc).get({iX, iY, iZ}, iDim) += (
BaseType<T>)(tmp[iDim]) ;
141 for (
int iCloc=0; iCloc < _sData.getLoadBalancer().size(); ++iCloc) {
142 i[0] = _sData.getLoadBalancer().glob(iCloc);
143 _sData.getBlock(iCloc).forSpatialLocations([&](
auto iX,
auto iY,
auto iZ) {
149 for (
int iDim=0; iDim<_sFunctor.getTargetDim(); iDim++) {
173 :
SuperF3D<T,T>(sFunctorM.getSuperStructure(),sFunctorM.getTargetDim()*sFunctorN.getTargetDim()),_ensembles(0), _sFunctorM(sFunctorM), _sFunctorN(sFunctorN), _sDataM(_sFunctorM.getSuperStructure().getCuboidGeometry(),_sFunctorM.getSuperStructure().getLoadBalancer(),_sFunctorM.getSuperStructure().getOverlap(),_sFunctorM.getTargetDim()),_sDataN(_sFunctorN.getSuperStructure().getCuboidGeometry(),_sFunctorN.getSuperStructure().getLoadBalancer(),_sFunctorN.getSuperStructure().getOverlap(),_sFunctorN.getTargetDim()),_sDataMN(_sFunctorM.getSuperStructure().getCuboidGeometry(),_sFunctorM.getSuperStructure().getLoadBalancer(),_sFunctorM.getSuperStructure().getOverlap(),_sFunctorM.getTargetDim()*_sFunctorN.getTargetDim())
175 this->
getName() =
"Time Averaged Corss Correlation " + _sFunctorM.
getName()+
"-"+_sFunctorN.
getName();
185 for (
int iCloc=0; iCloc < _sDataMN.getLoadBalancer().size(); ++iCloc) {
186 i[0] = _sDataMN.getLoadBalancer().glob(iCloc);
187 for (iX=0; iX < _sDataMN.getBlock(iCloc).getNx(); iX++) {
188 for (iY=0; iY < _sDataMN.getBlock(iCloc).getNy(); iY++) {
189 for (iZ=0; iZ < _sDataMN.getBlock(iCloc).getNz(); iZ++) {
198 for (
int iDimM=0; iDimM<_sFunctorM.getTargetDim(); iDimM++) {
199 for (
int iDimN=0; iDimN<_sFunctorN.getTargetDim(); iDimN++) {
200 _sDataMN.getBlock(iCloc).get({iX, iY, iZ}, iDimMN) += (
BaseType<T>)(tmpM[iDimM])*(
BaseType<T>)(tmpN[iDimN]) ;
204 for (
int iDim=0; iDim<_sFunctorN.getTargetDim(); iDim++) {
205 _sDataN.getBlock(iCloc).get({iX, iY, iZ}, iDim) += (
BaseType<T>)(tmpN[iDim]) ;
207 for (
int iDim=0; iDim<_sFunctorM.getTargetDim(); iDim++) {
208 _sDataM.getBlock(iCloc).get({iX, iY, iZ}, iDim) += (
BaseType<T>)(tmpM[iDim]) ;
222 T iCloc = _sDataMN.getLoadBalancer().loc(input[0]);
223 for (
int iDimM=0; iDimM<_sFunctorM.getTargetDim(); iDimM++) {
224 for (
int iDimN=0; iDimN<_sFunctorN.getTargetDim(); iDimN++) {
225 output[iDim] = _sDataMN.getBlock(iCloc).get(input+1,iDim)-_sDataM.getBlock(iCloc).get(input+1,iDimM) *_sDataN.getBlock(iCloc).get(input+1,iDimN)/_ensembles/_ensembles;
235 :
SuperF3D<T,T>(sFunctorM.getSuperStructure(),sFunctorM.getTargetDim()), _sFunctorM(sFunctorM), _sFunctorN(sFunctorN), _sGeometry(sGeometry),_material(material)
237 this->
getName() =
"SuperLatticeTimeAveraged3DL2Norm";
247 T tmpM[_sFunctorM.getTargetDim()];
248 T tmpN[_sFunctorN.getTargetDim()];
249 for (
int iC = 0; iC < _sFunctorM.getSuperStructure().getLoadBalancer().size(); ++iC) {
250 Cuboid3D<T>& cuboid = geometry.
get(_sFunctorM.getSuperStructure().getLoadBalancer().glob(iC));
252 const int nX = cuboid.
getNx();
253 const int nY = cuboid.
getNy();
254 const int nZ = cuboid.
getNz();
256 inputTmp[0] = _sFunctorM.getSuperStructure().getLoadBalancer().glob(iC);
258 for (inputTmp[1] = 0; inputTmp[1] < nX; ++inputTmp[1]) {
259 for (inputTmp[2] = 0; inputTmp[2] < nY; ++inputTmp[2]) {
260 for (inputTmp[3] = 0; inputTmp[3] < nZ; ++inputTmp[3]) {
261 _sFunctorM(tmpM, inputTmp);
262 _sFunctorN(tmpN, inputTmp);
263 for (
int iDim = 0; iDim < _sFunctorM.getTargetDim()/2; ++iDim) {
264 output[0] += (tmpM[iDim]-tmpN[iDim])*(tmpM[iDim]-tmpN[iDim]);
272#ifdef PARALLEL_MODE_MPI
276 Cuboid3D<T>& cuboid = geometry.
get(_sFunctorM.getSuperStructure().getLoadBalancer().glob(0));
A regular single 3D cuboid is the basic component of a 3D cuboid structure which defines the grid.
T getDeltaR() const
Read only access to the distance of cuboid nodes.
int getNz() const
Read access to cuboid depth.
int getNy() const
Read access to cuboid height.
int getNx() const
Read access to cuboid width.
A cuboid geometry represents a voxel mesh.
Cuboid3D< T > & get(int iC)
Read and write access to a single cuboid.
std::string & getName()
read and write access to name
represents all functors that operate on a SuperStructure<T,3> in general
Representation of a statistic for a parallel 2D geometry.
bool operator()(T output[], const int input[])
SuperLatticeTimeAveraged3DL2Norm(SuperF3D< T, T > &sFunctorM, SuperF3D< T, T > &sFunctorN, SuperGeometry< T, 3 > &sGeometry, int material)
bool operator()(T output[], const int input[])
SuperLatticeTimeAveragedCrossCorrelationF3D(SuperF3D< T, T > &sFunctorM, SuperF3D< T, T > &sFunctorN)
SuperLatticeTimeAveragedF3D(SuperF3D< T, T > &sFunctor)
int getBlockFSize() const
bool operator()(T output[], const int input[])
SuperLatticeTimeAveragedMagnitudesF3D(SuperF3D< T, T > &sFunctor)
bool operator()(T output[], const int input[])
int getBlockFSize() const
void reduceAndBcast(T &reductVal, MPI_Op op, int root=0, MPI_Comm comm=MPI_COMM_WORLD)
Reduction operation, followed by a broadcast.
cpu::simd::Pack< T > sqrt(cpu::simd::Pack< T > value)
Top level namespace for all of OpenLB.
typename util::BaseTypeHelper< T >::type BaseType