15 #ifndef _aspect_particle_property_cpo_h 16 #define _aspect_particle_property_cpo_h 23 #include <boost/random.hpp> 154 initialize_one_particle_property (
const Point<dim> &position,
155 std::vector<double> &particle_properties)
const override;
169 need_update ()
const override;
175 late_initialization_mode ()
const override;
181 get_update_flags (
const unsigned int component)
const override;
190 std::vector<std::pair<std::string, unsigned int>>
191 get_property_information()
const override;
211 std::pair<std::vector<double>, std::vector<Tensor<2,3>>>
212 compute_derivatives(
const unsigned int cpo_index,
214 const unsigned int mineral_i,
222 const std::vector<double> &compositions,
225 const double water_content)
const;
243 std::pair<std::vector<double>, std::vector<Tensor<2,3>>>
245 const unsigned int cpo_index,
247 const unsigned int mineral_i,
250 const std::array<double,4> ref_resolved_shear_stress,
251 const bool prevent_nondimensionalization =
false)
const;
271 get_number_of_grains()
const;
277 get_number_of_minerals()
const;
292 const double temperature,
293 const double pressure,
295 const std::vector<double> &compositions,
298 const double water_content)
const;
305 determine_deformation_type_karato_2008(
const double stress,
306 const double water_content)
const;
318 reference_resolved_shear_stress_from_deformation_type(
DeformationType deformation_type,
319 double max_value = 1e60)
const;
331 const unsigned int mineral_i)
const 333 return static_cast<DeformationType>(data[cpo_data_position + 0 + mineral_i * (n_grains * 10 + 2)]);
347 const unsigned int mineral_i,
350 data[cpo_data_position + 0 + mineral_i * (n_grains * 10 + 2)] = static_cast<double>(deformation_type);
363 const unsigned int mineral_i)
const 365 return data[cpo_data_position + 1 + mineral_i *(n_grains * 10 + 2)];
379 const unsigned int mineral_i,
380 const double volume_fraction_mineral)
const 382 data[cpo_data_position + 1 + mineral_i *(n_grains * 10 + 2)] = volume_fraction_mineral;
396 const unsigned int mineral_i,
397 const unsigned int grain_i)
const 399 return data[cpo_data_position + 2 + grain_i * 10 + mineral_i * (n_grains * 10 + 2)];
414 const unsigned int mineral_i,
415 const unsigned int grain_i,
416 const double volume_fractions_grains)
const 418 data[cpo_data_position + 2 + grain_i * 10 + mineral_i * (n_grains * 10 + 2)] = volume_fractions_grains;
433 const unsigned int mineral_i,
434 const unsigned int grain_i)
const 437 for (
unsigned int i = 0; i < Tensor<2,3>::n_independent_components ; ++i)
440 rotation_matrix[index] = data[cpo_data_position + 3 + grain_i * 10 + mineral_i * (n_grains * 10 + 2) + i];
442 return rotation_matrix;
457 const unsigned int mineral_i,
458 const unsigned int grain_i,
461 for (
unsigned int i = 0; i < Tensor<2,3>::n_independent_components ; ++i)
464 data[cpo_data_position + 3 + grain_i * 10 + mineral_i * (n_grains * 10 + 2) + i] = rotation_matrix[index];
474 compute_random_rotation_matrix(
Tensor<2,3> &rotation_matrix)
const;
492 advect_forward_euler(
const unsigned int cpo_data_position,
494 const unsigned int mineral_i,
496 const std::pair<std::vector<double>, std::vector<
Tensor<2,3>>> &derivatives)
const;
514 advect_backward_euler(
const unsigned int cpo_data_position,
516 const unsigned int mineral_i,
518 const std::pair<std::vector<double>, std::vector<
Tensor<2,3>>> &derivatives)
const;
527 std::pair<std::vector<double>, std::vector<Tensor<2,3>>>
528 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