503{
505 int num_int_pt_per_elem =
element_->NumIntegrationPointsPerElement();
506 int num_data_per_element = static_cast<int>(elem_data_labels.size());
507 int num_data_per_int_pt = num_data_per_element / num_int_pt_per_elem;
510
511
512
514 for (int i_ipt = 0; i_ipt < num_int_pt_per_elem; i_ipt++) {
515 for (int i_component = 0; i_component < full_tensor_size; i_component++) {
517 for (unsigned int i_label = 0; i_label < num_data_per_element; i_label++) {
518 if (elem_data_labels.at(i_label) == def_grad_label) {
def_grad_offset_.push_back(i_label); }
519 }
520 }
521 }
522
524 "\nError in Block::ComputeInternalForce(), failed to index def_grad "
525 "into global data.\n");
526
527
529 for (int i_ipt = 0; i_ipt < num_int_pt_per_elem; i_ipt++) {
530 for (int i_component = 0; i_component < sym_tensor_size; i_component++) {
532 for (unsigned int i_label = 0; i_label < num_data_per_element; i_label++) {
533 if (elem_data_labels.at(i_label) == stress_label) {
stress_offset_.push_back(i_label); }
534 }
535 }
536 }
537
539 "\nError in Block::ComputeInternalForce(), failed to index stress into "
540 "global data.\n");
541
542
543 int num_state_data =
material_->NumStateVariables();
544 std::vector<std::string> state_data_labels(num_state_data);
545 for (int i = 0; i < num_state_data; ++i) {
547 material_->GetStateVariableLabel(i, label);
548 state_data_labels[i] = label;
549 }
551 for (int i_ipt = 0; i_ipt < num_int_pt_per_elem; i_ipt++) {
552 for (int i_state_data = 0; i_state_data < num_state_data; i_state_data++) {
553 std::string raw_label = state_data_labels.at(i_state_data);
555 for (unsigned int i_label = 0; i_label < num_data_per_element; i_label++) {
556 if (elem_data_labels.at(i_label) == state_data_label) {
state_data_offset_.push_back(i_label); }
557 }
558 }
559 }
560
562 "\nError in Block::ComputeInternalForce(), failed to index state data "
563 "into global data.\n");
564
565
566
567 std::vector<std::string> vol_ave_labels;
569 for (unsigned int i_derived_data = 0; i_derived_data < derived_elem_data_labels.size(); i_derived_data++) {
570 std::string const& label = derived_elem_data_labels[i_derived_data];
571 if (label == "volume") {
573 } else {
575 vol_ave_labels.push_back(label);
576 }
577 }
578 unsigned int num_vol_ave_data = vol_ave_labels.size();
580
581 for (unsigned int i_vol_ave_label = 0; i_vol_ave_label < num_vol_ave_data; ++i_vol_ave_label) {
582 std::string const& vol_ave_label = vol_ave_labels[i_vol_ave_label];
583 for (unsigned int i_elem_data_label = 0; i_elem_data_label < num_data_per_int_pt; ++i_elem_data_label) {
585 if (vol_ave_label == elem_data_label) {
586 for (int i_int_pt = 0; i_int_pt < num_int_pt_per_elem; ++i_int_pt) {
588 i_elem_data_label + i_int_pt * num_data_per_int_pt;
589 }
590 }
591 }
592 }
593}
static const int MAX_MAT_MODEL_STR_LEN
Definition nimble_material.h:65
std::string RemoveIntegrationPointPrefix(std::string label)
Definition nimble_data_utils.cc:99
@ SCALAR
Definition nimble_data_utils.h:88
@ SYMMETRIC_TENSOR
Definition nimble_data_utils.h:90
@ FULL_TENSOR
Definition nimble_data_utils.h:91
std::string GetComponentLabel(std::string label, Length length, int dim, int component_index, int ipt)
Definition nimble_data_utils.cc:210
#define NIMBLE_ASSERT(...)
Definition nimble_macros.h:85