ASPECT
fastscape.h
Go to the documentation of this file.
1 // ------------------------------------------------------
2 //
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 //
5 // SPDX-FileCopyrightText: Copyright (C) 2011-2026 by the ASPECT authors.
6 //
7 // This file is part of ASPECT.
8 //
9 // Detailed license information governing the source code and
10 // contributions can be found in the folder LICENSES and in
11 // LICENSE and CONTRIBUTING.md at the top level directory.
12 //
13 // ------------------------------------------------------
14 
15 #ifndef _aspect_mesh_deformation_fastscape_h
16 #define _aspect_mesh_deformation_fastscape_h
17 
18 #include <aspect/global.h>
19 
22 
23 namespace aspect
24 {
25  namespace MeshDeformation
26  {
35  template <int dim>
36  class FastScape : public Interface<dim>, public SimulatorAccess<dim>
37  {
38  public:
42  ~FastScape() override;
43 
47  virtual void initialize () override;
48 
52  void update() override;
53 
60  virtual
61  void
62  compute_velocity_constraints_on_boundary(const DoFHandler<dim> &mesh_deformation_dof_handler,
63  AffineConstraints<double> &mesh_velocity_constraints,
64  const std::set<types::boundary_id> &boundary_ids) const override;
65 
75  double boundary_composition (const types::boundary_id boundary_indicator,
76  const Point<dim> &position,
77  const unsigned int compositional_field) const override;
78 
82  bool needs_surface_stabilization () const override;
83 
87  static
89 
93  void parse_parameters (ParameterHandler &prm) override;
94 
100  {
101  //
102  kf,
103  kd,
105  };
107 
112  template <class Archive>
113  void serialize (Archive &ar, const unsigned int version);
114 
118  void save (std::map<std::string, std::string> &status_strings) const override;
119 
123  void load (const std::map<std::string, std::string> &status_strings) override;
124 
125  private:
136  void set_ghost_nodes(std::vector<double> &elevation,
137  std::vector<double> &velocity_x,
138  std::vector<double> &velocity_y,
139  std::vector<double> &velocity_z,
140  std::vector<double> &bedrock_transport_coefficient_array,
141  const double &fastscape_timestep_in_years,
142  const bool init) const;
143 
147  bool is_ghost_node(const unsigned int &index,
148  const bool &exclude_boundaries) const;
149 
153  void fill_fastscape_arrays(std::vector<double> &elevation,
154  std::vector<double> &bedrock_transport_coefficient_array,
155  std::vector<double> &bedrock_river_incision_rate_array,
156  std::vector<double> &velocity_x,
157  std::vector<double> &velocity_y,
158  std::vector<double> &velocity_z,
159  std::vector<std::vector<double>> &temporary_variables) const;
160 
164  std::vector<std::vector<double>> get_aspect_values() const;
165 
169  void initialize_fastscape(std::vector<double> &elevation,
170  std::vector<double> &basement,
171  std::vector<double> &silt_fraction,
172  bool restart) const;
173 
177  void execute_fastscape(std::vector<double> &elevation,
178  std::vector<double> &extra_vtk_field,
179  std::vector<double> &velocity_x,
180  std::vector<double> &velocity_y,
181  std::vector<double> &velocity_z,
182  std::vector<double> &bedrock_transport_coefficient_array,
183  const double &fastscape_timestep_in_years,
184  const unsigned int &fastscape_iterations) const;
185 
190  void apply_orographic_controls(const std::vector<double> &elevation,
191  std::vector<double> &bedrock_river_incision_rate_array,
192  std::vector<double> &bedrock_transport_coefficient_array) const;
193 
197  Table<dim,double> fill_data_table(const std::vector<double> &values,
198  const TableIndices<dim> &size_idx,
199  const unsigned int &fastscape_nx,
200  const unsigned int &fastscape_ny) const;
201 
210 
217 
221  double fastscape_dx;
222 
226  double fastscape_dy;
227 
232 
237 
243 
247  unsigned int fastscape_nx;
248 
252  unsigned int fastscape_ny;
253 
258  double vexp;
259 
265 
273 
287 
295 
301 
305  std::array<std::pair<double,double>,dim> grid_extent;
306 
310  std::array<unsigned int, dim> table_intervals;
311 
317 
325 
331  std::vector<double> sediment_rain_rates;
332 
339  std::vector<double> sediment_rain_times;
340 
348 
358 
366 
371  mutable double last_output_time;
372 
385  unsigned int bottom;
386 
394  unsigned int top;
395 
403  unsigned int right;
404 
412  unsigned int left;
413 
421 
429 
434 
439  double bottom_flux;
440 
445  double top_flux;
446 
451  double right_flux;
452 
457  double left_flux;
472 
478 
485 
492 
500 
510 
516 
526 
537 
547 
553 
563 
597 
602 
608 
615 
621 
627 
633 
639 
645 
651 
657 
663 
669 
690 
698 
703  unsigned int wind_direction;
704 
711 
718 
724 
734  };
735  }
736 }
737 
738 #endif
std::vector< double > sediment_rain_rates
Definition: fastscape.h:331
void save(std::map< std::string, std::string > &status_strings) const override
Functions::ParsedFunction< 1 > sea_level_function
Definition: fastscape.h:601
std::vector< double > sediment_rain_times
Definition: fastscape.h:339
unsigned int maximum_surface_refinement_level
Definition: fastscape.h:272
Functions::ParsedFunction< 2 > kd_distribution_function
Definition: fastscape.h:546
Functions::ParsedFunction< 2 > kf_distribution_function
Definition: fastscape.h:509
FastscapeOutputVariable additional_output_variable
Definition: fastscape.h:106
bool is_ghost_node(const unsigned int &index, const bool &exclude_boundaries) const
std::vector< std::vector< double > > get_aspect_values() const
void set_ghost_nodes(std::vector< double > &elevation, std::vector< double > &velocity_x, std::vector< double > &velocity_y, std::vector< double > &velocity_z, std::vector< double > &bedrock_transport_coefficient_array, const double &fastscape_timestep_in_years, const bool init) const
Table< dim, double > fill_data_table(const std::vector< double > &values, const TableIndices< dim > &size_idx, const unsigned int &fastscape_nx, const unsigned int &fastscape_ny) const
unsigned int surface_refinement_difference
Definition: fastscape.h:286
virtual void initialize() override
unsigned int additional_refinement_levels
Definition: fastscape.h:264
std::array< std::pair< double, double >, dim > grid_extent
Definition: fastscape.h:305
std::array< unsigned int, dim > table_intervals
Definition: fastscape.h:310
void serialize(Archive &ar, const unsigned int version)
virtual void compute_velocity_constraints_on_boundary(const DoFHandler< dim > &mesh_deformation_dof_handler, AffineConstraints< double > &mesh_velocity_constraints, const std::set< types::boundary_id > &boundary_ids) const override
void load(const std::map< std::string, std::string > &status_strings) override
void parse_parameters(ParameterHandler &prm) override
double boundary_composition(const types::boundary_id boundary_indicator, const Point< dim > &position, const unsigned int compositional_field) const override
bool needs_surface_stabilization() const override
unsigned int fastscape_steps_per_aspect_step
Definition: fastscape.h:209
void fill_fastscape_arrays(std::vector< double > &elevation, std::vector< double > &bedrock_transport_coefficient_array, std::vector< double > &bedrock_river_incision_rate_array, std::vector< double > &velocity_x, std::vector< double > &velocity_y, std::vector< double > &velocity_z, std::vector< std::vector< double >> &temporary_variables) const
static void declare_parameters(ParameterHandler &prm)
void apply_orographic_controls(const std::vector< double > &elevation, std::vector< double > &bedrock_river_incision_rate_array, std::vector< double > &bedrock_transport_coefficient_array) const
void initialize_fastscape(std::vector< double > &elevation, std::vector< double > &basement, std::vector< double > &silt_fraction, bool restart) const
unsigned int fastscape_boundary_conditions
Definition: fastscape.h:433
void execute_fastscape(std::vector< double > &elevation, std::vector< double > &extra_vtk_field, std::vector< double > &velocity_x, std::vector< double > &velocity_y, std::vector< double > &velocity_z, std::vector< double > &bedrock_transport_coefficient_array, const double &fastscape_timestep_in_years, const unsigned int &fastscape_iterations) const