126 {
127 std::size_t iElement = getElementCount();
128 setElementCount(iElement+1);
129 const std::size_t nElements = getElementCount();
130
131 PARAMETERS::fields_t::for_each([&](auto field) {
132 using field_t =
typename decltype(
field)::type;
133 if (_elementsD->template provides<Array<field_t>>()) {
134 _elementsD->template get<Array<field_t>>().
set(
135 iElement, element.template get<field_t>());
136 }
137 });
138
139 if constexpr (PARAMETERS::fields_t::template contains<fields::fsi::ELEMENT_LOWER>()) {
140 if constexpr (PARAMETERS::fields_t::template contains<fields::fsi::ELEMENT_UPPER>()) {
141 _elementsD->template get<Array<fields::fsi::ELEMENT_UPPER>>().
set(
142 iElement, element.template get<fields::fsi::ELEMENT_UPPER>());
143 } else {
144 auto upper = element.template get<fields::fsi::ELEMENT_LOWER>()
145 + element.template get<fields::fsi::ELEMENT_REFERENCE_DELTA_X>()
146 * element.template get<fields::fsi::ELEMENT_REFERENCE_EXTENT>();
147 _elementsD->template get<Array<fields::fsi::ELEMENT_UPPER>>().
set(iElement, upper);
148 }
149 }
150
151 if constexpr (PARAMETERS::fields_t::template contains<fields::fsi::ELEMENT_REFERENCE_DELTA_X>()) {
152 _elementsD->template get<Array<fields::fsi::ELEMENT_REFERENCE_DELTA_X>>().
set(
153 iElement, element.template get<fields::fsi::ELEMENT_REFERENCE_DELTA_X>());
154 _elementsD->template get<Array<fields::fsi::ELEMENT_REFERENCE_POROSITY>>().
set(
155 iElement, element.template get<fields::fsi::ELEMENT_REFERENCE_POROSITY>());
156 auto extent = element.template get<fields::fsi::ELEMENT_REFERENCE_EXTENT>();
158 if constexpr (DESCRIPTOR::d == 3) {
159 projection = {extent[1]*extent[2], extent[2], 1};
160 } else {
161 projection = {extent[1], 1};
162 }
163 _elementsD->template get<Array<fields::fsi::ELEMENT_REFERENCE_PROJECTION>>().
set(iElement, projection);
164 }
165
167 _sLattice.template setParameter<fields::fsi::ELEMENTS_COUNT>(nElements);
168 }
void set(BlockLattice< T, DESCRIPTOR > &block, BlockIndicatorF< T, DESCRIPTOR::d > &boundaryI, BlockIndicatorF< T, DESCRIPTOR::d > &fluidI, BlockIndicatorF< T, DESCRIPTOR::d > &outsideI)
Vector< typename FIELD::template value_type< T >, DESCRIPTOR::template size< FIELD >() > FieldD
Vector storing a single field instance.