ASPECT
fastscape.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011 - 2026 by the authors of the ASPECT code.
3 
4  This file is part of ASPECT.
5 
6  ASPECT is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2, or (at your option)
9  any later version.
10 
11  ASPECT is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with ASPECT; see the file LICENSE. If not see
18  <http://www.gnu.org/licenses/>.
19  */
20 
21 #ifndef _aspect_mesh_deformation_fastscape_h
22 #define _aspect_mesh_deformation_fastscape_h
23 
24 #include <aspect/global.h>
25 
28 
29 namespace aspect
30 {
31  namespace MeshDeformation
32  {
41  template <int dim>
42  class FastScape : public Interface<dim>, public SimulatorAccess<dim>
43  {
44  public:
48  ~FastScape() override;
49 
53  virtual void initialize () override;
54 
58  void update() override;
59 
66  virtual
67  void
68  compute_velocity_constraints_on_boundary(const DoFHandler<dim> &mesh_deformation_dof_handler,
69  AffineConstraints<double> &mesh_velocity_constraints,
70  const std::set<types::boundary_id> &boundary_ids) const override;
71 
81  double boundary_composition (const types::boundary_id boundary_indicator,
82  const Point<dim> &position,
83  const unsigned int compositional_field) const override;
84 
88  bool needs_surface_stabilization () const override;
89 
93  static
95 
99  void parse_parameters (ParameterHandler &prm) override;
100 
106  {
107  //
108  kf,
109  kd,
111  };
113 
118  template <class Archive>
119  void serialize (Archive &ar, const unsigned int version);
120 
124  void save (std::map<std::string, std::string> &status_strings) const override;
125 
129  void load (const std::map<std::string, std::string> &status_strings) override;
130 
131  private:
142  void set_ghost_nodes(std::vector<double> &elevation,
143  std::vector<double> &velocity_x,
144  std::vector<double> &velocity_y,
145  std::vector<double> &velocity_z,
146  std::vector<double> &bedrock_transport_coefficient_array,
147  const double &fastscape_timestep_in_years,
148  const bool init) const;
149 
153  bool is_ghost_node(const unsigned int &index,
154  const bool &exclude_boundaries) const;
155 
159  void fill_fastscape_arrays(std::vector<double> &elevation,
160  std::vector<double> &bedrock_transport_coefficient_array,
161  std::vector<double> &bedrock_river_incision_rate_array,
162  std::vector<double> &velocity_x,
163  std::vector<double> &velocity_y,
164  std::vector<double> &velocity_z,
165  std::vector<std::vector<double>> &temporary_variables) const;
166 
170  std::vector<std::vector<double>> get_aspect_values() const;
171 
175  void initialize_fastscape(std::vector<double> &elevation,
176  std::vector<double> &basement,
177  std::vector<double> &silt_fraction,
178  bool restart) const;
179 
183  void execute_fastscape(std::vector<double> &elevation,
184  std::vector<double> &extra_vtk_field,
185  std::vector<double> &velocity_x,
186  std::vector<double> &velocity_y,
187  std::vector<double> &velocity_z,
188  std::vector<double> &bedrock_transport_coefficient_array,
189  const double &fastscape_timestep_in_years,
190  const unsigned int &fastscape_iterations) const;
191 
196  void apply_orographic_controls(const std::vector<double> &elevation,
197  std::vector<double> &bedrock_river_incision_rate_array,
198  std::vector<double> &bedrock_transport_coefficient_array) const;
199 
203  Table<dim,double> fill_data_table(const std::vector<double> &values,
204  const TableIndices<dim> &size_idx,
205  const unsigned int &fastscape_nx,
206  const unsigned int &fastscape_ny) const;
207 
216 
223 
227  double fastscape_dx;
228 
232  double fastscape_dy;
233 
238 
243 
249 
253  unsigned int fastscape_nx;
254 
258  unsigned int fastscape_ny;
259 
264  double vexp;
265 
271 
279 
293 
301 
307 
311  std::array<std::pair<double,double>,dim> grid_extent;
312 
316  std::array<unsigned int, dim> table_intervals;
317 
323 
331 
337  std::vector<double> sediment_rain_rates;
338 
345  std::vector<double> sediment_rain_times;
346 
354 
364 
372 
377  mutable double last_output_time;
378 
391  unsigned int bottom;
392 
400  unsigned int top;
401 
409  unsigned int right;
410 
418  unsigned int left;
419 
427 
435 
440 
445  double bottom_flux;
446 
451  double top_flux;
452 
457  double right_flux;
458 
463  double left_flux;
478 
484 
491 
498 
506 
516 
522 
532 
543 
553 
559 
569 
603 
608 
614 
621 
627 
633 
639 
645 
651 
657 
663 
669 
675 
696 
704 
709  unsigned int wind_direction;
710 
717 
724 
730 
740  };
741  }
742 }
743 
744 #endif
std::vector< double > sediment_rain_rates
Definition: fastscape.h:337
void save(std::map< std::string, std::string > &status_strings) const override
Functions::ParsedFunction< 1 > sea_level_function
Definition: fastscape.h:607
std::vector< double > sediment_rain_times
Definition: fastscape.h:345
unsigned int maximum_surface_refinement_level
Definition: fastscape.h:278
Functions::ParsedFunction< 2 > kd_distribution_function
Definition: fastscape.h:552
Functions::ParsedFunction< 2 > kf_distribution_function
Definition: fastscape.h:515
FastscapeOutputVariable additional_output_variable
Definition: fastscape.h:112
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:292
virtual void initialize() override
unsigned int additional_refinement_levels
Definition: fastscape.h:270
std::array< std::pair< double, double >, dim > grid_extent
Definition: fastscape.h:311
std::array< unsigned int, dim > table_intervals
Definition: fastscape.h:316
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:215
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:439
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