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;
85 const unsigned int compositional_field)
const override;
90 bool needs_surface_stabilization ()
const override;
107 enum class FastscapeOutputVariable
114 FastscapeOutputVariable additional_output_variable;
120 template <
class Archive>
121 void serialize (Archive &ar,
const unsigned int version);
126 void save (std::map<std::string, std::string> &status_strings)
const override;
131 void load (
const std::map<std::string, std::string> &status_strings)
override;
144 void set_ghost_nodes(std::vector<double> &elevation,
145 std::vector<double> &velocity_x,
146 std::vector<double> &velocity_y,
147 std::vector<double> &velocity_z,
148 std::vector<double> &bedrock_transport_coefficient_array,
149 const double &fastscape_timestep_in_years,
150 const bool init)
const;
155 bool is_ghost_node(
const unsigned int &index,
156 const bool &exclude_boundaries)
const;
161 void fill_fastscape_arrays(std::vector<double> &elevation,
162 std::vector<double> &bedrock_transport_coefficient_array,
163 std::vector<double> &bedrock_river_incision_rate_array,
164 std::vector<double> &velocity_x,
165 std::vector<double> &velocity_y,
166 std::vector<double> &velocity_z,
167 std::vector<std::vector<double>> &temporary_variables)
const;
172 std::vector<std::vector<double>> get_aspect_values()
const;
177 void initialize_fastscape(std::vector<double> &elevation,
178 std::vector<double> &basement,
179 std::vector<double> &silt_fraction,
185 void execute_fastscape(std::vector<double> &elevation,
186 std::vector<double> &extra_vtk_field,
187 std::vector<double> &velocity_x,
188 std::vector<double> &velocity_y,
189 std::vector<double> &velocity_z,
190 std::vector<double> &bedrock_transport_coefficient_array,
191 const double &fastscape_timestep_in_years,
192 const unsigned int &fastscape_iterations)
const;
198 void apply_orographic_controls(
const std::vector<double> &elevation,
199 std::vector<double> &bedrock_river_incision_rate_array,
200 std::vector<double> &bedrock_transport_coefficient_array)
const;
207 const unsigned int &fastscape_nx,
208 const unsigned int &fastscape_ny)
const;
217 unsigned int fastscape_steps_per_aspect_step;
224 double maximum_fastscape_timestep;
239 double fastscape_x_extent;
244 double fastscape_y_extent;
250 double fastscape_y_extent_2d;
255 unsigned int fastscape_nx;
260 unsigned int fastscape_ny;
272 unsigned int additional_refinement_levels;
280 unsigned int maximum_surface_refinement_level;
294 unsigned int surface_refinement_difference;
302 bool average_out_of_plane_surface_topography;
313 std::array<std::pair<double,double>,dim> grid_extent;
318 std::array<unsigned int, dim> table_intervals;
324 bool use_ghost_nodes;
332 double noise_elevation;
339 std::vector<double> sediment_rain_rates;
347 std::vector<double> sediment_rain_times;
355 bool fastscape_advection_uplift;
365 double node_tolerance;
373 double output_interval;
379 mutable double last_output_time;
428 bool topbottom_ghost_nodes_periodic;
436 bool leftright_ghost_nodes_periodic;
441 unsigned int fastscape_boundary_conditions;
479 double drainage_area_exponent_m;
485 double slope_exponent_n;
492 double slope_exponent_p;
499 double bedrock_deposition_g;
507 double sediment_deposition_g;
523 bool use_kf_distribution_function;
533 double constant_bedrock_river_incision_rate;
544 double sediment_river_incision_rate;
560 bool use_kd_distribution_function;
570 double constant_bedrock_transport_coefficient;
581 double sediment_transport_coefficient;
604 double sea_level_constant_value;
615 bool use_sea_level_function;
622 bool use_fixed_erosional_base;
628 double h_erosional_base;
634 double sand_surface_porosity;
640 double silt_surface_porosity;
646 double sand_efold_depth;
652 double silt_efold_depth;
658 double incoming_silt_fraction;
664 double sand_silt_averaging_depth;
670 double sand_transport_coefficient;
676 double silt_transport_coefficient;
682 bool use_marine_component;
705 int wind_barrier_elevation;
711 unsigned int wind_direction;
718 double flat_erosional_factor;
725 double wind_barrier_erosional_factor;
738 bool use_orographic_controls;
void serialize(Archive &ar, ::std_cxx26::inplace_vector< T, N > &t, const unsigned int file_version)
void declare_parameters(ParameterHandler &prm)
void save(Archive &ar, const ::std_cxx26::inplace_vector< T, N > &vec, const unsigned int)
void load(Archive &ar, ::std_cxx26::inplace_vector< T, N > &vec, const unsigned int)