109 const std::shared_ptr<StructuredBlockForest> &blocks,
110 BlockDataID rho_0ID_, BlockDataID rho_1ID_, BlockDataID rho_2ID_,
111 BlockDataID rho_3ID_, BlockDataID rho_4ID_,
double order_0,
112 double order_1,
double order_2,
double order_3,
double order_4,
113 double rate_coefficient,
double stoech_0,
double stoech_1,
114 double stoech_2,
double stoech_3,
double stoech_4)
121 auto createIdxVector = [](IBlock *
const, StructuredBlockStorage *
const) {
124 indexVectorID = blocks->addStructuredBlockData<
IndexVectors>(
125 createIdxVector,
"IndexField_ReactionKernelIndexed_5_double_precision");
171 ConstBlockDataID flagFieldID, FlagUID boundaryFlagUID,
172 FlagUID domainFlagUID) {
173 for (
auto &
block : *blocks)
174 fillFromFlagField<FlagField_T>(&
block, flagFieldID, boundaryFlagUID,
180 FlagUID boundaryFlagUID, FlagUID domainFlagUID) {
186 auto *flagField =
block->getData<FlagField_T>(flagFieldID);
188 if (!(flagField->flagExists(boundaryFlagUID) and
189 flagField->flagExists(domainFlagUID)))
192 auto boundaryFlag = flagField->getFlag(boundaryFlagUID);
193 auto domainFlag = flagField->getFlag(domainFlagUID);
195 auto inner = flagField->xyzSize();
196 inner.expand(cell_idx_t(-1));
198 indexVectorAll.clear();
199 indexVectorInner.clear();
200 indexVectorOuter.clear();
202 auto flagWithGLayers = flagField->xyzSizeWithGhostLayer();
203 for (
auto it = flagField->beginWithGhostLayerXYZ(); it != flagField->end();
206 if (!isFlagSet(it, boundaryFlag))
208 if (flagWithGLayers.contains(it.x() + cell_idx_c(0),
209 it.y() + cell_idx_c(0),
210 it.z() + cell_idx_c(0)) &&
211 isFlagSet(it.neighbor(0, 0, 0, 0), domainFlag)) {
213 auto element =
IndexInfo(it.x(), it.y(), it.z(), 0);
215 indexVectorAll.emplace_back(element);
216 if (
inner.contains(it.x(), it.y(), it.z()))
217 indexVectorInner.emplace_back(element);
219 indexVectorOuter.emplace_back(element);