138 const std::shared_ptr<StructuredBlockForest> &blocks,
139 BlockDataID rho_0ID_, BlockDataID rho_1ID_,
double order_0,
140 double order_1,
double rate_coefficient,
double stoech_0,
double stoech_1)
144 auto createIdxVector = [](IBlock *
const, StructuredBlockStorage *
const) {
147 indexVectorID = blocks->addStructuredBlockData<
IndexVectors>(
149 "IndexField_ReactionKernelIndexed_2_double_precision_CUDA");
192 ConstBlockDataID flagFieldID, FlagUID boundaryFlagUID,
193 FlagUID domainFlagUID) {
194 for (
auto blockIt = blocks->begin(); blockIt != blocks->end(); ++blockIt)
195 fillFromFlagField<FlagField_T>(&*blockIt, flagFieldID, boundaryFlagUID,
201 FlagUID boundaryFlagUID, FlagUID domainFlagUID) {
207 auto *flagField =
block->getData<FlagField_T>(flagFieldID);
209 if (!(flagField->flagExists(boundaryFlagUID) and
210 flagField->flagExists(domainFlagUID)))
213 auto boundaryFlag = flagField->getFlag(boundaryFlagUID);
214 auto domainFlag = flagField->getFlag(domainFlagUID);
216 auto inner = flagField->xyzSize();
217 inner.expand(cell_idx_t(-1));
219 indexVectorAll.clear();
220 indexVectorInner.clear();
221 indexVectorOuter.clear();
223 auto flagWithGLayers = flagField->xyzSizeWithGhostLayer();
224 for (
auto it = flagField->beginWithGhostLayerXYZ(); it != flagField->end();
227 if (!isFlagSet(it, boundaryFlag))
229 if (flagWithGLayers.contains(it.x() + cell_idx_c(0),
230 it.y() + cell_idx_c(0),
231 it.z() + cell_idx_c(0)) &&
232 isFlagSet(it.neighbor(0, 0, 0, 0), domainFlag)) {
234 auto element =
IndexInfo(it.x(), it.y(), it.z(), 0);
236 indexVectorAll.emplace_back(element);
237 if (
inner.contains(it.x(), it.y(), it.z()))
238 indexVectorInner.emplace_back(element);
240 indexVectorOuter.emplace_back(element);