24template <
int DisplacementDim,
typename IntegrationPointDataVector,
25 typename IpData,
typename MemberType>
27 IntegrationPointDataVector
const& ip_data, MemberType IpData::*
const member,
28 std::vector<double>& cache)
30 constexpr int kelvin_vector_size =
32 auto const n_integration_points = ip_data.size();
36 double, kelvin_vector_size, Eigen::Dynamic, Eigen::RowMajor>>(
37 cache, kelvin_vector_size, n_integration_points);
39 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
41 auto const& kelvin_vector = ip_data[ip].*member;
49template <
int DisplacementDim,
typename IntegrationPointDataVector,
52 IntegrationPointDataVector
const& ip_data, Accessor&& accessor,
53 std::vector<double>& cache)
55 constexpr int kelvin_vector_size =
57 auto const n_integration_points = ip_data.size();
61 double, kelvin_vector_size, Eigen::Dynamic, Eigen::RowMajor>>(
62 cache, kelvin_vector_size, n_integration_points);
64 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
66 auto const& kelvin_vector = accessor(ip_data[ip]);
74template <
int DisplacementDim,
typename IntegrationPointData,
78 Eigen::aligned_allocator<IntegrationPointData>>
const& ip_data,
81 constexpr int kelvin_vector_size =
83 auto const n_integration_points = ip_data.size();
85 std::vector<double> ip_kelvin_vector_values;
87 double, Eigen::Dynamic, kelvin_vector_size, Eigen::RowMajor>>(
88 ip_kelvin_vector_values, n_integration_points, kelvin_vector_size);
90 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
92 auto const& ip_member = ip_data[ip].*member;
97 return ip_kelvin_vector_values;
100template <
int DisplacementDim,
typename IntegrationPointDataVector,
101 typename IpData,
typename MemberType>
103 double const* values,
104 IntegrationPointDataVector& ip_data,
105 MemberType IpData::*
const member)
107 constexpr int kelvin_vector_size =
109 auto const n_integration_points = ip_data.size();
111 auto kelvin_vector_values =
112 Eigen::Map<Eigen::Matrix<double, kelvin_vector_size, Eigen::Dynamic,
113 Eigen::ColMajor>
const>(
114 values, kelvin_vector_size, n_integration_points);
116 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
118 ip_data[ip].*member =
120 kelvin_vector_values.col(ip));
123 return n_integration_points;
126template <
int DisplacementDim,
typename IntegrationPointDataVector,
129 double const* values,
130 IntegrationPointDataVector& ip_data,
133 constexpr int kelvin_vector_size =
135 auto const n_integration_points = ip_data.size();
137 auto kelvin_vector_values =
138 Eigen::Map<Eigen::Matrix<double, kelvin_vector_size, Eigen::Dynamic,
139 Eigen::ColMajor>
const>(
140 values, kelvin_vector_size, n_integration_points);
142 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
144 accessor(ip_data[ip]) =
146 kelvin_vector_values.col(ip));
149 return n_integration_points;
152template <
typename IntegrationPo
intDataVector,
typename MemberType>
154 IntegrationPointDataVector
const& ip_data, MemberType member,
155 std::vector<double>& cache)
157 auto const n_integration_points = ip_data.size();
161 Eigen::Matrix<double, 1, Eigen::Dynamic, Eigen::RowMajor>>(
162 cache, 1, n_integration_points);
164 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
166 cache_mat[ip] = ip_data[ip].*member;
172template <
typename IntegrationPo
intDataVector,
typename MemberType>
174 IntegrationPointDataVector& ip_data,
177 auto const n_integration_points = ip_data.size();
179 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
181 ip_data[ip].*member = values[ip];
183 return n_integration_points;
186template <
typename IntegrationPointDataVector,
typename MemberType,
187 typename MaterialStateVariables>
189 IntegrationPointDataVector
const& ip_data_vector,
193 int const n_components)
195 std::vector<double> result;
196 result.reserve(ip_data_vector.size() * n_components);
198 for (
auto& ip_data : ip_data_vector)
200 auto const values_span = get_values_span(*(ip_data.*member));
201 assert(values_span.size() ==
static_cast<std::size_t
>(n_components));
203 result.insert(end(result), values_span.begin(), values_span.end());
209template <
typename IntegrationPointDataVector,
typename MemberType,
210 typename MaterialStateVariables>
212 double const* values,
213 IntegrationPointDataVector& ip_data_vector,
218 auto const n_integration_points = ip_data_vector.size();
220 std::size_t position = 0;
221 for (
auto& ip_data : ip_data_vector)
223 auto const values_span = get_values_span(*(ip_data.*member));
224 std::copy_n(values + position, values_span.size(), values_span.begin());
225 position += values_span.size();
227 return n_integration_points;
Eigen::Matrix< double, 4, 1 > kelvinVectorToSymmetricTensor(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
Eigen::Matrix< double, Eigen::MatrixBase< Derived >::RowsAtCompileTime, 1 > symmetricTensorToKelvinVector(Eigen::MatrixBase< Derived > const &v)
Eigen::Map< Matrix > createZeroedMatrix(std::vector< double > &data, Eigen::MatrixXd::Index rows, Eigen::MatrixXd::Index cols)
std::size_t setIntegrationPointScalarData(double const *values, IntegrationPointDataVector &ip_data, MemberType member)
std::vector< double > getIntegrationPointDataMaterialStateVariables(IntegrationPointDataVector const &ip_data_vector, MemberType member, std::function< BaseLib::DynamicSpan< double >(MaterialStateVariables &)> get_values_span, int const n_components)
std::vector< double > const & getIntegrationPointKelvinVectorData(IntegrationPointDataVector const &ip_data, MemberType IpData::*const member, std::vector< double > &cache)
std::vector< double > const & getIntegrationPointScalarData(IntegrationPointDataVector const &ip_data, MemberType member, std::vector< double > &cache)
std::size_t setIntegrationPointKelvinVectorData(double const *values, IntegrationPointDataVector &ip_data, MemberType IpData::*const member)
std::size_t setIntegrationPointDataMaterialStateVariables(double const *values, IntegrationPointDataVector &ip_data_vector, MemberType member, std::function< BaseLib::DynamicSpan< double >(MaterialStateVariables &)> get_values_span)