#include <fiber/bundle/Bundle.hpp>
#include <fiber/finit/FinitAPI.h>
#include <fiber/field/ArrayRef.hpp>
#include <fiber/field/UniformCartesianArray.hpp>
#include <fiber/field/FunctionalCreator.hpp>
{
Finit();
Representation&myCartesianRepresentation = BP[1.0][
"DemoGrid"].makeCartesianRepresentation(3);
RefPtr<Field>&Positions = myCartesianRepresentation[ FIBER_POSITIONS ];
Eagle::point3 BBoxMin(-1.0, -1.0, -0.5), BBoxMax( 1.0, 1.0, 0.5);
const int nTilesX = 5, nTilesY = 3;
Eagle::tvector3 FragmentDiagonal = (BBoxMax - BBoxMin).multiply( 1.0/ nTilesX, 1.0/ nTilesY, 1.0);
for(int tileY = 0; tileY < nTilesY; tileY++)
for(int tileX = 0; tileX < nTilesX; tileX++)
{
Eagle::point3 FragmentBBoxMin = BBoxMin + FragmentDiagonal.multiply( tileX, tileY, 0.0);
FragmentDiagonal.multiply(1.0/(Dims[0]-1), 1.0/(Dims[1]-1), 1.0/(Dims[2]-1) ) );
Positions->createCreator(Coordinates, FragmentName);
Positions->setFragmentOffset( FragmentName,
MIndex( tileX*Dims[0], tileY*Dims[1], 0*Dims[2] ) );
if (true)
{
Values->setCreator(newFunctionalCreator(
[Dims, Coordinates, FragmentName]()
{
GridValues->setCacheInfoString(FragmentName);
Verbose(1) << "Starting computation for " << FragmentName;
{
double& value = GridValues[ I ];
Eagle::point3 P = Pts[ I ];
value = P.x()*P.x() - P.y()*P.y() + P.z()*P.z();
}
return GridValues;
} ),
Positions->getFragmentID(FragmentName) );
}
}
Verbose(1) << " ------ requesting data for " << nTilesX << " x " << nTilesY << " fragments.";
int HaveData = 0;
Values->Iterate( [&HaveData](const RefPtr<FragmentID>&Fid, const RefPtr<CreativeArrayBase>&CAB)
{
CAB->request();
HaveData++;
return true;
}
);
Verbose(1) << "\n ------ using " << HaveData << " data ------ ";
int HandledData = 0, Pass = 0;
while( HandledData < HaveData)
{
Values->Iterate( [&HandledData](const RefPtr<FragmentID>&Fid, const RefPtr<CreativeArrayBase>&CAB)
{
if (CAB->isUnderCreation())
return true;
if (RefPtr<MemBase>
myData = CAB->create())
{
Verbose(1) <<
"yes, have data for " <<
myData->getCacheInfoString();
HandledData++;
}
return true;
}
);
Verbose(1) << " --> Finished Pass #" << Pass << " <--- "
"have " << HandledData << " out of " << HaveData;
Pass++;
}
return 0;
}
int main()
Demonstrates minimal usage of the FiberLib Create Bundle, insert a time slice, and safe it to a file.
Definition 010-SimpleSave.cpp:13
An array reference class, which is a convenience class for reference pointers to multidimensional mem...
Definition ArrayRef.hpp:28
Convenience class that implements a pointer to a Bundle object but adds some useful member funtions t...
Definition Bundle.hpp:779
A multidimensional index that is automatically a lower-dimensional index via recursion.
Definition MultiIndex.hpp:449
A Representation is a set of Field objects, each of them accessed via some FieldID identifier.
Definition Representation.hpp:101
StrongPtr< Object, ObjectBase > RefPtr
Given a fragmented field of curvilinear coordinates, (3D array of coordinates), build a uniform Grid ...
Definition FAQ.dox:2
string to_string(const Eagle::FixedArray< ElementType, N > &A, const char *OpenBrace="{", const char *CloseBrace="}", const char *Separator=",")
Definition IndexListViaSelectionString.hpp:30