21 #ifndef _aspect_particle_property_cpo_h 22 #define _aspect_particle_property_cpo_h 29 #include <boost/random.hpp> 157 initialize_one_particle_property (
const Point<dim> &position,
158 std::vector<double> &particle_properties)
const override;
172 need_update ()
const override;
178 late_initialization_mode ()
const override;
184 get_update_flags (
const unsigned int component)
const override;
193 std::vector<std::pair<std::string, unsigned int>>
194 get_property_information()
const override;
214 std::pair<std::vector<double>, std::vector<Tensor<2,3>>>
215 compute_derivatives(
const unsigned int cpo_index,
217 const unsigned int mineral_i,
225 const std::vector<double> &compositions,
228 const double water_content)
const;
246 std::pair<std::vector<double>, std::vector<Tensor<2,3>>>
248 const unsigned int cpo_index,
250 const unsigned int mineral_i,
253 const std::array<double,4> ref_resolved_shear_stress,
254 const bool prevent_nondimensionalization =
false)
const;
271 save (std::map<std::string, std::string> &status_strings)
const override;
274 load (
const std::map<std::string, std::string> &status_strings)
override;
280 get_number_of_grains()
const;
286 get_number_of_minerals()
const;
301 const double temperature,
302 const double pressure,
304 const std::vector<double> &compositions,
307 const double water_content)
const;
314 determine_deformation_type_karato_2008(
const double stress,
315 const double water_content)
const;
327 reference_resolved_shear_stress_from_deformation_type(
DeformationType deformation_type,
328 double max_value = 1e60)
const;
340 const unsigned int mineral_i)
const 342 return static_cast<DeformationType>(data[cpo_data_position + 0 + mineral_i * (n_grains * 10 + 2)]);
356 const unsigned int mineral_i,
359 data[cpo_data_position + 0 + mineral_i * (n_grains * 10 + 2)] = static_cast<double>(deformation_type);
372 const unsigned int mineral_i)
const 374 return data[cpo_data_position + 1 + mineral_i *(n_grains * 10 + 2)];
388 const unsigned int mineral_i,
389 const double volume_fraction_mineral)
const 391 data[cpo_data_position + 1 + mineral_i *(n_grains * 10 + 2)] = volume_fraction_mineral;
405 const unsigned int mineral_i,
406 const unsigned int grain_i)
const 408 return data[cpo_data_position + 2 + grain_i * 10 + mineral_i * (n_grains * 10 + 2)];
423 const unsigned int mineral_i,
424 const unsigned int grain_i,
425 const double volume_fractions_grains)
const 427 data[cpo_data_position + 2 + grain_i * 10 + mineral_i * (n_grains * 10 + 2)] = volume_fractions_grains;
442 const unsigned int mineral_i,
443 const unsigned int grain_i)
const 446 for (
unsigned int i = 0; i < Tensor<2,3>::n_independent_components ; ++i)
449 rotation_matrix[index] = data[cpo_data_position + 3 + grain_i * 10 + mineral_i * (n_grains * 10 + 2) + i];
451 return rotation_matrix;
466 const unsigned int mineral_i,
467 const unsigned int grain_i,
470 for (
unsigned int i = 0; i < Tensor<2,3>::n_independent_components ; ++i)
473 data[cpo_data_position + 3 + grain_i * 10 + mineral_i * (n_grains * 10 + 2) + i] = rotation_matrix[index];
483 compute_random_rotation_matrix(
Tensor<2,3> &rotation_matrix)
const;
501 advect_forward_euler(
const unsigned int cpo_data_position,
503 const unsigned int mineral_i,
505 const std::pair<std::vector<double>, std::vector<
Tensor<2,3>>> &derivatives)
const;
523 advect_backward_euler(
const unsigned int cpo_data_position,
525 const unsigned int mineral_i,
527 const std::pair<std::vector<double>, std::vector<
Tensor<2,3>>> &derivatives)
const;
536 std::pair<std::vector<double>, std::vector<Tensor<2,3>>>
537 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