21 #ifndef _aspect_particle_property_cpo_h 22 #define _aspect_particle_property_cpo_h 29 #include <boost/random.hpp> 160 initialize_one_particle_property (
const Point<dim> &position,
161 std::vector<double> &particle_properties)
const override;
175 need_update ()
const override;
181 late_initialization_mode ()
const override;
187 get_update_flags (
const unsigned int component)
const override;
196 std::vector<std::pair<std::string, unsigned int>>
197 get_property_information()
const override;
217 std::pair<std::vector<double>, std::vector<Tensor<2,3>>>
218 compute_derivatives(
const unsigned int cpo_index,
220 const unsigned int mineral_i,
228 const std::vector<double> &compositions,
231 const double water_content)
const;
249 std::pair<std::vector<double>, std::vector<Tensor<2,3>>>
251 const unsigned int cpo_index,
253 const unsigned int mineral_i,
256 const std::array<double,4> ref_resolved_shear_stress,
257 const bool prevent_nondimensionalization =
false)
const;
277 get_number_of_grains()
const;
283 get_number_of_minerals()
const;
298 const double temperature,
299 const double pressure,
301 const std::vector<double> &compositions,
304 const double water_content)
const;
311 determine_deformation_type_karato_2008(
const double stress,
312 const double water_content)
const;
324 reference_resolved_shear_stress_from_deformation_type(
DeformationType deformation_type,
325 double max_value = 1e60)
const;
337 const unsigned int mineral_i)
const 339 return static_cast<DeformationType>(data[cpo_data_position + 0 + mineral_i * (n_grains * 10 + 2)]);
353 const unsigned int mineral_i,
356 data[cpo_data_position + 0 + mineral_i * (n_grains * 10 + 2)] = static_cast<double>(deformation_type);
369 const unsigned int mineral_i)
const 371 return data[cpo_data_position + 1 + mineral_i *(n_grains * 10 + 2)];
385 const unsigned int mineral_i,
386 const double volume_fraction_mineral)
const 388 data[cpo_data_position + 1 + mineral_i *(n_grains * 10 + 2)] = volume_fraction_mineral;
402 const unsigned int mineral_i,
403 const unsigned int grain_i)
const 405 return data[cpo_data_position + 2 + grain_i * 10 + mineral_i * (n_grains * 10 + 2)];
420 const unsigned int mineral_i,
421 const unsigned int grain_i,
422 const double volume_fractions_grains)
const 424 data[cpo_data_position + 2 + grain_i * 10 + mineral_i * (n_grains * 10 + 2)] = volume_fractions_grains;
439 const unsigned int mineral_i,
440 const unsigned int grain_i)
const 443 for (
unsigned int i = 0; i < Tensor<2,3>::n_independent_components ; ++i)
446 rotation_matrix[index] = data[cpo_data_position + 3 + grain_i * 10 + mineral_i * (n_grains * 10 + 2) + i];
448 return rotation_matrix;
463 const unsigned int mineral_i,
464 const unsigned int grain_i,
467 for (
unsigned int i = 0; i < Tensor<2,3>::n_independent_components ; ++i)
470 data[cpo_data_position + 3 + grain_i * 10 + mineral_i * (n_grains * 10 + 2) + i] = rotation_matrix[index];
480 compute_random_rotation_matrix(
Tensor<2,3> &rotation_matrix)
const;
498 advect_forward_euler(
const unsigned int cpo_data_position,
500 const unsigned int mineral_i,
502 const std::pair<std::vector<double>, std::vector<
Tensor<2,3>>> &derivatives)
const;
520 advect_backward_euler(
const unsigned int cpo_data_position,
522 const unsigned int mineral_i,
524 const std::pair<std::vector<double>, std::vector<
Tensor<2,3>>> &derivatives)
const;
533 std::pair<std::vector<double>, std::vector<Tensor<2,3>>>
534 compute_derivatives_spin_tensor(
const Tensor<2,3> &velocity_gradient_tensor)
const;
void set_volume_fraction_mineral(const unsigned int cpo_data_position, const ArrayView< double > &data, const unsigned int mineral_i, const double volume_fraction_mineral) const
Sets the value in the data array representing the volume fraction of a mineral.
DeformationTypeSelector
The type of deformation selector used by the CPO code.
std::vector< index_type > data
double nucleation_efficiency
CPODerivativeAlgorithm
The algorithm used to compute the derivatives of the grain size and rotation matrix used in the advec...
DeformationType
The type of deformation used by the CPO code.
#define DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
InitializationModeForLateParticles
double get_volume_fraction_mineral(const unsigned int cpo_data_position, const ArrayView< double > &data, const unsigned int mineral_i) const
Returns the value in the data array representing the volume fraction of a mineral.
unsigned int property_advection_max_iterations
void declare_parameters(ParameterHandler &prm)
AdvectionMethod
The type of Advection method used to advect the CPO properties.
std::vector< double > CPX_RRSS
std::vector< double > OlivineD_RRSS
CPOInitialGrainsModel
An enum used to determine how the initial grain sizes and orientations are set for all particles...
AdvectionMethod advection_method
Tensor< 2, 3 > get_rotation_matrix_grains(const unsigned int cpo_data_position, const ArrayView< const double > &data, const unsigned int mineral_i, const unsigned int grain_i) const
Gets the rotation matrix for a grain in a mineral.
CPODerivativeAlgorithm cpo_derivative_algorithm
boost::iterator_range< particle_iterator > particle_iterator_range
void set_deformation_type(const unsigned int cpo_data_position, const ArrayView< double > &data, const unsigned int mineral_i, const DeformationType deformation_type) const
Sets the value in the data array representing the deformation type.
DeformationType get_deformation_type(const unsigned int cpo_data_position, const ArrayView< double > &data, const unsigned int mineral_i) const
Returns the value in the data array representing the deformation type.
std::vector< double > volume_fractions_minerals
std::vector< DeformationTypeSelector > deformation_type_selector
#define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
void set_rotation_matrix_grains(const unsigned int cpo_data_position, const ArrayView< double > &data, const unsigned int mineral_i, const unsigned int grain_i, const Tensor< 2, 3 > &rotation_matrix) const
Sets the rotation matrix for a grain in a mineral.
static constexpr TableIndices< rank_ > unrolled_to_component_indices(const unsigned int i)
double get_volume_fractions_grains(const unsigned int cpo_data_position, const ArrayView< const double > &data, const unsigned int mineral_i, const unsigned int grain_i) const
Returns the value in the data array representing the volume fraction of a grain.
void set_volume_fractions_grains(const unsigned int cpo_data_position, const ArrayView< double > &data, const unsigned int mineral_i, const unsigned int grain_i, const double volume_fractions_grains) const
Sets the value in the data array representing the volume fraction of a grain.
boost::mt19937 random_number_generator
double property_advection_tolerance
unsigned int random_number_seed
CPOInitialGrainsModel initial_grains_model