107 const std::shared_ptr<StructuredBlockForest> &blocks,
108 BlockDataID rho_0ID_, BlockDataID rho_1ID_, BlockDataID rho_2ID_,
109 BlockDataID rho_3ID_, BlockDataID rho_4ID_,
float order_0,
float order_1,
110 float order_2,
float order_3,
float order_4,
float rate_coefficient,
111 float stoech_0,
float stoech_1,
float stoech_2,
float stoech_3,
119 auto createIdxVector = [](IBlock *
const, StructuredBlockStorage *
const) {
122 indexVectorID = blocks->addStructuredBlockData<
IndexVectors>(
123 createIdxVector,
"IndexField_ReactionKernelIndexed_5_single_precision");
169 ConstBlockDataID flagFieldID, FlagUID boundaryFlagUID,
170 FlagUID domainFlagUID) {
171 for (
auto blockIt = blocks->begin(); blockIt != blocks->end(); ++blockIt)
172 fillFromFlagField<FlagField_T>(&*blockIt, flagFieldID, boundaryFlagUID,
178 FlagUID boundaryFlagUID, FlagUID domainFlagUID) {
184 auto *flagField =
block->getData<FlagField_T>(flagFieldID);
186 if (!(flagField->flagExists(boundaryFlagUID) and
187 flagField->flagExists(domainFlagUID)))
190 auto boundaryFlag = flagField->getFlag(boundaryFlagUID);
191 auto domainFlag = flagField->getFlag(domainFlagUID);
193 auto inner = flagField->xyzSize();
194 inner.expand(cell_idx_t(-1));
196 indexVectorAll.clear();
197 indexVectorInner.clear();
198 indexVectorOuter.clear();
200 auto flagWithGLayers = flagField->xyzSizeWithGhostLayer();
201 for (
auto it = flagField->beginWithGhostLayerXYZ(); it != flagField->end();
204 if (!isFlagSet(it, boundaryFlag))
206 if (flagWithGLayers.contains(it.x() + cell_idx_c(0),
207 it.y() + cell_idx_c(0),
208 it.z() + cell_idx_c(0)) &&
209 isFlagSet(it.neighbor(0, 0, 0, 0), domainFlag)) {
211 auto element =
IndexInfo(it.x(), it.y(), it.z(), 0);
213 indexVectorAll.emplace_back(element);
214 if (
inner.contains(it.x(), it.y(), it.z()))
215 indexVectorInner.emplace_back(element);
217 indexVectorOuter.emplace_back(element);