4646#include <map>
4747#include <sstream>
4848
49+ namespace
50+ {
51+ using namespace libMesh ;
52+
53+ const std ::vector < Real > & bex_constraint_vec (std ::size_t i ,
54+ const ExodusII_IO_Helper & helper )
55+ {
56+ std ::size_t vec_offset = 0 ;
57+ for (auto block_num : index_range (helper .bex_dense_constraint_vecs ))
58+ {
59+ const auto & vecblock = helper .bex_dense_constraint_vecs [block_num ];
60+ libmesh_assert_greater_equal (i , vec_offset );
61+ if (i - vec_offset < vecblock .size ())
62+ return vecblock [i - vec_offset ];
63+
64+ vec_offset += vecblock .size ();
65+ }
66+
67+ libmesh_error_msg ("Requested BEX coefficient vector " << i << " not found" );
68+ }
69+ }
70+
4971namespace libMesh
5072{
5173
@@ -456,9 +478,7 @@ void ExodusII_IO::read (const std::string & fname)
456478 const auto & my_constraint_rows = exio_helper -> bex_cv_conn [elem_num ];
457479 const unsigned long elem_coef_vec_index =
458480 my_constraint_rows [spline_node_index ] - 1 ; // Exodus isn't 0-based
459- const auto & my_vec =
460- libmesh_vector_at (exio_helper -> bex_dense_constraint_vecs [i ],
461- elem_coef_vec_index );
481+ const auto & my_vec = bex_constraint_vec (elem_coef_vec_index , * exio_helper );
462482 for (auto elem_node_index :
463483 make_range (elem -> n_nodes ()))
464484 {
@@ -484,9 +504,11 @@ void ExodusII_IO::read (const std::string & fname)
484504 const unsigned long elem_coef_vec_index =
485505 my_constraint_rows [spline_node_index ] - 1 ; // Exodus isn't 0-based
486506
507+ auto & coef_vec =
508+ bex_constraint_vec (elem_coef_vec_index , * exio_helper );
509+
487510 const Real coef =
488- libmesh_vector_at (exio_helper -> bex_dense_constraint_vecs [i ],
489- elem_coef_vec_index )[elem_node_index ];
511+ libmesh_vector_at (coef_vec , elem_node_index );
490512
491513 const int gi = (elem_num )* exio_helper -> num_nodes_per_elem +
492514 spline_node_index ;
@@ -522,9 +544,10 @@ void ExodusII_IO::read (const std::string & fname)
522544
523545 const Node & spline_node = mesh .node_ref (libmesh_node_id );
524546
547+ auto & coef_vec =
548+ bex_constraint_vec (elem_coef_vec_index , * exio_helper );
525549 const Real coef =
526- libmesh_vector_at (exio_helper -> bex_dense_constraint_vecs [i ],
527- elem_coef_vec_index )[elem_node_index ];
550+ libmesh_vector_at (coef_vec , elem_node_index );
528551
529552 // We don't need to store 0 entries;
530553 // constraint_rows is a sparse structure.
0 commit comments