42 auto get_row_indices = [&]() ->
const VectorInt & {
43 if (
auto e_ptr = row_data.getFieldEntities()[0]) {
44 if (
auto stored_data_ptr =
45 e_ptr->getSharedStoragePtr<EssentialBcStorage>()) {
46 return stored_data_ptr->entityIndices;
49 return row_data.getIndices();
52 const auto &row_ind = get_row_indices();
53 const auto &col_ind = col_data.getIndices();
55 const auto nb_rows = row_ind.size();
56 const auto nb_cols = col_ind.size();
59 if (mat.size1() != nb_rows) {
61 "Wrong mat size %d != %d", mat.size1(), nb_rows);
63 if (mat.size2() != nb_cols) {
65 "Wrong mat size %d != %d", mat.size2(), nb_cols);
79 auto get_uid = [](
auto &data) {
80 if (data.getFieldEntities().size() == 1) {
82 return data.getFieldEntities()[0]->getLocalUniqueId();
91 auto &uid0 = data.getFieldEntities()[0]->getLocalUniqueId();
97 for (
auto i = 1;
i < data.getFieldEntities().size(); ++
i) {
104 data.getFieldEntities()[
i]->getLocalUniqueId())
118 auto uid_row = get_uid(row_data);
119 auto uid_col = get_uid(col_data);
122 auto get_storage = [&p]() {
return const_cast<SchurL2Mats &
>(*p.first); };
126 auto asmb = [&](
auto &sm) {
127 sm.resize(nb_rows, nb_cols,
false);
131 asmb(get_storage().
getMat());
133 auto add_indices = [](
auto &storage,
auto &ind) {
134 storage.resize(ind.size(),
false);
135 noalias(storage) = ind;
138 add_indices(get_storage().
getRowInd(), row_ind);
139 add_indices(get_storage().
getColInd(), col_ind);
143 auto asmb = [&](
auto &sm) {
147 if (sm.size1() != nb_rows) {
149 "Wrong mat or storage size %d != %d", sm.size1(), nb_rows);
151 if (sm.size2() != nb_cols) {
153 "Wrong mat or storage size %d != %d", sm.size2(), nb_cols);
166 "Assembly type not implemented");