35template <
int N,
typename T>
37template <
int N,
typename T>
73 namespace TableBaseAccessors
82 template <
int N,
typename T,
bool Constness>
91 template <
int N,
typename T>
109 template <
int N,
typename T>
159 template <
int N,
typename T,
bool C,
unsigned int P>
203 <<
"Index " << N - P + 1 <<
"has a value of " << arg1
204 <<
" but needs to be in the range [" << arg2 <<
',' << arg3
220 template <
int N1,
typename T1>
221 friend class ::Table;
222 template <
int N1,
typename T1,
bool C1,
unsigned int P1>
224 friend class ::Table<N, T>;
225 friend class Accessor<N, T, C, P + 1>;
237 template <
int N,
typename T,
bool C>
324 template <
int N1,
typename T1>
325 friend class ::Table;
326 template <
int N1,
typename T1,
bool C1,
unsigned int P1>
328 friend class ::Table<2, T>;
439template <
int N,
typename T>
467 template <
typename InputIterator>
469 InputIterator entries,
470 const bool C_style_indexing =
true);
481 template <
typename T2>
512 template <
typename T2>
546 const bool omit_default_initialization =
false);
558 size(
const unsigned int i)
const;
616 template <
typename InputIterator>
618 fill(InputIterator entries,
const bool C_style_indexing =
true);
728 const unsigned int root_process);
757 template <
class Archive>
803 template <
int,
typename>
820template <
int N,
typename T>
888 template <
typename InputIterator>
890 InputIterator entries,
891 const bool C_style_indexing =
true);
956 template <
typename TableType,
bool Constness, Storage storage_order>
963 template <
typename TableType,
bool Constness, Storage storage_order>
982 template <
typename TableType,
bool Constness, Storage storage_order>
990 std::conditional_t<Constness, const TableType *, TableType *>;
1026 template <
bool OtherConstness>
1081 friend class AccessorBase<TableType, true, storage_order>;
1085 Iterator<TableType, Constness, storage_order>,
1086 Accessor<TableType, Constness, storage_order>>;
1093 template <
typename TableType, Storage storage_order>
1113 using AccessorBase<TableType,
true, storage_order>::AccessorBase;
1120 template <
typename TableType, Storage storage_order>
1140 using AccessorBase<TableType,
false, storage_order>::AccessorBase;
1160 using AccessorBase<TableType,
false, storage_order>::value;
1187 template <
typename TableType,
bool Constness, Storage storage_order>
1190 Accessor<TableType, Constness, storage_order>>
1202 std::conditional_t<Constness, const TableType *, TableType *>;
1230 const std::ptrdiff_t linear_index);
1249template <
typename T>
1334 template <
typename InputIterator>
1337 InputIterator entries,
1338 const bool C_style_indexing =
true);
1348 const bool omit_default_initialization =
false);
1465 AccessorBase<Table<2, T>, true, MatrixTableIterators::Storage::row_major>;
1467 AccessorBase<Table<2, T>, false, MatrixTableIterators::Storage::row_major>;
1472 Accessor<Table<2, T>, false, MatrixTableIterators::Storage::row_major>;
1486template <typename T>
1545 template <
typename InputIterator>
1549 InputIterator entries,
1550 const bool C_style_indexing =
true);
1560 const bool omit_default_initialization =
false);
1620template <
typename T>
1704template <
typename T>
1791template <
typename T>
1879template <
typename T>
1973template <
typename T>
2032 const bool omit_default_initialization =
false);
2130 MatrixTableIterators::Storage::column_major>;
2137 MatrixTableIterators::Storage::column_major>;
2146template <int N, typename T>
2154template <
int N,
typename T>
2155template <
typename InputIterator>
2157 InputIterator entries,
2158 const bool C_style_indexing)
2161 fill(entries, C_style_indexing);
2166template <
int N,
typename T>
2170 , table_size(src.table_size)
2175template <
int N,
typename T>
2176template <
typename T2>
2186template <
int N,
typename T>
2197template <
int N,
typename T>
2198template <
class Archive>
2211 namespace TableBaseAccessors
2213 template <
int N,
typename T,
bool C,
unsigned int P>
2215 const iterator
data)
2222 template <
int N,
typename T,
bool C,
unsigned int P>
2223 inline Accessor<N, T, C, P>::Accessor(
const Accessor &a)
2230 template <
int N,
typename T,
bool C,
unsigned int P>
2231 inline Accessor<N, T,
C, P - 1>
2232 Accessor<N, T, C, P>::operator[](
const size_type i)
const
2240 return Accessor<N, T,
C, P - 1>(table,
data);
2246 size_type subobject_size = table.size()[N - 1];
2247 for (
int p = P - 1; p > 1; --p)
2248 subobject_size *= table.size()[N - p];
2249 const iterator new_data =
data + i * subobject_size;
2250 return Accessor<N, T,
C, P - 1>(table, new_data);
2256 template <
int N,
typename T,
bool C>
2257 inline Accessor<N, T, C, 1>::Accessor(
const TableType &table,
2258 const iterator
data)
2265 template <
int N,
typename T,
bool C>
2266 inline Accessor<N, T, C, 1>::Accessor(
const Accessor &a)
2273 template <
int N,
typename T,
bool C>
2274 inline typename Accessor<N, T, C, 1>::reference
2275 Accessor<N, T, C, 1>::operator[](
const size_type i)
const
2283 template <
int N,
typename T,
bool C>
2284 inline typename Accessor<N, T, C, 1>::size_type
2285 Accessor<N, T, C, 1>::size()
const
2287 return table.size()[N - 1];
2292 template <
int N,
typename T,
bool C>
2293 inline typename Accessor<N, T, C, 1>::iterator
2294 Accessor<N, T, C, 1>::begin()
const
2301 template <
int N,
typename T,
bool C>
2302 inline typename Accessor<N, T, C, 1>::iterator
2303 Accessor<N, T, C, 1>::end()
const
2305 return data + table.size()[N - 1];
2312template <
int N,
typename T>
2325template <
int N,
typename T>
2326template <
typename T2>
2332 std::copy(m.
values.begin(),
2333 m.
values.begin() + n_elements(),
2341template <
int N,
typename T>
2356template <
int N,
typename T>
2360 return (values == T2.
values);
2365template <
int N,
typename T>
2370 if (n_elements() != 0)
2376template <
int N,
typename T>
2380 if (n_elements() != 0)
2386template <
int N,
typename T>
2389 const unsigned int root_process)
2393 values.replicate_across_communicator(communicator, root_process);
2401template <
int N,
typename T>
2404 const bool omit_default_initialization)
2406 table_size = new_sizes;
2408 const size_type new_size = n_elements();
2429 if (!omit_default_initialization)
2435 values.resize_fast(new_size);
2440 values.resize_fast(new_size);
2445template <
int N,
typename T>
2455template <
int N,
typename T>
2464template <
int N,
typename T>
2469 return table_size[i];
2474template <
int N,
typename T>
2479 for (
unsigned int n = 0; n < N; ++n)
2486template <
int N,
typename T>
2490 return (n_elements() == 0);
2497 namespace TableImplementation
2499 template <
typename InputIterator,
typename T>
2504 for (size_type i = 0; i < table.
size()[0]; ++i)
2509 template <
typename InputIterator,
typename T>
2514 for (size_type j = 0; j < table.
size()[1]; ++j)
2515 for (size_type i = 0; i < table.
size()[0]; ++i)
2520 template <
typename InputIterator,
typename T>
2525 for (size_type k = 0; k < table.
size()[2]; ++k)
2526 for (size_type j = 0; j < table.
size()[1]; ++j)
2527 for (size_type i = 0; i < table.
size()[0]; ++i)
2532 template <
typename InputIterator,
typename T,
int N>
2542template <
int N,
typename T>
2543template <
typename InputIterator>
2549 if (C_style_indexing)
2555 internal::TableImplementation::fill_Fortran_style(entries, *
this);
2560template <
int N,
typename T>
2565 std::swap(table_size, v.table_size);
2570template <
int N,
typename T>
2579template <
int N,
typename T>
2593 return size_type(indices[0]) * table_size[1] + indices[1];
2595 return ((
size_type(indices[0]) * table_size[1] + indices[1]) *
2600 unsigned int s = indices[0];
2601 for (
unsigned int n = 1; n < N; ++n)
2602 s = s * table_size[n] + indices[n];
2610template <
int N,
typename T>
2614 for (
unsigned int n = 0; n < N; ++n)
2621template <
int N,
typename T>
2625 for (
unsigned int n = 0; n < N; ++n)
2632template <
int N,
typename T>
2636 return values[position(indices)];
2641template <
int N,
typename T>
2646 return values[position(indices)];
2651template <
typename T>
2658template <
typename T>
2659template <
typename InputIterator>
2661 InputIterator entries,
2662 const bool C_style_indexing)
2668template <
typename T>
2678template <
typename T>
2688template <
typename T>
2698template <
typename T>
2711template <
typename T>
2718template <
typename T>
2719template <
typename InputIterator>
2721 const size_type size2,
2722 InputIterator entries,
2723 const bool C_style_indexing)
2729template <
typename T>
2732 const size_type size2,
2733 const bool omit_default_initialization)
2736 omit_default_initialization);
2741template <
typename T>
2742inline ::internal::TableBaseAccessors::Accessor<2, T, true, 1>
2746 return ::internal::TableBaseAccessors::Accessor<2, T, true, 1>(
2752template <
typename T>
2753inline ::internal::TableBaseAccessors::Accessor<2, T, false, 1>
2757 return ::internal::TableBaseAccessors::Accessor<2, T, false, 1>(
2763template <
typename T>
2774template <
typename T>
2785template <
typename T>
2794template <
typename T>
2803template <
typename T>
2807 return this->table_size[0];
2812template <
typename T>
2816 return this->table_size[1];
2821template <
typename T>
2830template <
typename T>
2839template <
typename T>
2848template <
typename T>
2864 template <
typename TableType, Storage storage_order>
2865 inline std::ptrdiff_t
2866 get_row_index(
const std::ptrdiff_t linear_index,
2867 const TableType *
const container)
2869 switch (storage_order)
2871 case Storage::row_major:
2872 return linear_index / container->n_cols();
2873 case Storage::column_major:
2874 return linear_index % container->n_rows();
2883 template <
typename TableType, Storage storage_order>
2884 inline std::ptrdiff_t
2885 get_column_index(
const std::ptrdiff_t linear_index,
2886 const TableType *
const container)
2888 switch (storage_order)
2890 case Storage::row_major:
2891 return linear_index % container->n_cols();
2892 case Storage::column_major:
2893 return linear_index / container->n_rows();
2903 template <
typename TableType,
bool Constness, Storage storage_order>
2905 : container(nullptr)
2906 , linear_index(
std::numeric_limits<decltype(linear_index)>::
max())
2911 template <
typename TableType,
bool Constness, Storage storage_order>
2912 inline AccessorBase<TableType, Constness, storage_order>::AccessorBase(
2913 const container_pointer_type table)
2920 template <
typename TableType,
bool Constness, Storage storage_order>
2921 inline AccessorBase<TableType, Constness, storage_order>::AccessorBase(
2922 const AccessorBase<TableType, false, storage_order> &a)
2923 : container(a.container)
2924 , linear_index(a.linear_index)
2929 template <
typename TableType,
bool Constness, Storage storage_order>
2930 inline AccessorBase<TableType, Constness, storage_order>::AccessorBase(
2931 const container_pointer_type table,
2932 const std::ptrdiff_t index)
2934 , linear_index(
index)
2936 Assert(0 <= linear_index &&
2937 std::size_t(linear_index) < container->values.size() + 1,
2938 ExcMessage(
"The current iterator points outside of the table and is "
2939 "not the end iterator."));
2944 template <
typename TableType,
bool Constness, Storage storage_order>
2945 inline const typename AccessorBase<TableType, Constness, storage_order>::
2947 AccessorBase<TableType, Constness, storage_order>::value()
const
2949 assert_valid_linear_index();
2950 return this->container->values[linear_index];
2955 template <
typename TableType,
bool Constness, Storage storage_order>
2956 inline AccessorBase<TableType, Constness, storage_order>::
2957 operator
const value_type &()
const
2959 assert_valid_linear_index();
2960 return this->container->values[linear_index];
2965 template <
typename TableType,
bool Constness, Storage storage_order>
2966 inline typename AccessorBase<TableType, Constness, storage_order>::size_type
2967 AccessorBase<TableType, Constness, storage_order>::row()
const
2969 assert_valid_linear_index();
2970 return static_cast<std::size_t
>(
2971 internal::get_row_index<TableType, storage_order>(linear_index,
2977 template <
typename TableType,
bool Constness, Storage storage_order>
2978 inline typename AccessorBase<TableType, Constness, storage_order>::size_type
2979 AccessorBase<TableType, Constness, storage_order>::column()
const
2981 assert_valid_linear_index();
2982 return static_cast<std::size_t
>(
2983 internal::get_column_index<TableType, storage_order>(linear_index,
2989 template <
typename TableType,
bool Constness, Storage storage_order>
2991 AccessorBase<TableType, Constness, storage_order>::assert_valid_linear_index()
2995 Assert(container !=
nullptr,
2996 ExcMessage(
"This accessor has been default-constructed and does not "
2997 "have a corresponding table."));
2998 Assert(!container->empty(),
2999 ExcMessage(
"An empty table has no rows or columns."));
3000 Assert(0 <= linear_index &&
3001 std::size_t(linear_index) < container->values.size(),
3002 ExcMessage(
"The current iterator points outside of the table."));
3003 const std::ptrdiff_t row_n =
3004 internal::get_row_index<TableType, storage_order>(linear_index,
3006 const std::ptrdiff_t column_n =
3007 internal::get_column_index<TableType, storage_order>(linear_index,
3009 Assert(0 <= column_n && std::size_t(column_n) < container->n_cols(),
3010 ExcMessage(
"The current iterator points outside the table."));
3011 Assert(0 <= row_n && std::size_t(row_n) < container->n_rows(),
3012 ExcMessage(
"The current iterator points outside the table."));
3018 template <
typename TableType, Storage storage_order>
3019 inline const Accessor<TableType, false, storage_order> &
3020 Accessor<TableType, false, storage_order>::operator=(
3021 const typename Accessor<TableType, false, storage_order>::value_type &t)
3024 this->assert_valid_linear_index();
3025 this->container->values[this->linear_index] = t;
3031 template <
typename TableType, Storage storage_order>
3032 inline const Accessor<TableType, false, storage_order> &
3033 Accessor<TableType, false, storage_order>::operator=(
3034 typename Accessor<TableType, false, storage_order>::value_type &&t)
const
3036 this->assert_valid_linear_index();
3037 this->container->values[this->linear_index] = t;
3043 template <
typename TableType, Storage storage_order>
3044 inline typename Accessor<TableType, false, storage_order>::value_type &
3045 Accessor<TableType, false, storage_order>::value()
const
3047 this->assert_valid_linear_index();
3048 return this->container->values[this->linear_index];
3053 template <
typename TableType, Storage storage_order>
3054 inline Accessor<TableType, false, storage_order>::operator value_type &()
3056 this->assert_valid_linear_index();
3057 return this->container->values[this->linear_index];
3062 template <
typename TableType,
bool Constness, Storage storage_order>
3063 inline Iterator<TableType, Constness, storage_order>::Iterator(
3064 const Accessor<TableType, Constness, storage_order> &a)
3066 Accessor<TableType, Constness, storage_order>>(a)
3071 template <
typename TableType,
bool Constness, Storage storage_order>
3072 inline Iterator<TableType, Constness, storage_order>::Iterator(
3073 const container_pointer_type table)
3075 Accessor<TableType, Constness, storage_order>>(
3076 Accessor<TableType, Constness, storage_order>(table))
3081 template <
typename TableType,
bool Constness, Storage storage_order>
3082 inline Iterator<TableType, Constness, storage_order>::Iterator(
3083 const Iterator<TableType, false, storage_order> &i)
3085 Accessor<TableType, Constness, storage_order>>(*i)
3090 template <
typename TableType,
bool Constness, Storage storage_order>
3091 inline Iterator<TableType, Constness, storage_order>::Iterator(
3092 const container_pointer_type table,
3093 const size_type row_n,
3094 const size_type col_n)
3097 table->n_cols() * row_n + col_n :
3098 table->n_rows() * col_n + row_n)
3103 template <
typename TableType,
bool Constness, Storage storage_order>
3104 inline Iterator<TableType, Constness, storage_order>::Iterator(
3105 const container_pointer_type table,
3106 const std::ptrdiff_t linear_index)
3108 Accessor<TableType, Constness, storage_order>>(
3109 Accessor<TableType, Constness, storage_order>(table, linear_index))
3116template <
typename T>
3118 const size_type size2)
3124template <
typename T>
3127 const size_type size2,
3128 const bool omit_default_initialization)
3131 omit_default_initialization);
3136template <
typename T>
3147template <
typename T>
3158template <
typename T>
3167template <
typename T>
3176template <
typename T>
3180 return this->table_size[1];
3185template <
typename T>
3189 return this->table_size[0];
3194template <
typename T>
3203template <
typename T>
3212template <
typename T>
3221template <
typename T>
3231template <
typename T>
3233 const size_type size2,
3234 const size_type size3)
3240template <
typename T>
3241template <
typename InputIterator>
3243 const size_type size2,
3244 const size_type size3,
3245 InputIterator entries,
3246 const bool C_style_indexing)
3254template <
typename T>
3257 const size_type size2,
3258 const size_type size3,
3259 const bool omit_default_initialization)
3262 omit_default_initialization);
3267template <
typename T>
3268inline ::internal::TableBaseAccessors::Accessor<3, T, true, 2>
3273 size_type(this->table_size[1]) * this->table_size[2];
3275 *
this, this->
values.begin() + i * subobject_size));
3280template <
typename T>
3281inline ::internal::TableBaseAccessors::Accessor<3, T, false, 2>
3286 size_type(this->table_size[1]) * this->table_size[2];
3288 *
this, this->
values.begin() + i * subobject_size));
3293template <
typename T>
3297 const size_type k)
const
3303 ->values[(
size_type(i) * this->table_size[1] + j) * this->table_size[2] +
3309template <
typename T>
3317 ->values[(
size_type(i) * this->table_size[1] + j) * this->table_size[2] +
3323template <
typename T>
3325 const size_type size2,
3326 const size_type size3,
3327 const size_type size4)
3333template <
typename T>
3334inline ::internal::TableBaseAccessors::Accessor<4, T, true, 3>
3339 size_type(this->table_size[1]) * this->table_size[2] * this->table_size[3];
3341 *
this, this->
values.begin() + i * subobject_size));
3346template <
typename T>
3347inline ::internal::TableBaseAccessors::Accessor<4, T, false, 3>
3352 size_type(this->table_size[1]) * this->table_size[2] * this->table_size[3];
3354 *
this, this->
values.begin() + i * subobject_size));
3359template <
typename T>
3364 const size_type l)
const
3371 ->values[((
size_type(i) * this->table_size[1] + j) * this->table_size[2] +
3373 this->table_size[3] +
3379template <
typename T>
3391 ->values[((
size_type(i) * this->table_size[1] + j) * this->table_size[2] +
3393 this->table_size[3] +
3399template <
typename T>
3401 const size_type size2,
3402 const size_type size3,
3403 const size_type size4,
3404 const size_type size5)
3410template <
typename T>
3411inline ::internal::TableBaseAccessors::Accessor<5, T, true, 4>
3416 this->table_size[2] * this->table_size[3] *
3417 this->table_size[4];
3419 *
this, this->
values.begin() + i * subobject_size));
3424template <
typename T>
3425inline ::internal::TableBaseAccessors::Accessor<5, T, false, 4>
3430 this->table_size[2] * this->table_size[3] *
3431 this->table_size[4];
3433 *
this, this->
values.begin() + i * subobject_size));
3438template <
typename T>
3444 const size_type m)
const
3452 ->values[(((
size_type(i) * this->table_size[1] + j) * this->table_size[2] +
3454 this->table_size[3] +
3456 this->table_size[4] +
3462template <
typename T>
3476 ->values[(((
size_type(i) * this->table_size[1] + j) * this->table_size[2] +
3478 this->table_size[3] +
3480 this->table_size[4] +
3486template <
typename T>
3488 const size_type size2,
3489 const size_type size3,
3490 const size_type size4,
3491 const size_type size5,
3492 const size_type size6)
3496 table_indices[0] = size1;
3497 table_indices[1] = size2;
3498 table_indices[2] = size3;
3499 table_indices[3] = size4;
3500 table_indices[4] = size5;
3501 table_indices[5] = size6;
3508template <
typename T>
3509inline ::internal::TableBaseAccessors::Accessor<6, T, true, 5>
3514 this->table_size[2] * this->table_size[3] *
3515 this->table_size[4] * this->table_size[5];
3517 *
this, this->
values.begin() + i * subobject_size));
3522template <
typename T>
3523inline ::internal::TableBaseAccessors::Accessor<6, T, false, 5>
3528 this->table_size[2] * this->table_size[3] *
3529 this->table_size[4] * this->table_size[5];
3531 *
this, this->
values.begin() + i * subobject_size));
3536template <
typename T>
3543 const size_type n)
const
3552 ->values[((((
size_type(i) * this->table_size[1] + j) * this->table_size[2] +
3554 this->table_size[3] +
3556 this->table_size[4] +
3558 this->table_size[5] +
3564template <
typename T>
3580 ->values[((((
size_type(i) * this->table_size[1] + j) * this->table_size[2] +
3582 this->table_size[3] +
3584 this->table_size[4] +
3586 this->table_size[5] +
3592template <
typename T>
3594 const size_type size2,
3595 const size_type size3,
3596 const size_type size4,
3597 const size_type size5,
3598 const size_type size6,
3599 const size_type size7)
3603 table_indices[0] = size1;
3604 table_indices[1] = size2;
3605 table_indices[2] = size3;
3606 table_indices[3] = size4;
3607 table_indices[4] = size5;
3608 table_indices[5] = size6;
3609 table_indices[6] = size7;
3616template <
typename T>
3617inline ::internal::TableBaseAccessors::Accessor<7, T, true, 6>
3622 size_type(this->table_size[1]) * this->table_size[2] * this->table_size[3] *
3623 this->table_size[4] * this->table_size[5] * this->table_size[6];
3625 *
this, this->
values.begin() + i * subobject_size));
3630template <
typename T>
3631inline ::internal::TableBaseAccessors::Accessor<7, T, false, 6>
3636 size_type(this->table_size[1]) * this->table_size[2] * this->table_size[3] *
3637 this->table_size[4] * this->table_size[5] * this->table_size[6];
3639 *
this, this->
values.begin() + i * subobject_size));
3644template <
typename T>
3652 const size_type o)
const
3662 [(((((
size_type(i) * this->table_size[1] + j) * this->table_size[2] + k) *
3663 this->table_size[3] +
3665 this->table_size[4] +
3667 this->table_size[5] +
3669 this->table_size[6] +
3675template <
typename T>
3693 [(((((
size_type(i) * this->table_size[1] + j) * this->table_size[2] + k) *
3694 this->table_size[3] +
3696 this->table_size[4] +
3698 this->table_size[5] +
3700 this->table_size[6] +
3714template <
int N,
typename T>
const value_type * const_iterator
const value_type & const_reference
Accessor< TableType, Constness, storage_order > accessor
Accessor base class for Table<2, T> and TransposeTable.
AccessorBase(const AccessorBase< TableType, false, storage_order > &)
std::conditional_t< Constness, const TableType *, TableType * > container_pointer_type
void assert_valid_linear_index() const
typename TableType::value_type value_type
std::ptrdiff_t linear_index
const value_type & value() const
container_pointer_type container
AccessorBase(const container_pointer_type table)
AccessorBase(const container_pointer_type table, const std::ptrdiff_t linear_index)
friend bool operator==(const AccessorBase< TableType, Constness, storage_order > &left, const AccessorBase< TableType, OtherConstness, storage_order > &right)
typename TableType::size_type size_type
const Accessor< TableType, false, storage_order > & operator=(value_type &&) const
const Accessor< TableType, false, storage_order > & operator=(const value_type &) const
typename AccessorBase< TableType, true, storage_order >::value_type value_type
value_type & value() const
typename AccessorBase< TableType, true, storage_order >::size_type size_type
typename AccessorBase< TableType, true, storage_order >::value_type value_type
typename AccessorBase< TableType, true, storage_order >::size_type size_type
Accessor class template. This class is partially specialized for both values of Constness.
Iterator class for both matrix-like tables, i.e., Table<2, T> and TransposeTable.
Iterator(const container_pointer_type object, const size_type row, const size_type column)
std::conditional_t< Constness, const TableType *, TableType * > container_pointer_type
Iterator(const Accessor< TableType, Constness, storage_order > &accessor)
Iterator(const container_pointer_type object)
Iterator(const Iterator< TableType, false, storage_order > &i)
Iterator(const container_pointer_type container, const std::ptrdiff_t linear_index)
typename TableType::size_type size_type
void fill(const T &value)
std::size_t memory_consumption() const
TableBase< N, T > & operator=(const TableBase< N, T > &src)
void reinit(const TableIndices< N > &new_size, const bool omit_default_initialization=false)
AlignedVector< T >::const_reference el(const TableIndices< N > &indices) const
AlignedVector< T >::const_reference operator()(const TableIndices< N > &indices) const
AlignedVector< T > values
TableBase< N, T > & operator=(TableBase< N, T > &&src) noexcept
~TableBase() override=default
typename AlignedVector< T >::size_type size_type
size_type n_elements() const
TableBase(const TableBase< N, T2 > &src)
void swap(TableBase< N, T > &v) noexcept
TableBase(const TableIndices< N > &sizes, InputIterator entries, const bool C_style_indexing=true)
const TableIndices< N > & size() const
bool operator==(const TableBase< N, T > &T2) const
size_type position(const TableIndices< N > &indices) const
TableBase(const TableBase< N, T > &src)
TableBase< N, T > & operator=(const TableBase< N, T2 > &src)
AlignedVector< T >::reference operator()(const TableIndices< N > &indices)
AlignedVector< T >::reference el(const TableIndices< N > &indices)
void fill(InputIterator entries, const bool C_style_indexing=true)
void serialize(Archive &ar, const unsigned int version)
void replicate_across_communicator(const MPI_Comm communicator, const unsigned int root_process)
TableBase(const TableIndices< N > &sizes)
size_type size(const unsigned int i) const
TableBase(TableBase< N, T > &&src) noexcept
TableIndices< N > table_size
Table(const size_type size)
AlignedVector< T >::const_reference operator[](const size_type i) const
typename TableBase< 1, T >::size_type size_type
AlignedVector< T >::reference operator[](const size_type i)
AlignedVector< T >::const_reference operator()(const size_type i) const
AlignedVector< T >::reference operator()(const size_type i)
Table(const size_type size, InputIterator entries, const bool C_style_indexing=true)
AlignedVector< T >::reference operator()(const size_type i, const size_type j)
AlignedVector< T >::reference el(const size_type i, const size_type j)
typename AlignedVector< T >::const_reference const_reference
typename AlignedVector< T >::value_type value_type
AlignedVector< T >::const_reference operator()(const size_type i, const size_type j) const
::internal::TableBaseAccessors::Accessor< 2, T, false, 1 > operator[](const size_type i)
typename TableBase< 2, T >::size_type size_type
::internal::TableBaseAccessors::Accessor< 2, T, true, 1 > operator[](const size_type i) const
AlignedVector< T >::const_reference el(const size_type i, const size_type j) const
typename AlignedVector< T >::reference reference
const_iterator end() const
Table(const size_type size1, const size_type size2, InputIterator entries, const bool C_style_indexing=true)
void reinit(const size_type size1, const size_type size2, const bool omit_default_initialization=false)
const_iterator begin() const
Table(const size_type size1, const size_type size2)
::internal::TableBaseAccessors::Accessor< 3, T, true, 2 > operator[](const size_type i) const
AlignedVector< T >::const_reference operator()(const size_type i, const size_type j, const size_type k) const
AlignedVector< T >::reference operator()(const size_type i, const size_type j, const size_type k)
Table(const size_type size1, const size_type size2, const size_type size3)
Table(const size_type size1, const size_type size2, const size_type size3, InputIterator entries, const bool C_style_indexing=true)
void reinit(const size_type size1, const size_type size2, const size_type size3, const bool omit_default_initialization=false)
typename TableBase< 3, T >::size_type size_type
::internal::TableBaseAccessors::Accessor< 3, T, false, 2 > operator[](const size_type i)
::internal::TableBaseAccessors::Accessor< 4, T, true, 3 > operator[](const size_type i) const
Table(const size_type size1, const size_type size2, const size_type size3, const size_type size4)
AlignedVector< T >::const_reference operator()(const size_type i, const size_type j, const size_type k, const size_type l) const
typename TableBase< 4, T >::size_type size_type
::internal::TableBaseAccessors::Accessor< 4, T, false, 3 > operator[](const size_type i)
AlignedVector< T >::reference operator()(const size_type i, const size_type j, const size_type k, const size_type l)
typename TableBase< 5, T >::size_type size_type
::internal::TableBaseAccessors::Accessor< 5, T, false, 4 > operator[](const size_type i)
AlignedVector< T >::reference operator()(const size_type i, const size_type j, const size_type k, const size_type l, const size_type m)
AlignedVector< T >::const_reference operator()(const size_type i, const size_type j, const size_type k, const size_type l, const size_type m) const
::internal::TableBaseAccessors::Accessor< 5, T, true, 4 > operator[](const size_type i) const
Table(const size_type size1, const size_type size2, const size_type size3, const size_type size4, const size_type size5)
::internal::TableBaseAccessors::Accessor< 6, T, false, 5 > operator[](const size_type i)
AlignedVector< T >::const_reference operator()(const size_type i, const size_type j, const size_type k, const size_type l, const size_type m, const size_type n) const
Table(const size_type size1, const size_type size2, const size_type size3, const size_type size4, const size_type size5, const size_type size6)
AlignedVector< T >::reference operator()(const size_type i, const size_type j, const size_type k, const size_type l, const size_type m, const size_type n)
typename TableBase< 6, T >::size_type size_type
::internal::TableBaseAccessors::Accessor< 6, T, true, 5 > operator[](const size_type i) const
::internal::TableBaseAccessors::Accessor< 7, T, false, 6 > operator[](const size_type i)
typename TableBase< 7, T >::size_type size_type
::internal::TableBaseAccessors::Accessor< 7, T, true, 6 > operator[](const size_type i) const
AlignedVector< T >::reference operator()(const size_type i, const size_type j, const size_type k, const size_type l, const size_type m, const size_type n, const size_type o)
AlignedVector< T >::const_reference operator()(const size_type i, const size_type j, const size_type k, const size_type l, const size_type m, const size_type n, const size_type o) const
Table(const size_type size1, const size_type size2, const size_type size3, const size_type size4, const size_type size5, const size_type size6, const size_type size7)
void reinit(const size_type size1, const size_type size2, const bool omit_default_initialization=false)
TransposeTable(const size_type size1, const size_type size2)
MatrixTableIterators::Iterator< TransposeTable< T >, false, MatrixTableIterators::Storage::column_major > iterator
reference el(const size_type i, const size_type j)
const_iterator begin() const
MatrixTableIterators::Iterator< TransposeTable< T >, true, MatrixTableIterators::Storage::column_major > const_iterator
const_iterator end() const
typename AlignedVector< T >::reference reference
typename TableBase< 2, T >::size_type size_type
const_reference operator()(const size_type i, const size_type j) const
typename AlignedVector< T >::value_type value_type
const_reference el(const size_type i, const size_type j) const
reference operator()(const size_type i, const size_type j)
typename AlignedVector< T >::const_reference const_reference
typename Types< N, T, C >::value_type value_type
Accessor(const Accessor &a)
typename Types< N, T, C >::const_iterator const_iterator
typename Types< N, T, C >::TableType TableType
typename Types< N, T, C >::const_reference const_reference
typename Types< N, T, C >::iterator iterator
ptrdiff_t difference_type
reference operator[](const size_type) const
typename Types< N, T, C >::reference reference
Accessor(const TableType &table, const iterator data)
ptrdiff_t difference_type
typename Types< N, T, C >::TableType TableType
typename Types< N, T, C >::iterator iterator
Accessor(const Accessor &a)
Accessor< N, T, C, P - 1 > operator[](const size_type i) const
Accessor(const TableType &table, const iterator data)
typename Types< N, T, C >::const_iterator const_iterator
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcIndexRange(size_type arg1, size_type arg2, size_type arg3)
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
#define DeclException3(Exception3, type1, type2, type3, outsequence)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define DEAL_II_ASSERT_UNREACHABLE()
#define DEAL_II_NOT_IMPLEMENTED()
std::vector< index_type > data
types::global_dof_index size_type
Storage
Enumeration describing the storage order (i.e., the in-memory layout) of a table class.
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)
SymmetricTensor< 2, dim, Number > C(const Tensor< 2, dim, Number > &F)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
T broadcast(const MPI_Comm comm, const T &object_to_send, const unsigned int root_process=0)
void reinit(MatrixBlock< MatrixType > &v, const BlockSparsityPattern &p)
typename AlignedVector< T >::iterator iterator
typename AlignedVector< T >::const_iterator const_iterator
typename AlignedVector< T >::reference reference
typename AlignedVector< T >::const_reference const_reference
typename AlignedVector< T >::const_iterator const_iterator
typename AlignedVector< T >::const_reference const_reference
typename AlignedVector< T >::const_iterator iterator
typename AlignedVector< T >::const_reference reference
void swap(TableBase< N, T > &u, TableBase< N, T > &v) noexcept