21 #ifndef _aspect_mesh_deformation_fastscape_h
22 #define _aspect_mesh_deformation_fastscape_h
26 #ifdef ASPECT_WITH_FASTSCAPE
33 namespace MeshDeformation
44 class FastScape :
public Interface<dim>,
public SimulatorAccess<dim>
50 ~FastScape()
override;
60 void update()
override;
70 compute_velocity_constraints_on_boundary(
const DoFHandler<dim> &mesh_deformation_dof_handler,
72 const std::set<types::boundary_id> &boundary_ids)
const override;
77 bool needs_surface_stabilization ()
const override;
94 enum class FastscapeOutputVariable
101 FastscapeOutputVariable additional_output_variable;
107 template <
class Archive>
108 void serialize (Archive &ar,
const unsigned int version);
113 void save (std::map<std::string, std::string> &status_strings)
const override;
118 void load (
const std::map<std::string, std::string> &status_strings)
override;
131 void set_ghost_nodes(std::vector<double> &elevation,
132 std::vector<double> &velocity_x,
133 std::vector<double> &velocity_y,
134 std::vector<double> &velocity_z,
135 std::vector<double> &bedrock_transport_coefficient_array,
136 const double &fastscape_timestep_in_years,
137 const bool init)
const;
142 bool is_ghost_node(
const unsigned int &index,
143 const bool &exclude_boundaries)
const;
148 void fill_fastscape_arrays(std::vector<double> &elevation,
149 std::vector<double> &bedrock_transport_coefficient_array,
150 std::vector<double> &bedrock_river_incision_rate_array,
151 std::vector<double> &velocity_x,
152 std::vector<double> &velocity_y,
153 std::vector<double> &velocity_z,
154 std::vector<std::vector<double>> &temporary_variables)
const;
159 std::vector<std::vector<double>> get_aspect_values()
const;
164 void initialize_fastscape(std::vector<double> &elevation,
165 std::vector<double> &basement,
166 std::vector<double> &silt_fraction,
172 void execute_fastscape(std::vector<double> &elevation,
173 std::vector<double> &extra_vtk_field,
174 std::vector<double> &velocity_x,
175 std::vector<double> &velocity_y,
176 std::vector<double> &velocity_z,
177 std::vector<double> &bedrock_transport_coefficient_array,
178 const double &fastscape_timestep_in_years,
179 const unsigned int &fastscape_iterations)
const;
185 void apply_orographic_controls(
const std::vector<double> &elevation,
186 std::vector<double> &bedrock_river_incision_rate_array,
187 std::vector<double> &bedrock_transport_coefficient_array)
const;
194 const unsigned int &fastscape_nx,
195 const unsigned int &fastscape_ny)
const;
204 unsigned int fastscape_steps_per_aspect_step;
211 double maximum_fastscape_timestep;
226 double fastscape_x_extent;
231 double fastscape_y_extent;
237 double fastscape_y_extent_2d;
242 unsigned int fastscape_nx;
247 unsigned int fastscape_ny;
259 unsigned int additional_refinement_levels;
267 unsigned int maximum_surface_refinement_level;
281 unsigned int surface_refinement_difference;
289 bool average_out_of_plane_surface_topography;
300 std::array<std::pair<double,double>,dim> grid_extent;
305 std::array<unsigned int, dim> table_intervals;
311 bool use_ghost_nodes;
319 double noise_elevation;
326 std::vector<double> sediment_rain_rates;
334 std::vector<double> sediment_rain_times;
342 bool fastscape_advection_uplift;
352 double node_tolerance;
360 double output_interval;
366 mutable double last_output_time;
415 bool topbottom_ghost_nodes_periodic;
423 bool leftright_ghost_nodes_periodic;
428 unsigned int fastscape_boundary_conditions;
466 double drainage_area_exponent_m;
472 double slope_exponent_n;
479 double slope_exponent_p;
486 double bedrock_deposition_g;
494 double sediment_deposition_g;
510 bool use_kf_distribution_function;
520 double constant_bedrock_river_incision_rate;
531 double sediment_river_incision_rate;
547 bool use_kd_distribution_function;
557 double constant_bedrock_transport_coefficient;
568 double sediment_transport_coefficient;
591 double sea_level_constant_value;
602 bool use_sea_level_function;
609 bool use_fixed_erosional_base;
615 double h_erosional_base;
621 double sand_surface_porosity;
627 double silt_surface_porosity;
633 double sand_efold_depth;
639 double silt_efold_depth;
645 double incoming_silt_fraction;
651 double sand_silt_averaging_depth;
657 double sand_transport_coefficient;
663 double silt_transport_coefficient;
669 bool use_marine_component;
692 int wind_barrier_elevation;
698 unsigned int wind_direction;
705 double flat_erosional_factor;
712 double wind_barrier_erosional_factor;
725 bool use_orographic_controls;
void declare_parameters(ParameterHandler &prm)
void load(Archive &ar, ::std_cxx26::inplace_vector< T, N > &vec, const unsigned int)
void save(Archive &ar, const ::std_cxx26::inplace_vector< T, N > &vec, const unsigned int)
void serialize(Archive &ar, ::std_cxx26::inplace_vector< T, N > &t, const unsigned int file_version)