117{
118
119 std::vector<std::string> requested_labels;
120 std::stringstream ss(output_command_string);
121 std::string entry;
122 while (std::getline(ss, entry, ' ')) { requested_labels.push_back(entry); }
123
125 for (auto const& requested_label : requested_labels) {
126 for (auto& node_label : scalar_node_data_labels) {
127 if (requested_label == node_label) {
128 int field_id = model_data.
GetFieldId(node_label);
130 node_data_labels_.push_back(node_label);
131 node_data_field_ids_.push_back(field_id);
133 node_data_components_.push_back(0);
134 node_data_.push_back(std::vector<double>(num_nodes, 0.0));
135 }
136 }
137 }
138
140 for (auto const& requested_label : requested_labels) {
141 for (auto& node_label : vector_node_data_labels) {
142 if (requested_label == node_label) {
143 int field_id = model_data.
GetFieldId(node_label);
145
146 node_data_labels_.push_back(node_label + "_x");
147 node_data_field_ids_.push_back(field_id);
149 node_data_components_.push_back(K_X);
150 node_data_.push_back(std::vector<double>(num_nodes, 0.0));
151
152 node_data_labels_.push_back(node_label + "_y");
153 node_data_field_ids_.push_back(field_id);
155 node_data_components_.push_back(K_Y);
156 node_data_.push_back(std::vector<double>(num_nodes, 0.0));
157
158 node_data_labels_.push_back(node_label + "_z");
159 node_data_field_ids_.push_back(field_id);
161 node_data_components_.push_back(K_Z);
162 node_data_.push_back(std::vector<double>(num_nodes, 0.0));
163 }
164 }
165 }
166
167 std::vector<int> block_ids = model_data.
GetBlockIds();
168 for (auto const& block_id : block_ids) {
169 elem_data_labels_[block_id] = std::vector<std::string>();
170 elem_data_iptdata_field_ids_[block_id] = std::vector<int>();
171 elem_data_edata_field_ids_[block_id] = std::vector<int>();
172 elem_data_types_[block_id] = std::vector<FieldType>();
173 elem_data_integration_point_index_[block_id] = std::vector<int>();
174 elem_data_components_[block_id] = std::vector<int>();
175 elem_data_[block_id] = std::vector<std::vector<double>>();
176 sym_tensor_field_ids_requiring_volume_average_[block_id] = std::vector<int>();
177 full_tensor_field_ids_requiring_volume_average_[block_id] = std::vector<int>();
178 }
179
180 for (unsigned int i_block = 0; i_block < block_ids.size(); ++i_block) {
181 int block_id = block_ids[i_block];
182
183
184 for (auto const& requested_label : requested_labels) {
185 if (requested_label == "volume") {
186 output_element_volume_ = true;
187 volume_field_id_ = model_data.
GetFieldId(requested_label);
189 elem_data_labels_[block_id].push_back(requested_label);
190 elem_data_iptdata_field_ids_[block_id].push_back(volume_field_id_);
191 elem_data_edata_field_ids_[block_id].push_back(volume_field_id_);
193 elem_data_integration_point_index_[block_id].push_back(-1);
194 elem_data_components_[block_id].push_back(0);
195 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
196 }
197 }
198
199 std::vector<std::string> symmetric_tensor_integration_point_data_labels =
201 for (auto const& requested_label : requested_labels) {
202 for (auto& ipt_label : symmetric_tensor_integration_point_data_labels) {
203 std::string field_label = requested_label;
204 bool single_integration_point = false;
205 bool require_volume_average = true;
206 int integration_point_index = -1;
207 if (requested_label.substr(0, 3) == "ipt") {
208 field_label = requested_label.substr(6, requested_label.size() - 6);
209 single_integration_point = true;
210 require_volume_average = false;
211 integration_point_index = atoi(requested_label.substr(4, 2).c_str()) - 1;
212 }
213 if (field_label == ipt_label) {
214 int iptdata_field_id = model_data.
GetFieldId(ipt_label);
215 int edata_field_id = iptdata_field_id;
216 if (require_volume_average) {
217 sym_tensor_field_ids_requiring_volume_average_[block_id].push_back(iptdata_field_id);
218 }
219 int num_elem =
221 if (single_integration_point) {
222 edata_field_id =
224 }
225
226 elem_data_labels_[block_id].push_back(requested_label + "_xx");
227 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
228 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
230 elem_data_components_[block_id].push_back(K_S_XX);
231 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
232 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
233
234 elem_data_labels_[block_id].push_back(requested_label + "_yy");
235 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
236 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
238 elem_data_components_[block_id].push_back(K_S_YY);
239 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
240 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
241
242 elem_data_labels_[block_id].push_back(requested_label + "_zz");
243 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
244 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
246 elem_data_components_[block_id].push_back(K_S_ZZ);
247 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
248 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
249
250 elem_data_labels_[block_id].push_back(requested_label + "_xy");
251 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
252 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
254 elem_data_components_[block_id].push_back(K_S_XY);
255 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
256 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
257
258 elem_data_labels_[block_id].push_back(requested_label + "_yz");
259 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
260 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
262 elem_data_components_[block_id].push_back(K_S_YZ);
263 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
264 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
265
266 elem_data_labels_[block_id].push_back(requested_label + "_zx");
267 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
268 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
270 elem_data_components_[block_id].push_back(K_S_ZX);
271 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
272 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
273 }
274 }
275 }
276
277 std::vector<std::string> full_tensor_integration_point_data_labels =
279 for (auto const& requested_label : requested_labels) {
280
281
282 std::string field_label = requested_label;
283 bool single_integration_point = false;
284 bool require_volume_average = true;
285 int integration_point_index = -1;
286 if (requested_label.substr(0, 3) == "ipt") {
287 field_label = requested_label.substr(6, requested_label.size() - 6);
288 single_integration_point = true;
289 require_volume_average = false;
290 integration_point_index = atoi(requested_label.substr(4, 2).c_str()) - 1;
291 }
292 for (auto& ipt_label : full_tensor_integration_point_data_labels) {
293 if (field_label == ipt_label) {
294 int iptdata_field_id = model_data.
GetFieldId(ipt_label);
295 int edata_field_id = iptdata_field_id;
296 if (require_volume_average) {
297 full_tensor_field_ids_requiring_volume_average_[block_id].push_back(iptdata_field_id);
298 }
299 int num_elem =
301 .extent(0);
302 if (single_integration_point) {
304 }
305
306 elem_data_labels_[block_id].push_back(requested_label + "_xx");
307 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
308 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
310 elem_data_components_[block_id].push_back(K_F_XX);
311 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
312 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
313
314 elem_data_labels_[block_id].push_back(requested_label + "_yy");
315 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
316 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
318 elem_data_components_[block_id].push_back(K_F_YY);
319 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
320 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
321
322 elem_data_labels_[block_id].push_back(requested_label + "_zz");
323 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
324 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
326 elem_data_components_[block_id].push_back(K_F_ZZ);
327 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
328 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
329
330 elem_data_labels_[block_id].push_back(requested_label + "_xy");
331 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
332 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
334 elem_data_components_[block_id].push_back(K_F_XY);
335 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
336 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
337
338 elem_data_labels_[block_id].push_back(requested_label + "_yz");
339 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
340 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
342 elem_data_components_[block_id].push_back(K_F_YZ);
343 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
344 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
345
346 elem_data_labels_[block_id].push_back(requested_label + "_zx");
347 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
348 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
350 elem_data_components_[block_id].push_back(K_F_ZX);
351 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
352 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
353
354 elem_data_labels_[block_id].push_back(requested_label + "_yx");
355 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
356 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
358 elem_data_components_[block_id].push_back(K_F_YX);
359 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
360 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
361
362 elem_data_labels_[block_id].push_back(requested_label + "_zy");
363 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
364 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
366 elem_data_components_[block_id].push_back(K_F_ZY);
367 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
368 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
369
370 elem_data_labels_[block_id].push_back(requested_label + "_xz");
371 elem_data_iptdata_field_ids_[block_id].push_back(iptdata_field_id);
372 elem_data_edata_field_ids_[block_id].push_back(edata_field_id);
374 elem_data_components_[block_id].push_back(K_F_XZ);
375 elem_data_integration_point_index_[block_id].push_back(integration_point_index);
376 elem_data_[block_id].push_back(std::vector<double>(num_elem, 0.0));
377 }
378 }
379 }
380 }
381}
int AllocateElementData(int block_id, nimble::Length length, std::string label, int num_objects)
Definition nimble_kokkos_model_data.cc:645
std::vector< std::string > GetVectorNodeDataLabels() const
Definition nimble_kokkos_model_data.cc:1380
int GetFieldId(const std::string &field_label) const override
Returns the field ID for a specific label.
Definition nimble_kokkos_model_data.h:94
std::vector< std::string > GetFullTensorIntegrationPointDataLabels(int block_id) const
Definition nimble_kokkos_model_data.cc:1424
std::vector< std::string > GetScalarNodeDataLabels() const
Definition nimble_kokkos_model_data.cc:1361
std::vector< std::string > GetSymmetricTensorIntegrationPointDataLabels(int block_id) const
Definition nimble_kokkos_model_data.cc:1399
@ SYMMETRIC_TENSOR
Definition nimble_data_utils.h:90
@ FULL_TENSOR
Definition nimble_data_utils.h:91