From c38a7232e842f38bc73f4af00c7d5412290e90cc Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Tue, 12 Dec 2023 12:12:01 +0100 Subject: [PATCH 01/38] Initial plugins --- .../CMakeLists.txt | 44 ++ .../lithosphere_rift_IC.cc | 396 ++++++++++++++++++ .../lithosphere_rift_IC.h | 147 +++++++ .../lithosphere_rift_IT.h | 152 +++++++ .../lithosphere_rift_IT_2.cc | 320 ++++++++++++++ .../rift_box_initial_plastic_strain.cc | 341 +++++++++++++++ .../rift_box_initial_plastic_strain.h | 162 +++++++ 7 files changed, 1562 insertions(+) create mode 100644 cookbooks/initial_conditions_continental_rift/CMakeLists.txt create mode 100644 cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc create mode 100644 cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h create mode 100644 cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h create mode 100644 cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc create mode 100644 cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc create mode 100644 cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h diff --git a/cookbooks/initial_conditions_continental_rift/CMakeLists.txt b/cookbooks/initial_conditions_continental_rift/CMakeLists.txt new file mode 100644 index 00000000000..5763297edab --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/CMakeLists.txt @@ -0,0 +1,44 @@ +# Copyright (C) 2015 - 2021 by the authors of the ASPECT code. +# +# This file is part of ASPECT. +# +# ASPECT is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# ASPECT is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ASPECT; see the file LICENSE. If not see +# . + +CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0) + +FIND_PACKAGE(Aspect 2.4.0 QUIET HINTS ${Aspect_DIR} ../ ../../ $ENV{ASPECT_DIR}) + +IF (NOT Aspect_FOUND) + MESSAGE(FATAL_ERROR "\n" + "Could not find a valid ASPECT build/installation directory. " + "Please specify the directory where you are building ASPECT by passing\n" + " -D Aspect_DIR=\n" + "to cmake or by setting the environment variable ASPECT_DIR in your shell " + "before calling cmake. See the section 'How to write a plugin' in the " + "manual for more information.") +ENDIF () + +DEAL_II_INITIALIZE_CACHED_VARIABLES() + +SET(TARGET "initial_conditions_continental_rift") +PROJECT(${TARGET}) + +ADD_LIBRARY(${TARGET} SHARED +lithosphere_rift_IC.cc +lithosphere_rift_IT_2.cc +lithosphere_rift_topo.cc +rift_box_initial_plastic_strain.cc +) +ASPECT_SETUP_PLUGIN(${TARGET}) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc new file mode 100644 index 00000000000..808a4349b49 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc @@ -0,0 +1,396 @@ +/* + Copyright (C) 2017 by the authors of the ASPECT code. + + This file is part of ASPECT. + + ASPECT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + ASPECT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ASPECT; see the file LICENSE. If not see + . +*/ + + +#include "lithosphere_rift_IC.h" +#include "lithosphere_rift_IT.h" +#include +#include + + +namespace aspect +{ + namespace InitialComposition + { + template + void + LithosphereRift:: + initialize () + { + // Check that the required initial composition model is used + const std::vector active_initial_temperature_models = this->get_initial_temperature_manager().get_active_initial_temperature_names(); + AssertThrow(find(active_initial_temperature_models.begin(),active_initial_temperature_models.end(), "lithosphere with rift") != active_initial_temperature_models.end(), + ExcMessage("The lithosphere with rift initial composition plugin requires the lithosphere with rift initial temperature plugin.")); + } + + template + double + LithosphereRift:: + initial_composition (const Point &position, + const unsigned int compositional_index) const + { + // Retrieve the indices of the fields that represent the lithospheric layers. + // We assume a 3-layer system with an upper crust, lower crust and lithospheric mantle + const unsigned int id_upper = this->introspection().compositional_index_for_name("upper"); + const unsigned int id_lower = this->introspection().compositional_index_for_name("lower"); + const unsigned int id_mantle_L = this->introspection().compositional_index_for_name("mantle_L"); + + // Determine coordinate system + const bool cartesian_geometry = dynamic_cast *>(&this->get_geometry_model()) != NULL ? true : false; + + const Point surface_point = surface_position(position, cartesian_geometry); + + // Get the distance to the line segments along a path parallel to the surface + const double distance_to_rift_axis = distance_to_rift(surface_point); + + // Get the signed distance to a polygon of different lithospheric thicknesses + const std::pair distance_to_L_polygon = distance_to_polygon(surface_point); + + // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere + // (in this exact order) based on the distance from the rift axis. + const double local_upper_crust_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][0] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[0]) + * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + const double local_lower_crust_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) + * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + const double local_mantle_lithosphere_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) + * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + +//sb std::cout << "Initial compo " << position[0] << " " << compositional_index << " " << local_upper_crust_thickness << " " << local_lower_crust_thickness << " " << local_mantle_lithosphere_thickness << std::endl; + + // Compute depth + const double depth = this->get_geometry_model().depth(position); + + // Check which layer we're in and return value. + if (depth <= local_upper_crust_thickness && compositional_index == id_upper) + return 1.; + else if (depth > local_upper_crust_thickness && depth <= local_upper_crust_thickness+local_lower_crust_thickness && compositional_index == id_lower) + return 1.; + else if (depth > local_upper_crust_thickness+local_lower_crust_thickness && depth <= local_upper_crust_thickness+local_lower_crust_thickness+local_mantle_lithosphere_thickness && compositional_index == id_mantle_L) + return 1.; + else + return 0.; + } + + template + double + LithosphereRift:: + distance_to_rift (const Point &surface_position) const + { + // Initiate distance with large value + double distance_to_rift_axis = 1e23; + double temp_distance = 0; + + // Loop over all line segments + for (unsigned int i_segments = 0; i_segments < point_list.size(); ++i_segments) + { + temp_distance = (dim == 2) ? std::abs(surface_position[0]-point_list[i_segments][0][0]) : std::abs(Utilities::distance_to_line(point_list[i_segments], Point<2>(surface_position[0],surface_position[dim-2]))); + + // Get the minimum distance + distance_to_rift_axis = std::min(distance_to_rift_axis, temp_distance); + } + + return distance_to_rift_axis; + } + + template + Point + LithosphereRift:: + surface_position (const Point &position, + const bool cartesian_geometry) const + { + Point surface_point; + if (cartesian_geometry) + { + for (unsigned int d=0; d spherical_point = Utilities::Coordinates::cartesian_to_spherical_coordinates(position); + // return lon [degrees], lat [degrees] + for (unsigned int d=0; d + std::pair + LithosphereRift:: + distance_to_polygon (const Point &surface_position) const + { + // Inside is positive, outside negative. We assume no overlap of the different polygons. + double max_distance = -1e24; + unsigned int max_distance_polygon = 0; + for (unsigned int n = 0; npolygon_point_list[n][0][0] && surface_position[0](polygon_point_list[n], Point<2>(surface_position[0],surface_position[dim-2])); +//sb std::cout << "Distance to polygon " << n << " " << surface_position << " " << temp_distance << std::endl; + } + +// std::cout << "Distance to polygon " << dim << " " << surface_position << " " << temp_distance << std::endl; + if (temp_distance > max_distance) + { + max_distance = temp_distance; + max_distance_polygon = n; + } + } + return std::pair (max_distance, max_distance_polygon); + } + + template + void + LithosphereRift::declare_parameters (ParameterHandler &prm) + { + prm.enter_subsection ("Initial composition model"); + { + prm.enter_subsection("Lithosphere with rift"); + { + prm.declare_entry ("Standard deviation of Gaussian rift geometry", "20000", + Patterns::Double (0), + "The standard deviation of the Gaussian distribution of the amplitude of the strain noise. " + "Note that this parameter is taken to be the same for all rift segments. " + "Units: $m$ or degrees."); + prm.declare_entry ("Half width of polygon smoothing", "20000", + Patterns::Double (0), + "The half width of the hyperbolic tangent smoothing used to transition to the lithospheric thicknesses of the polygon. " + "Note that this parameter is taken to be the same for all polygons. " + "Units: $m$ or degrees."); + prm.declare_entry ("Blend polygons and rifts", "true", + Patterns::Bool (), + "Whether or not to blend the contributions of polygons and the rift. For true, they're blend together. " + "For false, the polygon thicknesses are taken as the local thicknesses. " + "Units: /."); + prm.declare_entry ("Amplitude of Gaussian rift geometry", "0.2", + Patterns::List(Patterns::Double (-1,1)), + "The amplitude of the Gaussian distribution of the amplitude of the strain noise. " + "Note that this parameter is taken to be the same for all rift segments, but can " + "vary per lithosphere layer. " + "Units: none."); + prm.declare_entry ("Layer thicknesses", "30000.", + Patterns::List(Patterns::Double(0)), + "List of thicknesses for the bottom of the lithospheric layers," + "for a total of N+1 values, where N is the number of compositional fields." + "If only one value is given, then all use the same value. Units: $m$"); + prm.declare_entry ("Rift axis line segments", + "", + Patterns::Anything(), + "Set the line segments that represent the rift axis. Each segment is made up of " + "two points that represent horizontal coordinates (x,y) or (lon,lat). " + "The exact format for the point list describing the segments is " + "\"x1,y1>x2,y2;x2,y2>x3,y3;x4,y4>x5,y5\". Note that the segments can be connected " + "or isolated. The units of the coordinates are " + "dependent on the geometry model. In the box model they are in meters, in the " + "chunks they are in degrees."); + prm.declare_entry ("Lithospheric polygons", + "", + Patterns::List(Patterns::Anything()), + "Set the polygons that represent an area of different lithospheric thickness. " + "The polygons are separated by semicolons." + "Each polygon is a list of " + "points that represent horizontal coordinates (x,y) or (lon,lat). " + "The exact format for the point list describing a polygon is " + "\"x1,y1>x2,y2>x3,y3>x4,y4>x5,y5\". Note that the polygon is assumed to be closed. " + "The units of the coordinates are " + "dependent on the geometry model. In the box model they are in meters, in the " + "chunks they are in degrees."); + prm.declare_entry ("Lithospheric polygon layer thicknesses", "30000.", + Patterns::List(Patterns::List(Patterns::Double(0),0,3,","),0,10,";"), + "List of thicknesses of the lithospheric layers for each polygon." + "For each polygon a total of 3 values should be given (upper crust, lower crust, mantle lithosphere)." + "If only one value is given, then all use the same value. Units: $m$"); + + } + prm.leave_subsection(); + } + prm.leave_subsection(); + } + + template + void + LithosphereRift::parse_parameters (ParameterHandler &prm) + { + // Check that the required compositional fields exist. + AssertThrow(this->introspection().compositional_name_exists("upper"),ExcMessage("We need a compositional field called 'upper' representing the upper crust.")); + AssertThrow(this->introspection().compositional_name_exists("lower"),ExcMessage("We need a compositional field called 'lower' representing the lower crust.")); + AssertThrow(this->introspection().compositional_name_exists("mantle_L"),ExcMessage("We need a compositional field called 'mantle_L' representing the lithospheric part of the mantle.")); + + prm.enter_subsection ("Initial composition model"); + { + prm.enter_subsection("Lithosphere with rift"); + { + sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); + sigma_polygon = prm.get_double ("Half width of polygon smoothing"); + blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); + A = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), + 3, + "Amplitude of Gaussian rift geometry"); + thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), + 3, + "Layer thicknesses"); + // Read in the string of segments + const std::string temp_all_segments = prm.get("Rift axis line segments"); + // Split the string into segment strings + const std::vector temp_segments = Utilities::split_string_list(temp_all_segments,';'); + const unsigned int n_temp_segments = temp_segments.size(); + point_list.resize(n_temp_segments); + // Loop over the segments to extract the points + for (unsigned int i_segment = 0; i_segment < n_temp_segments; i_segment++) + { + // In 3d a line segment consists of 2 points, + // in 2d only 1 (ridge axis orthogonal to x and y) + + const std::vector temp_segment = Utilities::split_string_list(temp_segments[i_segment],'>'); + + if (dim == 3) + { + AssertThrow(temp_segment.size() == 2,ExcMessage ("The given coordinate '" + temp_segment[i_segment] + "' is not correct. " + "It should only contain 2 parts: " + "the two points of the segment, separated by a '>'.")); + } + else + { + AssertThrow(temp_segment.size() == 1,ExcMessage ("The given coordinate '" + temp_segment[i_segment] + "' is not correct. " + "It should only contain 1 part: " + "the point representing the rift axis.")); + } + + // Loop over the dim-1 points of each segment (i.e. in 2d only 1 point is required for a 'segment') + for (unsigned int i_points = 0; i_points < dim-1; i_points++) + { + const std::vector temp_point = Utilities::string_to_double(Utilities::split_string_list(temp_segment[i_points],',')); + if (dim == 3) + { + AssertThrow(temp_point.size() == 2,ExcMessage ("The given coordinates of segment '" + temp_segment[i_points] + "' are not correct. " + "It should only contain 2 parts: " + "the two coordinates of the segment end point, separated by a ','.")); + } + else + { + AssertThrow(temp_point.size() == 1,ExcMessage ("The given coordinates of segment '" + temp_segment[i_points] + "' are not correct. " + "It should only contain 1 part: " + "the one coordinate of the segment end point.")); + } + + // Add the point to the list of points for this segment + point_list[i_segment][i_points][0] = temp_point[0]; + point_list[i_segment][i_points][1] = temp_point[dim-2]; + } + } + + // Split the string into the separate polygons + const std::vector temp_polygons = Utilities::split_string_list(prm.get("Lithospheric polygons"),';'); + const std::vector temp_thicknesses = Utilities::split_string_list(prm.get("Lithospheric polygon layer thicknesses"),';'); + const unsigned int n_polygons = temp_polygons.size(); + AssertThrow(temp_thicknesses.size() == n_polygons, + ExcMessage("The number of polygons (" + Utilities::int_to_string(n_polygons) + + ") does not correspond to the number of polygons for which a thickness is prescribed (" + + Utilities::int_to_string(temp_thicknesses.size()) + ").")); + + + + polygon_point_list.resize(n_polygons); + polygon_thicknesses.resize(n_polygons); + + for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) + { + polygon_thicknesses[i_polygons] = Utilities::string_to_double(Utilities::split_string_list(temp_thicknesses[i_polygons],',')); + AssertThrow(polygon_thicknesses[i_polygons].size()==3, + ExcMessage ("The number of layer thicknesses should be equal to 3 for polygon: " + Utilities::int_to_string(i_polygons) + + " but it is " + Utilities::int_to_string(polygon_thicknesses[i_polygons].size()))); + +//sb std::cout << "polygon thicknesses "; +//sb for (unsigned int q=0; q temp_points = Utilities::split_string_list(temp_polygons[i_polygons],'>'); + const unsigned int n_temp_points = temp_points.size(); + if (dim == 3) + { + AssertThrow(n_temp_points>=3, ExcMessage ("The number of polygon points should be equal to or larger than 3 in 3d.")); + } + else + { + AssertThrow(n_temp_points==2, ExcMessage ("The number of polygon points should be equal to 2 in 2d.")); + } + polygon_point_list[i_polygons].resize(n_temp_points); + // Loop over the points of the polygon. Each point should consist of 2 values (lon and lat coordinate). + for (unsigned int i_points = 0; i_points < n_temp_points; i_points++) + { + const std::vector temp_point = Utilities::string_to_double(Utilities::split_string_list(temp_points[i_points],',')); + AssertThrow(temp_point.size() == dim-1,ExcMessage ("The given coordinates of point '" + temp_points[i_points] + "' are not correct. " + "It should only contain 1 (2d) or 2 (in 3d) parts: " + "the longitude/x (and latitude/y in 3d) coordinate (separated by a ',').")); + + // Add the point to the list of points for this segment + polygon_point_list[i_polygons][i_points][0] = temp_point[0]; + polygon_point_list[i_polygons][i_points][1] = temp_point[dim-2]; + } + if (dim == 2) + AssertThrow(polygon_point_list[i_polygons][0][0] < polygon_point_list[i_polygons][1][0], ExcMessage("The order of the x coordinates of the 2 points " + "of each 2d polygon should be ascending. ")); + + } + } + prm.leave_subsection(); + } + prm.leave_subsection(); + } + + } +} + +// explicit instantiations +namespace aspect +{ + namespace InitialComposition + { + ASPECT_REGISTER_INITIAL_COMPOSITION_MODEL(LithosphereRift, + "lithosphere with rift", + "A class that implements initial conditions for a continental rift " + "by computing the thickness of the upper crust, lower crust and mantle " + "lithosphere layers. This thickness decreases towards the axis of the " + "rift according to a Gaussian distribution whose amplitude and standard " + "deviation can be specified from the input file. " + "Additional variations in layer thicknesses can be introduced through the " + "addition of polygons. Note that the different polygons " + "are assumed not to overlap. ") + } +} diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h new file mode 100644 index 00000000000..267914645ba --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h @@ -0,0 +1,147 @@ +/* + Copyright (C) 2017 by the authors of the ASPECT code. + + This file is part of ASPECT. + + ASPECT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + ASPECT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ASPECT; see the file LICENSE. If not see + . +*/ + + +#ifndef _aspect_initial_composition_lithosphere_rift_h +#define _aspect_initial_composition_lithosphere_rift_h + +#include +#include + +namespace aspect +{ + namespace InitialComposition + { + using namespace dealii; + + /** + * A class that implements initial conditions for the composition + * considering a lithosphere consisting of an upper crust, + * lower crust and mantle part. + * + * @ingroup InitialCompositionModels + */ + template + class LithosphereRift : public Interface, + public SimulatorAccess + { + public: + + /** + * Initialization function. This function is called once at the + * beginning of the program. Checks preconditions. + */ + void + initialize (); + + /** + * Return the initial composition as a function of position and number + * of compositional field. + */ + virtual + double initial_composition (const Point &position, + const unsigned int compositional_index) const; + + /** + * Return the overall shortest distance to the rift segments + */ + double distance_to_rift (const Point &position) const; + + /* + * Return the overall shortest distance to the polygon segments + */ + std::pair distance_to_polygon (const Point &position) const; + + /* + * Return the position of the point in surface coordinates + * i.e. x(,y) in meters or lon(,lat) in degrees. + */ + Point surface_position (const Point &position, + const bool cartesian_geometry) const; + + /** + * Declare the parameters this class takes through input files. + */ + static + void + declare_parameters (ParameterHandler &prm); + + /** + * Read the parameters this class declares from the parameter file. + */ + virtual + void + parse_parameters (ParameterHandler &prm); + + private: + + /** + * The standard deviation of the Gaussian amplitude of the lithospheric thicknesses + * with distance from the rift axis. + */ + double sigma_rift; + + /** + * The half width of the hyperbolic tangent used to smooth the transitions + * between reference and polygon lithospheric thicknesses. + */ + double sigma_polygon; + + /** + * Whether or not to take the polygon thicknesses as dominant, or to smooth them + * gradually into rift areas. + */ + bool blend_rift_and_polygon; + + /** + * The maximum amplitude of the Gaussian distribution of the lithospheric thicknesses + * with distance from the rift axis. It should have values between -1 and 1, where positive + * numbers represent a reduction in thickness and negative numbers an increase. + */ + std::vector A; + + /** + * The list of line segments consisting of two 2d coordinates per segment. + * The segments represent the rift axis. + */ + std::vector,2 > > point_list; + + /** + * The list of lists of polygon points. + * The polygon represents an area of different lithospheric thicknesses. + */ + std::vector > > polygon_point_list; + + /** + * Vector for the reference field thicknesses away from the rift. + */ + std::vector thicknesses; + + /** + * Vector for the field thicknesses inside the polygons. + */ + std::vector > polygon_thicknesses; + + }; + } +} + + +#endif diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h new file mode 100644 index 00000000000..954ced16112 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h @@ -0,0 +1,152 @@ +/* + Copyright (C) 2014 - 2016 by the authors of the ASPECT code. + + This file is part of ASPECT. + + ASPECT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + ASPECT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ASPECT; see the file doc/COPYING. If not see + . +*/ + + + +#ifndef _aspect_initial_temperature_lithosphere_rift_h +#define _aspect_initial_temperature_lithosphere_rift_h + +#include +#include + +namespace aspect +{ + + + namespace InitialTemperature + { + + /** + * + * @ingroup InitialTemperatures + */ + template + class LithosphereRift : public Interface, public ::aspect::SimulatorAccess + { + public: + /** + * Constructor. + */ + LithosphereRift (); + + /** + * Initialization function. This function is called once at the + * beginning of the program. Checks preconditions. + */ + void + initialize (); + + /** + * Return the initial temperature as a function of position. + */ + virtual + double initial_temperature (const Point &position) const; + + /** + * Return the initial temperature as a function of depth and + * the local layer thicknesses. + */ + virtual + double temperature (const double depth, + const std::vector thicknesses) const; + + /** + * Declare the parameters this class takes through input files. + */ + static + void + declare_parameters (ParameterHandler &prm); + + /** + * Read the parameters this class declares from the parameter file. + */ + virtual + void + parse_parameters (ParameterHandler &prm); + + private: + /** + * Surface temperature + */ + double T0; + + /** + * LAB isotherm temperature + */ + double LAB_isotherm; + + /** + * Wheter or not to take the polygon thicknesses as dominant, or to smooth them + * gradually into rift areas. + */ + bool blend_rift_and_polygon; + + /** + * Vector for field heat production rates. + */ + std::vector heat_productivities; + + /** + * Vector for thermal conductivities. + */ + std::vector conductivities; + + /** + * Vector for field densities. + */ + std::vector densities; + + /** + * Vector for the reference field thicknesses. + */ + std::vector thicknesses; + + /** + * Vector for the reference field thicknesses away from the rift. + */ + std::vector > polygon_thicknesses; + + /** + * The standard deviation of the Gaussian amplitude of the lithospheric thicknesses. + */ + double sigma_rift; + double sigma_polygon; + + /** + * The maximum amplitude of the Gaussian distribution of the lithospheric thicknesses + * with distance from the rift axis. It should have values between -1 and 1, where positive + * numbers represent a reduction in thickness and negative numbers an increase. + */ + std::vector A; + + /** + * Whether or not to use a compensation depth for the temperature + * up to which the LAB isotherm is prescribed. If yes, temperatures + * in the sub-lithospheric mantle are set to the LAB isotherm up + * to the depth held by the parameter compensation_depth. + */ + bool use_compensation_depth; + double compensation_depth; + }; + } +} + + +#endif diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc new file mode 100644 index 00000000000..8df533ac492 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -0,0 +1,320 @@ +/* + Copyright (C) 2011 - 2016 by the authors of the ASPECT code. + + This file is part of ASPECT. + + ASPECT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + ASPECT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ASPECT; see the file doc/COPYING. If not see + . +*/ + + +#include "lithosphere_rift_IT.h" +#include +#include "lithosphere_rift_IC.h" +#include +#include +#include +#include + +#include + +namespace aspect +{ + namespace InitialTemperature + { + template + LithosphereRift::LithosphereRift () + {} + + + template + void + LithosphereRift:: + initialize () + { + + // Check that the required radioactive heating model ("compositional heating") is used + const std::vector &heating_models = this->get_heating_model_manager().get_active_heating_model_names(); + AssertThrow(std::find(heating_models.begin(), heating_models.end(), "compositional heating") != heating_models.end(), + ExcMessage("The lithosphere with rift initial temperature plugin requires the compositional heating plugin.")); + + // Check that the required material model ("visco plastic") is used + //AssertThrow((dynamic_cast *> (const_cast *>(&this->get_material_model()))) != 0, + AssertThrow((dynamic_cast *> (const_cast *>(&this->get_material_model()))) != 0, + ExcMessage("The lithosphere with rift initial temperature plugin requires the viscoplastic material model plugin.")); + } + + + template + double + LithosphereRift:: + initial_temperature (const Point &position) const + { + // Determine coordinate system + const bool cartesian_geometry = dynamic_cast *>(&this->get_geometry_model()) != NULL ? true : false; + + // Get the distance to the line segments along a path parallel to the surface + //InitialComposition::LithosphereRift *ic = dynamic_cast *> (const_cast *>(&this->get_initial_composition())); + + double distance_to_rift_axis = 1e23; + Point surface_position; + std::pair distance_to_L_polygon; + for (typename std::list > >::const_iterator it = this->get_initial_composition_manager().get_active_initial_composition_conditions().begin(); + it != this->get_initial_composition_manager().get_active_initial_composition_conditions().end(); + ++it) + if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) + { + surface_position = ic->surface_position(position, cartesian_geometry); + distance_to_rift_axis = ic->distance_to_rift(surface_position); + distance_to_L_polygon = ic->distance_to_polygon(surface_position); + } + + // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere + // based on the distance from the rift axis. + std::vector local_thicknesses(3); + local_thicknesses[0] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][0] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[0]) + *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : + (1.0 - A[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + local_thicknesses[1] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) + *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : + (1.0 - A[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + local_thicknesses[2] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) + *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : + (1.0 - A[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + + const double depth = this->get_geometry_model().depth(position); + + return temperature(depth, local_thicknesses); + } + + + template + double + LithosphereRift:: + temperature (const double depth, + const std::vector layer_thicknesses) const + { + // Compute some constants + const double a = 0.5*densities[0]*heat_productivities[0]*layer_thicknesses[0] + 0.5*densities[1]*heat_productivities[1]*layer_thicknesses[1] + conductivities[0]/layer_thicknesses[0]*T0; + const double b = 1./(conductivities[0]/layer_thicknesses[0]+conductivities[1]/layer_thicknesses[1]); + const double c = 0.5*densities[1]*heat_productivities[1]*layer_thicknesses[1] + conductivities[2]/layer_thicknesses[2]*LAB_isotherm; + const double d = 1./(conductivities[1]/layer_thicknesses[1]+conductivities[2]/layer_thicknesses[2]); + + //Temperature at boundary between layer 1 and 2 + const double T1 = (a*b + conductivities[1]/layer_thicknesses[1]*c*d*b) / (1.-(conductivities[1]*conductivities[1])/(layer_thicknesses[1]*layer_thicknesses[1])*d*b); + //Temperature at boundary between layer 2 and 3 + const double T2 = (c + conductivities[1]/layer_thicknesses[1]*T1) * d; + + // Temperature in layer 1 + if (depth < layer_thicknesses[0]) + return -0.5*densities[0]*heat_productivities[0]/conductivities[0]*std::pow(depth,2) + (0.5*densities[0]*heat_productivities[0]*layer_thicknesses[0]/conductivities[0] + (T1-T0)/layer_thicknesses[0])*depth + T0; + // Temperature in layer 2 + else if (depth < layer_thicknesses[0]+layer_thicknesses[1]) + return -0.5*densities[1]*heat_productivities[1]/conductivities[1]*std::pow(depth-layer_thicknesses[0],2.) + (0.5*densities[1]*heat_productivities[1]*layer_thicknesses[1]/conductivities[1] + (T2-T1)/layer_thicknesses[1])*(depth-layer_thicknesses[0]) + T1; + // Temperature in layer 3 + else if (depth < layer_thicknesses[0]+layer_thicknesses[1]+layer_thicknesses[2]) + return (LAB_isotherm-T2)/layer_thicknesses[2] *(depth-layer_thicknesses[0]-layer_thicknesses[1]) + T2; + // Return a constant sublithospheric temperature of . + // This way we can combine the continental geotherm with an adiabatic profile from the input file + // using the "if valid" operator on the "List of initial temperature models" + else if (use_compensation_depth && depth < compensation_depth) + return LAB_isotherm; + else + return std::numeric_limits::quiet_NaN(); + } + + + template + void + LithosphereRift::declare_parameters (ParameterHandler &prm) + { + prm.enter_subsection ("Initial temperature model"); + { + prm.enter_subsection("Lithosphere with rift"); + { + + prm.declare_entry ("Surface temperature", "273.15", + Patterns::Double (0), + "The value of the surface temperature. Units: Kelvin."); + prm.declare_entry ("LAB isotherm temperature", "1673.15", + Patterns::Double (0), + "The value of the isothermal boundary temperature assumed at the LAB " + "and up to the reference depth . Units: Kelvin."); + prm.declare_entry ("Use temperature compensation depth", "false", + Patterns::Bool (), + "Whether or not to use a compensation depth to which the LAB isotherm temperature " + "is prescribed when no lithosphere is present. Below this depth, 10 times the isotherm " + "is prescribed . Units: -."); + prm.declare_entry ("Temperature compensation depth", "100e3", + Patterns::Double (0), + "The depth of the temperature compensation depth, " + "i.e. the depth up to which the LAB isotherm is prescribed when not in the lithosphere. Units: Kelvin."); + } + prm.leave_subsection(); + } + prm.leave_subsection(); + } + + + + template + void + LithosphereRift::parse_parameters (ParameterHandler &prm) + { + unsigned int n_fields = 0; + prm.enter_subsection ("Compositional fields"); + { + n_fields = prm.get_integer ("Number of fields"); + } + prm.leave_subsection(); + + prm.enter_subsection ("Initial composition model"); + { + prm.enter_subsection("Lithosphere with rift"); + { + sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); + sigma_polygon = prm.get_double ("Half width of polygon smoothing"); + blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); + A = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), + 3, + "Amplitude of Gaussian rift geometry"); + thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), + 3, + "Layer thicknesses"); + // Split the string into the separate polygons + const std::vector temp_thicknesses = Utilities::split_string_list(prm.get("Lithospheric polygon layer thicknesses"),';'); + const unsigned int n_polygons = temp_thicknesses.size(); + polygon_thicknesses.resize(n_polygons); + for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) + { + polygon_thicknesses[i_polygons] = Utilities::string_to_double(Utilities::split_string_list(temp_thicknesses[i_polygons],',')); + AssertThrow(polygon_thicknesses[i_polygons].size()==3, ExcMessage ("The number of layer thicknesses should be equal to 3.")); + } + } + prm.leave_subsection(); + } + prm.leave_subsection(); + + prm.enter_subsection ("Initial temperature model"); + { + prm.enter_subsection("Lithosphere with rift"); + { + LAB_isotherm = prm.get_double ("LAB isotherm temperature"); + T0 = prm.get_double ("Surface temperature"); + use_compensation_depth = prm.get_bool ("Use temperature compensation depth"); + compensation_depth = prm.get_double ("Temperature compensation depth"); + } + prm.leave_subsection(); + } + prm.leave_subsection(); + + + // Retrieve the indices of the fields that represent the lithospheric layers. + AssertThrow(this->introspection().compositional_name_exists("upper"),ExcMessage("We need a compositional field called 'upper' representing the upper crust.")); + AssertThrow(this->introspection().compositional_name_exists("lower"),ExcMessage("We need a compositional field called 'lower' representing the lower crust.")); + AssertThrow(this->introspection().compositional_name_exists("mantle_L"),ExcMessage("We need a compositional field called 'mantle_L' representing the lithospheric part of the mantle.")); + + // For now, we assume a 3-layer system with an upper crust, lower crust and lithospheric mantle + const unsigned int id_upper = this->introspection().compositional_index_for_name("upper"); + const unsigned int id_lower = this->introspection().compositional_index_for_name("lower"); + const unsigned int id_mantle_L = this->introspection().compositional_index_for_name("mantle_L"); + + // Retrieve other material properties set in different sections such that there + // is no need to set them twice. + + prm.enter_subsection("Heating model"); + { + prm.enter_subsection("Compositional heating"); + { + // The heating model compositional heating prefixes an entry for the background material + const std::vector temp_heat_productivities = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Compositional heating values"))), + n_fields+1, + "Compositional heating values"); + // This sets the heat productivity in W/m3 units + heat_productivities.push_back(temp_heat_productivities[id_upper+1]); + heat_productivities.push_back(temp_heat_productivities[id_lower+1]); + heat_productivities.push_back(temp_heat_productivities[id_mantle_L+1]); + } + prm.leave_subsection(); + } + prm.leave_subsection(); + + prm.enter_subsection("Material model"); + { + prm.enter_subsection("Visco Plastic"); + { + // The material model viscoplastic prefixes an entry for the background material + const std::vector temp_densities = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Densities"))), + n_fields+1, + "Densities"); + const std::vector temp_thermal_diffusivities = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Thermal diffusivities"))), + n_fields+1, + "Thermal diffusivities"); + const std::vector temp_heat_capacities = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Heat capacities"))), + n_fields+1, + "Heat capacities"); + + densities.push_back(temp_densities[id_upper+1]); + densities.push_back(temp_densities[id_lower+1]); + densities.push_back(temp_densities[id_mantle_L+1]); + + // Thermal diffusivity kappa = k/(rho*cp), so thermal conducitivity k = kappa*rho*cp + conductivities.push_back(temp_thermal_diffusivities[id_upper+1] * densities[0] * temp_heat_capacities[id_upper+1]); + conductivities.push_back(temp_thermal_diffusivities[id_lower+1] * densities[1] * temp_heat_capacities[id_lower+1]); + conductivities.push_back(temp_thermal_diffusivities[id_mantle_L+1] * densities[2] * temp_heat_capacities[id_mantle_L+1]); + + // To obtain the radioactive heating rate in W/kg, we divide the volumetric heating rate by density + AssertThrow(heat_productivities.size() == 3 && densities.size() == 3 && conductivities.size() == 3, + ExcMessage("The entries for density, conductivity and heat production do not match with the expected number of layers (3).")) + + for (unsigned int i = 0; i<3; ++i) + heat_productivities[i] /= densities[i]; + } + prm.leave_subsection(); + } + prm.leave_subsection(); + } + } + + +} + + + + +// explicit instantiations +namespace aspect +{ + namespace InitialTemperature + { + ASPECT_REGISTER_INITIAL_TEMPERATURE_MODEL(LithosphereRift, + "lithosphere with rift", + "This is a temperature initial condition that " + "computes a continental geotherm based on the " + "conductive equations of Turcotte and Schubert Ch. 4.6. " + "The geotherm can be computed for any number of crustal " + "layers, for each of which a density, heat production and thermal " + "conductivity should be supplied. " + "Make sure the top and bottom temperatures of the lithosphere " + "agree with temperatures set in for example the temperature " + "boundary conditions. " + "The thickness of the lithospheric layers is adapted for distance " + "to the rift specified with the InitialComposition plugin `lithosphere " + "with rift'. Additional variations in lithospheric thickness can be " + "added through specifying polygonal areas of different thicknesses. ") + } +} diff --git a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc new file mode 100644 index 00000000000..e93162f67fa --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc @@ -0,0 +1,341 @@ +/* + Copyright (C) 2011 - 2016 by the authors of the ASPECT code. + + This file is part of ASPECT. + + ASPECT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + ASPECT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ASPECT; see the file doc/COPYING. If not see + . + */ + + +#include "rift_box_initial_plastic_strain.h" +#include +#include +#include +#include + +namespace aspect +{ + namespace InitialComposition + { + template + RiftBoxInitialPlasticStrain::RiftBoxInitialPlasticStrain () + {} + + template + void + RiftBoxInitialPlasticStrain::initialize () + { + AssertThrow(Plugins::plugin_type_matches >(this->get_material_model()), + ExcMessage("This initial condition only makes sense in combination with the visco_plastic material model.")); + + + // From shear_bands.cc + Point extents_max; + TableIndices size_idx; + for (unsigned int d=0; d white_noise; + white_noise.TableBase::reinit(size_idx); + + // Max of each direction (m) + extents_max = extents + origin; + + // Add initial topography to vertical direction + extents_max[dim-1] += maximum_initial_topography; + + for (unsigned int d=0; d idx; + + for (unsigned int i=0; i (grid_extents, + grid_intervals, + white_noise); + } + + template + double + RiftBoxInitialPlasticStrain:: + initial_composition (const Point &position, const unsigned int n_comp) const + { + // If n_comp does not represent the strain field, + // return 0 right away. + if (n_comp != strain_composition_number) + return 0.0; + + // Initiate distance with large value + double distance_to_rift_axis = 1e23; + double temp_distance = 0; + + const Point natural_coords = position; + + // Loop over all line segments + for (unsigned int i_segments = 0; i_segments < point_list.size(); ++i_segments) + { + if (dim == 2) + temp_distance = std::abs(natural_coords[0]-point_list[i_segments][0][0]); + else + { + // Get the surface coordinates by dropping the last coordinate + const Point<2> surface_position = Point<2>(natural_coords[0],natural_coords[1]); + temp_distance = std::abs(Utilities::distance_to_line(point_list[i_segments], surface_position)); + } + + // Get the minimum distance + distance_to_rift_axis = std::min(distance_to_rift_axis, temp_distance); + } + + // Smoothing of noise with height (depth with respect to the unperturbed surface) + const double depth_smoothing = 0.5 * (1.0 + std::tanh((position[dim-1] - strain_height) / strain_halfwidth)); + // Smoothing of noise with lateral distance to the rift axis + const double noise_amplitude = A * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma,2)))) * depth_smoothing; + + // Add randomness + return noise_amplitude * interpolate_noise->value(natural_coords); + } + + template + void + RiftBoxInitialPlasticStrain::declare_parameters (ParameterHandler &prm) + { + prm.enter_subsection("Initial composition model"); + { + prm.enter_subsection("Rift box initial plastic strain"); + { + prm.declare_entry ("Random number generator seed", "0", + Patterns::Double (0), + "The value of the seed used for the random number generator. " + "Units: none."); + prm.declare_entry ("Standard deviation of Gaussian noise amplitude distribution", "20000", + Patterns::Double (0), + "The standard deviation of the Gaussian distribution of the amplitude of the strain noise. " + "Note that this parameter is taken to be the same for all rift segments. " + "Units: $m$ or degrees."); + prm.declare_entry ("Maximum amplitude of Gaussian noise amplitude distribution", "0.2", + Patterns::Double (0), + "The amplitude of the Gaussian distribution of the amplitude of the strain noise. " + "Note that this parameter is taken to be the same for all rift segments. " + "Units: none."); + prm.declare_entry ("Depth around which Gaussian noise is smoothed out", "40000", + Patterns::Double (0), + "The depth around which smoothing out of the strain noise starts with a hyperbolic tangent. " + "Note that this parameter is taken to be the same for all rift segments. Also, depth " + "is with respect to the unperturbed surface of the box domain. " + "Units: $m$."); + prm.declare_entry ("Halfwidth with which Gaussian noise is smoothed out in depth", "40000", + Patterns::Double (0), + "The halfwidth with which smoothing out of the strain noise is done with a hyperbolic tangent. " + "Note that this parameter is taken to be the same for all rift segments. " + "Units: $m$."); + prm.declare_entry ("Rift axis line segments", + "", + Patterns::Anything(), + "Set the line segments that represent the rift axis. In 3d each segment is made up of " + "two points that represent horizontal coordinates (x,y). " + "The exact format for the point list describing the segments is " + "\"x1,y1>x2,y2;x2,y2>x3,y3;x4,y4>x5,y5\". In 2d, a segment is made up by 1 horizontal " + "x coordinate: \"x1;x2;x3\". Note that the segments can be connected " + "or isolated. Units: $m$."); + } + prm.leave_subsection(); + } + prm.leave_subsection(); + } + + + template + void + RiftBoxInitialPlasticStrain::parse_parameters (ParameterHandler &prm) + { + // Check that there is a compositional field called strain and retrieve its index + AssertThrow(this->introspection().compositional_name_exists("plastic_strain"), + ExcMessage("This plugin requires a compositional field named plastic_strain. ")); + strain_composition_number = this->introspection().compositional_index_for_name("plastic_strain"); + + AssertThrow(Plugins::plugin_type_matches >(this->get_geometry_model()), + ExcMessage("This initial condition only makes sense in combination with the box geometry model.")); + + // Get the number of mesh cells in each direction + prm.enter_subsection("Geometry model"); + { + prm.enter_subsection("Box"); + { + origin[0] = prm.get_double ("Box origin X coordinate"); + extents[0] = prm.get_double ("X extent"); + repetitions[0] = prm.get_integer ("X repetitions"); + origin[1] = prm.get_double ("Box origin Y coordinate"); + extents[1] = prm.get_double ("Y extent"); + repetitions[1] = prm.get_integer ("Y repetitions"); + if (dim >= 3) + { + origin[dim-1] = prm.get_double ("Box origin Z coordinate"); + extents[dim-1] = prm.get_double ("Z extent"); + repetitions[dim-1] = prm.get_integer ("Z repetitions"); + } + } + prm.leave_subsection(); + } + prm.leave_subsection(); + + unsigned int refinement; + prm.enter_subsection("Mesh refinement"); + { + refinement = prm.get_integer("Initial adaptive refinement") + prm.get_integer("Initial global refinement"); + } + prm.leave_subsection(); + + // The grid intervals equal the number of mesh cells. + for (unsigned int d = 0; d < dim; ++d) + grid_intervals[d] = repetitions[d] * std::pow(2, refinement); + + // Both initial mesh deformation and initial topography models + // can distort the initial mesh such that the vertical coordinate + // of some locations is larger than the initial, unperturbed, + // vertical extent of the model domain. Since not all initial topography + // models (correctly) return a maximum topography, and + // initial mesh deformation models do not at all, we here assume + // a maximal initial topography of 10 km. This is added to the + // vertical extent. + // + // In the vertical direction, we add enough grid cells + // to cover 10 km at the same resolution. Round up the number of cells. + grid_intervals[dim-1] += static_cast(std::ceil(maximum_initial_topography / (extents[dim-1] / grid_intervals[dim-1]))); + + this->get_pcout() << "Max initial topo: " << maximum_initial_topography << std::endl; + this->get_pcout() << "Grid intervals X: " << grid_intervals[0] << std::endl; + this->get_pcout() << "Grid intervals Y: " << grid_intervals[dim-1] << std::endl; + + prm.enter_subsection("Initial composition model"); + { + prm.enter_subsection("Rift box initial plastic strain"); + sigma = prm.get_double ("Standard deviation of Gaussian noise amplitude distribution"); + A = prm.get_double ("Maximum amplitude of Gaussian noise amplitude distribution"); + seed = prm.get_double ("Random number generator seed"); + strain_height = origin[dim-1] + extents[dim-1] - prm.get_double ("Depth around which Gaussian noise is smoothed out"); + strain_halfwidth = prm.get_double ("Halfwidth with which Gaussian noise is smoothed out in depth"); + + // Read in the string of rift segments + const std::string temp_all_segments = prm.get("Rift axis line segments"); + // Split the string into segment strings + const std::vector temp_segments = Utilities::split_string_list(temp_all_segments,';'); + // The number of segments, each consisting of a begin and an end point in 3d and one point in 3d + const unsigned int n_temp_segments = temp_segments.size(); + point_list.resize(n_temp_segments); + + // Loop over the segments to extract the points + for (unsigned int i_segment = 0; i_segment < n_temp_segments; i_segment++) + { + // In 3d a line segment consists of 2 points, + // in 2d of only 1 (ridge axis orthogonal to x and y). + // Also, a 3d point has 2 coordinates (x and y), + // a 2d point only 1 (x). + const std::vector temp_segment = Utilities::split_string_list(temp_segments[i_segment],'>'); + + if (dim == 3) + { + // const std::vector temp_segment = Utilities::split_string_list(temp_segments[i_segment],'>'); + AssertThrow(temp_segment.size() == 2,ExcMessage ("The given coordinate '" + temp_segment[i_segment] + "' is not correct. " + "It should only contain 2 parts: " + "the two points of the segment, separated by a '>'.")); + + } + else + { + // Add the point to the list of points for this segment + // As we're in 2d all segments correspond to 1 point consisting of 1 coordinate + AssertThrow(temp_segment.size() == 1,ExcMessage ("The given coordinate '" + temp_segment[i_segment] + "' is not correct. " + "It should only contain 1 part: " + "the point representing the rift axis.")); + } + + // Loop over the 2 points of each segment + for (unsigned int i_points = 0; i_points < dim-1; i_points++) + { + std::vector temp_point = Utilities::string_to_double(Utilities::split_string_list(temp_segment[i_points],',')); + if (dim == 3) + { + AssertThrow(temp_point.size() == 2,ExcMessage ("The given coordinates of segment '" + temp_segment[i_points] + "' are not correct. " + "It should only contain 2 parts: " + "the x and y coordinates of the segment begin/end point, separated by a ','.")); + } + else + { + AssertThrow(temp_point.size() == 1,ExcMessage ("The given coordinates of segment '" + temp_segment[i_points] + "' are not correct. " + "It should only contain 1 part: " + "the one coordinate of the segment end point.")); + } + + // Add the point to the list of points for this segment + point_list[i_segment][i_points][0] = temp_point[0]; + point_list[i_segment][i_points][1] = temp_point[dim-2]; + } + } + prm.leave_subsection(); + } + prm.leave_subsection(); + } + + } +} + +// explicit instantiations +namespace aspect +{ + namespace InitialComposition + { + ASPECT_REGISTER_INITIAL_COMPOSITION_MODEL(RiftBoxInitialPlasticStrain, + "rift box initial plastic strain", + "Specify the plastic strain initial compositional field value based on " + "the distance to a list of line segments " + "and the user-defined Gaussian distribution around these segments, " + "combined with random noise. " + "A maximum initial topography of 10 km can be accommodated. Initial topography that " + "is higher than 10 km will lead to plastic strain values set to the strain value at 10 km." + "This plugin only works in combination with the box geometry model and the visco_plastic " + "material model.") + } +} diff --git a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h new file mode 100644 index 00000000000..6003e0c26ab --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h @@ -0,0 +1,162 @@ +/* + Copyright (C) 2011 - 2016 by the authors of the ASPECT code. + + This file is part of ASPECT. + + ASPECT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + ASPECT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ASPECT; see the file doc/COPYING. If not see + . +*/ + + +#ifndef _aspect_initial_composition_rift_box_initial_plastic_strain_h +#define _aspect_initial_composition_rift_box_initial_plastic_strain_h + +#include +#include + +#include + +namespace aspect +{ + namespace InitialComposition + { + using namespace dealii; + + /** + * A class that implements initial conditions for the compositional fields + * based on a functional description provided in the input file. + * + * @ingroup InitialCompositionModels + */ + template + class RiftBoxInitialPlasticStrain : public Interface, + public SimulatorAccess + { + public: + /** + * Constructor. + */ + RiftBoxInitialPlasticStrain (); + + /** + * Initialization function. + */ + void + initialize (); + + /** + * Return the initial composition as a function of position and number + * of compositional field. The composition varies as a Gaussian distribution + * around a user-defined set of line-segments. + */ + virtual + double initial_composition (const Point &position, const unsigned int n_comp) const; + + /** + * Declare the parameters this class takes through input files. The + * default implementation of this function does not describe any + * parameters. Consequently, derived classes do not have to overload + * this function if they do not take any runtime parameters. + */ + static + void + declare_parameters (ParameterHandler &prm); + + /** + * Read the parameters this class declares from the parameter file. + * The default implementation of this function does not read any + * parameters. Consequently, derived classes do not have to overload + * this function if they do not take any runtime parameters. + */ + virtual + void + parse_parameters (ParameterHandler &prm); + + private: + + /** + * The number of the compositional field representing the strain. + */ + unsigned int strain_composition_number; + + /** + * The value of the seed for the random number generator + */ + double seed; + + /** + * The maximum amplitude of the Gaussian amplitude of the noise. + */ + double A; + + /** + * The standard deviation of the Gaussian amplitude of the noise. + */ + double sigma; + + /** + * The height around and halfwidth with which the noise is smoothed out. + */ + double strain_height; + double strain_halfwidth; + + /** + * The list of line segments consisting of two 2d coordinates per segment (even in 2d). + * The segments represent the rift axis. + */ + std::vector,2 > > point_list; + + /** + * A table with random noise for the + * second invariant of the strain. + */ + std::array grid_intervals; + Functions::InterpolatedUniformGridData *interpolate_noise; + + /** + * A pointer to the initial topography model. + */ + InitialTopographyModel::Interface *topo_model; + + /** + * The min and max of the strain grid in each direction + */ + std::array,dim> grid_extents; + + /** + * Origin of the box in x, y, and z (in 3d) coordinates. + */ + Point origin; + + /** + * Extent of the domain in x-, y-, and z-direction (in 3d). + */ + Point extents; + + /** + * The number of cells in each coordinate direction (x, y, z). + */ + std::array repetitions; + + /** + * The height we add to vertical domain extent + * to deal with any initial topography. + */ + const double maximum_initial_topography = 5000.; + }; + } +} + + +#endif From 8729e67cff1988949e3b2230ebfccb6769702a40 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Tue, 12 Dec 2023 12:31:48 +0100 Subject: [PATCH 02/38] First stab prm file --- .../initial_conditions_continental_rift.prm | 328 ++++++++++++++++++ 1 file changed, 328 insertions(+) create mode 100644 cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm new file mode 100644 index 00000000000..40cc2cfeca6 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm @@ -0,0 +1,328 @@ +#### Continental Extension Cookbook +# This cookbook is based off numerous published studies, five of which are listed below. +# For additional information, see these publications and references therein. +# 1. Brune, S., Heine, C., Perez-Gussinye, M., and Sobolev, S.V. (2014), Nat. Comm., v.5, n.4014, +# Rift migration explains continental margin asymmetry and crustal hyperextension +# 2. Huismans, R., and Beaumont, C. (2011), Nature, v.473, p.71-75. +# Depth-dependent extension, two-stage breakup and cratonic underplating at rifted margins +# 3. Naliboff, J., and Buiter, S.H. (2015), Earth Planet. Sci. Lett., v.421, p.58-67, +# "Rift Reactivation and migration during multiphase extension" +# 4. Naliboff, J., Glerum, A., Sascha, S., Peron-Pinvidic, G., and Wrona, T. (2020), Geophys. +# Res. Lett., 47, e2019GL086611, "Development of 3‐D rift heterogeneity through fault +# network evolution" +# 5. Sandiford, D., Brune, S., Glerum, A., Naliboff, J., and Whittaker, J.M. (2021), Geophys. +# Geochem. Geosys., 22, e2021GC009681, "Kinematics of footwall exhumation at oceanic +# detachment faults: Solid-block rotation and apparent unbending" + +#### Global parameters +set Additional shared libraries = /Applications/ASPECT/VisualStudioCode/aspect/cookbooks/initial_conditions_continental_rift/libinitial_conditions_continental_rift.debug.so +set Dimension = 2 +set Start time = 0 +set End time = 5e6 +set Use years in output instead of seconds = true +set Nonlinear solver scheme = single Advection, iterated defect correction Stokes +set Nonlinear solver tolerance = 1e-4 +set Max nonlinear iterations = 100 +set CFL number = 0.5 +set Maximum time step = 20e3 +set Output directory = output-continental_extension +set Pressure normalization = no + +#### Parameters describing the model + +# Governing equations +subsection Formulation + set Formulation = Boussinesq approximation +end + +# Model geometry (200x100 km, 20 km spacing) +subsection Geometry model + set Model name = box + + subsection Box + set X repetitions = 10 + set Y repetitions = 5 + set X extent = 200e3 + set Y extent = 100e3 + end +end + +# Globally refine the mesh to 2.5 km spacing, and then +# adaptively refine the mesh to 1.25 km spacing above y=50 km +# and between x=40 and x=160 km. These values ensure areas +# undergoing brittle deformation are in the high-resolution +# region. +subsection Mesh refinement + set Initial adaptive refinement = 1 + set Initial global refinement = 3 + set Time steps between mesh refinement = 0 + set Strategy = minimum refinement function + + subsection Minimum refinement function + set Coordinate system = cartesian + set Variable names = x,y + set Function expression = if ( y>=50e3 && x>=40.e3 && x<=160.e3, 4, 3) + end +end + +# Use the Eisenstat Walker method to automatically determine the +# linear solver tolerance during the defect Picard iterations. +# Adjusting the Maximum linear solver tolerance will affect how long +# it takes to reach a solution, but not the actual value of the +# solution. +subsection Solver parameters + subsection Stokes solver parameters + set Number of cheap Stokes solver steps = 0 + end + + subsection Newton solver parameters + set Maximum linear Stokes solver tolerance = 1e-2 + set Use Eisenstat Walker method for Picard iterations = true + end +end + +# Advecting the free surface using a normal, rather than vertical, +# projection. To reduce mesh instabilities and associated solver +# issues when deformation becomes large, diffusion is applied to +# the free surface at each time step. +subsection Mesh deformation + set Mesh deformation boundary indicators = top: free surface, top: diffusion + + subsection Free surface + set Surface velocity projection = normal + end + + subsection Diffusion + # Diffusivity term. Increasing this value will result + # in a smoother free surface and lower topography + # amplitudes. + set Hillslope transport coefficient = 1.e-8 + end +end + +# Velocity on boundaries characterized by functions +# The outward velocity (x-direction) on the left and right walls is 0.25 cm/year +# The vertical velocity at the base is 0.25 cm/year (balances outflow on sides) +# Velocity components parallel to the base (x-velocity) and side walls (y-velocity) +# are unconstrained (i.e. 'free'). +subsection Boundary velocity model + set Prescribed velocity boundary indicators = left x: function, right x:function, bottom y:function + + subsection Function + set Variable names = x,y + set Function constants = v=0.0025, w=200.e3, d=100.e3 + set Function expression = if (x < w/2 , -v, v) ; v*2*d/w + end +end + +# Number and names of compositional fields +# The five compositional fields represent: +# 1. The plastic strain that accumualates over time, with the initial plastic strain removed +# 2. The plastic strain that accumulated over time, including the initial plastic strain values +# 3. The upper crust +# 4. The lower crust +# 5. The mantle lithosphere +subsection Compositional fields + set Number of fields = 5 + set Names of fields = noninitial_plastic_strain, plastic_strain, upper_crust, lower_crust, mantle_lithosphere +end + +# Initial values of different compositional fields +# The upper crust (20 km thick), lower crust (20 km thick) +# and mantle (60 km thick) are continuous horizontal layers +# of constant thickness. The non initial plastic strain is set +# to 0 and the initial plastic strain is randomized between +# 0.5 and 1.5. +subsection Initial composition model + set List of model names = function, rift box initial plastic strain #lithosphere with rift +# subsection Lithosphere with rift +# set Blend polygons and rifts = true +# set Standard deviation of Gaussian rift geometry = 60e3 +# set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 + # LAB at 110 km +# set Rift axis line segments = 350e3 +# set Layer thicknesses = 20e3, 15e3, 85e3 + + # Polygon LAB at 200 km +# set Lithospheric polygon layer thicknesses = 23e3, 20e3 , 157.e3 +# set Lithospheric polygons = 450e3 > 3000e3 +# set Half width of polygon smoothing = 10e3 +# end + + subsection Function + set Variable names = x,y + set Function expression = 0; \ + if(x>50.e3 && x<150.e3 && y>50.e3, 0.5 + rand_seed(1), 0); \ + if(y>=80.e3, 1, 0); \ + if(y<80.e3 && y>=60.e3, 1, 0); \ + if(y<60.e3, 1, 0); + end +end + +# Composition: fixed on bottom (inflow boundary), free on sides and top +subsection Boundary composition model + set Fixed composition boundary indicators = bottom + set List of model names = initial composition +end + +# Temperature boundary conditions +# Top and bottom (fixed) temperatures are consistent with the initial temperature field +# Note that while temperatures are specified for the model sides, these values are +# not used as the sides are not specified "Fixed temperature boundaries". Rather, +# these boundaries are insulating (zero net heat flux). +subsection Boundary temperature model + set Fixed temperature boundary indicators = bottom, top + set List of model names = box + + subsection Box + set Bottom temperature = 1613 + set Top temperature = 273 + end +end + +# Initial temperature field +# Typical continental geotherm based on equations 4-6 from: +# D.S. Chapman (1986), "Thermal gradients in the continental crust", +# Geological Society of London Special Publications, v.24, p.63-70. +# The initial constraints are: +# Surface Temperature - upper crust (ts1) = 273 K +# Surface Heat Flow - upper crust (qs1) = 0.055 mW/m^2 +# Heat Production - upper crust (A1) = 1.00e-6 W/m^3; +# Heat Production - lower crust (A2) = 0.25e-6 W/m^3; +# Heat Production - mantle (A3) = 0.00e-6 W/m^3; +# Thermal Conductivity - all layers = 2.5 (W/(m K)); +# To satisfy these constraints, the following values are required: +# Surface Temperature - lower crust (ts2) = 633 K +# - mantle (ts3) = 893 K +# Surface Heat Flow - lower crust (qs2) = 0.035 W/m^2; +# - mantle (qs3) = 0.030 W/m^2; +# Note: The continental geotherm initial temperature model +# plugin can be used to compute an identical geotherm +# for the lithosphere. An example of how to use this +# plugin is illustrated in the test for this cookbook +# (tests/continental_extension.prm). +subsection Initial temperature model + set Model name = function + + subsection Function + set Variable names = x,y + set Function constants = h=100e3, ts1=273, ts2=633, ts3=893, \ + A1=1.e-6, A2=0.25e-6, A3=0.0, \ + k1=2.5, k2=2.5, k3=2.5, \ + qs1=0.055, qs2=0.035, qs3=0.030 + set Function expression = if( (h-y)<=20.e3, \ + ts1 + (qs1/k1)*(h-y) - (A1*(h-y)*(h-y))/(2.0*k1), \ + if( (h-y)>20.e3 && (h-y)<=40.e3, \ + ts2 + (qs2/k2)*(h-y-20.e3) - (A2*(h-y-20.e3)*(h-y-20.e3))/(2.0*k2), \ + ts3 + (qs3/k3)*(h-y-40.e3) - (A3*(h-y-40.e3)*(h-y-40.e3))/(2.0*k3) ) ); + end +end + +# Constant internal heat production values (W/m^3) for background material +# and compositional fields. +subsection Heating model + set List of model names = compositional heating + + subsection Compositional heating + set Use compositional field for heat production averaging = 1, 0, 0, 1, 1, 1 + set Compositional heating values = 0.0, 0.0, 0.0, 1.0e-6, 0.25e-6, 0. + end +end + +# Material model +# Rheology: Non-linear viscous flow and Drucker Prager Plasticity +# Values for most rheological parameters are specified for a background material and +# each compositional field. Values for viscous deformation are based on dislocation +# creep flow-laws, with distinct values for the upper crust (wet quartzite), lower +# crust (wet anorthite) and mantle (dry olivine). Table 1 of Naliboff and Buiter (2015), +# Earth Planet. Sci. Lett., v.421, p. 58-67 contains values for each of these flow laws. +subsection Material model + set Model name = visco plastic + + subsection Visco Plastic + # Reference temperature and viscosity + set Reference temperature = 273 + + # The minimum strain-rate helps limit large viscosities values that arise + # as the strain-rate approaches zero. + # The reference strain-rate is used on the first non-linear iteration + # of the first time step when the velocity has not been determined yet. + set Minimum strain rate = 1.e-20 + set Reference strain rate = 1.e-16 + + # Limit the viscosity with minimum and maximum values + set Minimum viscosity = 1e18 + set Maximum viscosity = 1e26 + + # Thermal diffusivity is adjusted to match thermal conductivities + # assumed in assigning the initial geotherm + set Define thermal conductivities = true + set Thermal conductivities = 2.5 + set Heat capacities = 750. + + # Density values of 1 are assigned to "strain" fields, which are not taken into + # account when computing material properties. + set Densities = 3300, 1.0, 1.0, 2700, 2900, 3300 + set Thermal expansivities = 2e-5 + + # Harmonic viscosity averaging + set Viscosity averaging scheme = harmonic + + # Choose to have the viscosity (pre-yield) follow a dislocation + # diffusion or composite flow law. Here, dislocation is selected + # so no need to specify diffusion creep parameters below, which are + # only used if "diffusion" or "composite" option is selected. + set Viscous flow law = dislocation + + # Dislocation creep parameters for + # 1. Background material/mantle (dry olivine) + # Hirth & Kohlstedt (2004), Geophys. Monogr. Am. Geophys. Soc., v.138, p.83-105. + # "Rheology of the upper mantle and the mantle wedge:a view from the experimentalists" + # 2. Upper crust (wet quartzite) + # Rutter & Brodie (2004), J. Struct. Geol., v.26, p.2011-2023. + # "Experimental grain size-sensitive flow of hot-pressed Brazilian quartz aggregates" + # 3. Lower crust and weak seed (wet anorthite) + # Rybacki et al. (2006), J. Geophys. Res., v.111(B3). + # "Influence of water fugacity and activation volume on the flow properties of fine-grained + # anorthite aggregates" + # Note that the viscous pre-factors below are scaled to plane strain from unixial strain experiments. + # For ease of identification, fields tracking strain are assigned prefactors of 1e-50 + set Prefactors for dislocation creep = 6.52e-16, 1.00e-50, 1.00e-50, 8.57e-28, 7.13e-18, 6.52e-16 + set Stress exponents for dislocation creep = 3.5, 1.0, 1.0, 4.0, 3.0, 3.5 + set Activation energies for dislocation creep = 530.e3, 0.0, 0.0, 223.e3, 345.e3, 530.e3 + set Activation volumes for dislocation creep = 18.e-6, 0.0, 0.0, 0.0, 0.0, 18.e-6 + + # Plasticity parameters + set Angles of internal friction = 30 + set Cohesions = 20.e6 + + # The parameters below weaken the friction and cohesion by a + # a factor of 4 between plastic strain values of 0.5 and 1.5. + set Strain weakening mechanism = plastic weakening with plastic strain only + set Start plasticity strain weakening intervals = 0.5 + set End plasticity strain weakening intervals = 1.5 + set Cohesion strain weakening factors = 0.25 + set Friction strain weakening factors = 0.25 + end +end + +# Gravity model +subsection Gravity model + set Model name = vertical + + subsection Vertical + set Magnitude = 9.81 + end +end + +# Post processing +subsection Postprocess + set List of postprocessors = basic statistics, composition statistics, heat flux densities, heat flux statistics, mass flux statistics, matrix statistics, pressure statistics, temperature statistics, topography, velocity statistics, visualization + + subsection Visualization + set List of output variables = density, heat flux map, named additional outputs, strain rate, viscosity + set Output format = vtu + set Time between graphical output = 100.e3 + set Interpolate output = true + end +end From c76090ad6359b4047ac3d874da00e104b13ce933 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Tue, 12 Dec 2023 12:32:24 +0100 Subject: [PATCH 03/38] Fix IC manager --- .../lithosphere_rift_IT.h | 9 + .../lithosphere_rift_IT_2.cc | 11 +- .../lithosphere_rift_topo.cc | 257 ++++++++++++++++++ .../lithosphere_rift_topo.h | 159 +++++++++++ 4 files changed, 434 insertions(+), 2 deletions(-) create mode 100644 cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc create mode 100644 cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h index 954ced16112..b9e9ba24bc9 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h @@ -24,6 +24,7 @@ #define _aspect_initial_temperature_lithosphere_rift_h #include +#include #include namespace aspect @@ -144,6 +145,14 @@ namespace aspect */ bool use_compensation_depth; double compensation_depth; + + /** + * A shared pointer to the initial composition object + * that ensures that the current object can continue + * to access the initial composition object beyond the + * first time step. + */ + std::shared_ptr> initial_composition_manager; }; } } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index 8df533ac492..e19185cc490 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -53,6 +53,13 @@ namespace aspect //AssertThrow((dynamic_cast *> (const_cast *>(&this->get_material_model()))) != 0, AssertThrow((dynamic_cast *> (const_cast *>(&this->get_material_model()))) != 0, ExcMessage("The lithosphere with rift initial temperature plugin requires the viscoplastic material model plugin.")); + + // The simulator only keeps the initial conditions around for + // the first time step. As a consequence, we have to save a + // shared pointer to that object ourselves the first time we get + // here. + if (initial_composition_manager == nullptr) + initial_composition_manager = this->get_initial_composition_manager_pointer(); } @@ -70,8 +77,8 @@ namespace aspect double distance_to_rift_axis = 1e23; Point surface_position; std::pair distance_to_L_polygon; - for (typename std::list > >::const_iterator it = this->get_initial_composition_manager().get_active_initial_composition_conditions().begin(); - it != this->get_initial_composition_manager().get_active_initial_composition_conditions().end(); + for (typename std::list > >::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); + it != initial_composition_manager->get_active_initial_composition_conditions().end(); ++it) if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) { diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc new file mode 100644 index 00000000000..2e08a66ff67 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -0,0 +1,257 @@ +/* + Copyright (C) 2016 by the authors of the ASPECT code. + + This file is part of ASPECT. + + ASPECT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + ASPECT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ASPECT; see the file LICENSE. If not see + . +*/ + + +#include "lithosphere_rift_topo.h" +#include "lithosphere_rift_IC.h" +#include +#include +#include +#include + +namespace aspect +{ + namespace InitialTopographyModel + { + template + void + LithosphereRift:: + initialize () + { + // Compute the maximum topography amplitude based on isostasy. + // Assume the reference density is representative for each layer (despite temperature dependence) + + // For now, we assume a 3-layer system with an upper crust, lower crust and lithospheric mantle + const unsigned int id_upper = this->introspection().compositional_index_for_name("upper"); + const unsigned int id_lower = this->introspection().compositional_index_for_name("lower"); + const unsigned int id_mantle_L = this->introspection().compositional_index_for_name("mantle_L"); + + densities.push_back(temp_densities[0]); + densities.push_back(temp_densities[id_upper+1]); + densities.push_back(temp_densities[id_lower+1]); + densities.push_back(temp_densities[id_mantle_L+1]); + + // The reference column + ref_rgh = 0; + // Assume constant gravity magnitude, so ignore + for (unsigned int l=0; l<3; ++l) + ref_rgh += densities[l+1] * thicknesses[l]; + + // The total lithosphere thickness + const double sum_thicknesses = std::accumulate(thicknesses.begin(), thicknesses.end(),0); + + // Make sure the compensation depth is in the sublithospheric mantle + compensation_depth = 2. * sum_thicknesses + 1e3; + + // The column at the rift center + double rift_rgh = 0; + rift_thicknesses = thicknesses; + for (unsigned int l=0; l polygon_rgh(n_polygons); + std::vector sum_polygon_thicknesses(n_polygons); + for (unsigned int i_polygons=0; i_polygonsget_pcout() << " Maximum initial topography of rift: " << topo_rift_amplitude << " m" << std::endl; + this->get_pcout() << " Maximum initial topography of polygon: " << topo_polygon_amplitude << " m" << std::endl; + + // The simulator only keeps the initial conditions around for + // the first time step. As a consequence, we have to save a + // shared pointer to that object ourselves the first time we get + // here. + if (initial_composition_manager == nullptr) + initial_composition_manager = this->get_initial_composition_manager_pointer(); + } + + + template + double + LithosphereRift:: + value (const Point &position) const + { + // Check that the required initial composition model is used + // We have to do it here instead of in initialize() because + // the names are not available upon initialization of the + // initial topography model yet. + const std::vector active_initial_composition_models = initial_composition_manager->get_active_initial_composition_names(); + AssertThrow(std::find(active_initial_composition_models.begin(),active_initial_composition_models.end(), "lithosphere with rift") != active_initial_composition_models.end(), + ExcMessage("The lithosphere with rift initial mesh refinement plugin requires the lithosphere with rift initial composition plugin.")); + + // When cartesian, position contains x(,y); when spherical, position contains lon(,lat) (in degrees); + // Turn into a Point + Point surface_position; + for (unsigned int d=0; d distance_to_L_polygon; + for (typename std::list > >::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); + it != initial_composition_manager->get_active_initial_composition_conditions().end(); + ++it) + if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) + { + distance_to_rift_axis = ic->distance_to_rift(surface_position); + distance_to_L_polygon = ic->distance_to_polygon(surface_position); + } + + // Compute the topography based on distance to the rift and distance to the polygon + std::vector local_thicknesses(3); + local_thicknesses[0] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][0] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[0]) + *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : + (1.0 - A[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + local_thicknesses[1] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) + *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : + (1.0 - A[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + local_thicknesses[2] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) + *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : + (1.0 - A[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + + // The local lithospheric column + double local_rgh = 0; + for (unsigned int l=0; l<3; ++l) + local_rgh += densities[l+1] * local_thicknesses[l]; + // The total local lithosphere thickness + const double sum_local_thicknesses = std::accumulate(local_thicknesses.begin(), local_thicknesses.end(),0); + local_rgh += (compensation_depth - sum_local_thicknesses) * densities[0]; + + return (ref_rgh - local_rgh) / densities[0]; + } + + + template + double + LithosphereRift:: + max_topography () const + { + return maximum_topography; + } + + + template + void + LithosphereRift:: + declare_parameters (ParameterHandler &) + { + } + + + + template + void + LithosphereRift::parse_parameters (ParameterHandler &prm) + { + unsigned int n_fields; + prm.enter_subsection ("Compositional fields"); + { + n_fields = prm.get_integer ("Number of fields"); + } + prm.leave_subsection(); + prm.enter_subsection ("Initial composition model"); + { + prm.enter_subsection("Lithosphere with rift"); + { + sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); + sigma_polygon = prm.get_double ("Half width of polygon smoothing"); + blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); + A = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), + 3, + "Amplitude of Gaussian rift geometry"); + thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), + 3, + "Layer thicknesses"); + // Split the string into the separate polygons + const std::vector temp_thicknesses = Utilities::split_string_list(prm.get("Lithospheric polygon layer thicknesses"),';'); + const unsigned int n_polygons = temp_thicknesses.size(); + polygon_thicknesses.resize(n_polygons); + for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) + { + polygon_thicknesses[i_polygons] = Utilities::string_to_double(Utilities::split_string_list(temp_thicknesses[i_polygons],',')); + AssertThrow(polygon_thicknesses[i_polygons].size()==3, ExcMessage ("The number of layer thicknesses should be equal to 3.")); + } + } + prm.leave_subsection(); + } + prm.leave_subsection(); + + + prm.enter_subsection("Material model"); + { + prm.enter_subsection("Visco Plastic"); + { + // The material model viscoplastic prefixes an entry for the background material + temp_densities = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Densities"))), + n_fields+1, + "Densities"); + } + prm.leave_subsection(); + } + prm.leave_subsection(); + } + } +} + +// explicit instantiations +namespace aspect +{ + namespace InitialTopographyModel + { + ASPECT_REGISTER_INITIAL_TOPOGRAPHY_MODEL(LithosphereRift, + "lithosphere with rift", + "An initial topography model that defines the initial topography " + "based on isostasy. It takes into account lithospheric thickness " + "variations as specified in the InitialComposition model lithosphere " + "with rift' as should only be used in conjunction with this model. ") + } +} diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h new file mode 100644 index 00000000000..ae3931eb0c0 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h @@ -0,0 +1,159 @@ +/* + Copyright (C) 2016 by the authors of the ASPECT code. + + This file is part of ASPECT. + + ASPECT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + ASPECT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ASPECT; see the file LICENSE. If not see + . +*/ + + +#ifndef _aspect_geometry_model__initial_topography_lithosphere_rift_h +#define _aspect_geometry_model__initial_topography_lithosphere_rift_h + +#include +#include + +namespace aspect +{ + namespace InitialTopographyModel + { + using namespace dealii; + + /** + * A class that describes an initial topography for the geometry model, + * by defining a set of polylines on the surface from the prm file. It + * sets the elevation in each Polyline to a constant value. + */ + template + class LithosphereRift : public Interface, + public SimulatorAccess + { + public: + /** + * Initialization function. This function is called once at the + * beginning of the program. Checks preconditions. + */ + void + initialize (); + + /** + * Return the value of the topography for a point. + */ + virtual + double value (const Point &p) const; + + /** + * Return the maximum value of the elevation. + */ + virtual + double max_topography () const; + + /** + * Declare the parameters this class takes through input files. + */ + static + void + declare_parameters (ParameterHandler &prm); + + /** + * Read the parameters this class declares from the parameter file. + */ + virtual + void + parse_parameters (ParameterHandler &prm); + + private: + /** + * The standard deviation of the Gaussian amplitude of the lithospheric thicknesses + * with distance from the rift axis. + */ + double sigma_rift; + + /** + * The half width of the hyperbolic tangent used to smooth the transitions + * between reference and polygon lithospheric thicknesses. + */ + double sigma_polygon; + + /** + * The maximum amplitude of the Gaussian distribution of the lithospheric thicknesses + * with distance from the rift axis. It should have values between -1 and 1, where positive + * numbers represent a reduction in thickness and negative numbers an increase. + */ + std::vector A; + + /** + * The maximum amplitude of the Gaussian distribution of the topography around the rift. + */ + double topo_rift_amplitude; + + /** + * The reference lithospheric column used in computing the topography based on isostasy + * and the thickness of this column. + */ + double ref_rgh; + double compensation_depth; + + /** + * Wheter or not to take the polygon thicknesses as dominant, or to smooth them + * gradually into rift areas. + */ + bool blend_rift_and_polygon; + + + /** + * The maximum amplitude of the topography of the polygon area. + */ + double topo_polygon_amplitude; + + /** + * Vector for field densities. + */ + std::vector densities; + std::vector temp_densities; + + /** + * Vector for the reference field thicknesses away from the rift. + */ + std::vector thicknesses; + + /** + * Vector for the rift thicknesses at the center. + */ + std::vector rift_thicknesses; + + /** + * Vector for the polygon thicknesses at the center. + */ + std::vector > polygon_thicknesses; + + /** + * The maximum topography in this model + */ + double maximum_topography; + + /** + * A shared pointer to the initial composition object + * that ensures that the current object can continue + * to access the initial composition object beyond the + * first time step. + */ + std::shared_ptr> initial_composition_manager; + }; + } +} + + +#endif From e0d87bdc411cacb4c8b63208131b9e8483e0906c Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Tue, 12 Dec 2023 17:49:43 +0100 Subject: [PATCH 04/38] Set plastic strain grid to 10 km extra --- .../rift_box_initial_plastic_strain.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h index 6003e0c26ab..099c5274201 100644 --- a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h +++ b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h @@ -153,7 +153,7 @@ namespace aspect * The height we add to vertical domain extent * to deal with any initial topography. */ - const double maximum_initial_topography = 5000.; + const double maximum_initial_topography = 10000.; }; } } From 1d40c4ff89b95a9fb5e20829c0cc62e4d9b3ea9c Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Wed, 13 Dec 2023 15:37:00 +0100 Subject: [PATCH 05/38] Move get_pointer to where it exists --- .../lithosphere_rift_topo.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc index 2e08a66ff67..d5f3d67fb28 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -103,12 +103,6 @@ namespace aspect this->get_pcout() << " Maximum initial topography of rift: " << topo_rift_amplitude << " m" << std::endl; this->get_pcout() << " Maximum initial topography of polygon: " << topo_polygon_amplitude << " m" << std::endl; - // The simulator only keeps the initial conditions around for - // the first time step. As a consequence, we have to save a - // shared pointer to that object ourselves the first time we get - // here. - if (initial_composition_manager == nullptr) - initial_composition_manager = this->get_initial_composition_manager_pointer(); } @@ -117,6 +111,12 @@ namespace aspect LithosphereRift:: value (const Point &position) const { + // The simulator only keeps the initial conditions around for + // the first time step. As a consequence, we have to save a + // shared pointer to that object ourselves the first time we get + // here. + if (initial_composition_manager == nullptr) + const_cast>&>(initial_composition_manager) = this->get_initial_composition_manager_pointer(); // Check that the required initial composition model is used // We have to do it here instead of in initialize() because // the names are not available upon initialization of the From e96875fe7199e1fe347b0ec26016aeebb627898a Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 14 Dec 2023 11:19:43 +0100 Subject: [PATCH 06/38] Update prm --- .../initial_conditions_continental_rift.prm | 107 ++++++++++++++---- 1 file changed, 83 insertions(+), 24 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm index 40cc2cfeca6..2859f28ae40 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm @@ -22,7 +22,7 @@ set End time = 5e6 set Use years in output instead of seconds = true set Nonlinear solver scheme = single Advection, iterated defect correction Stokes set Nonlinear solver tolerance = 1e-4 -set Max nonlinear iterations = 100 +set Max nonlinear iterations = 2 set CFL number = 0.5 set Maximum time step = 20e3 set Output directory = output-continental_extension @@ -53,7 +53,7 @@ end # undergoing brittle deformation are in the high-resolution # region. subsection Mesh refinement - set Initial adaptive refinement = 1 + set Initial adaptive refinement = 0 set Initial global refinement = 3 set Time steps between mesh refinement = 0 set Strategy = minimum refinement function @@ -124,7 +124,7 @@ end # 5. The mantle lithosphere subsection Compositional fields set Number of fields = 5 - set Names of fields = noninitial_plastic_strain, plastic_strain, upper_crust, lower_crust, mantle_lithosphere + set Names of fields = noninitial_plastic_strain, plastic_strain, upper, lower, mantle_L end # Initial values of different compositional fields @@ -134,35 +134,65 @@ end # to 0 and the initial plastic strain is randomized between # 0.5 and 1.5. subsection Initial composition model - set List of model names = function, rift box initial plastic strain #lithosphere with rift -# subsection Lithosphere with rift -# set Blend polygons and rifts = true -# set Standard deviation of Gaussian rift geometry = 60e3 -# set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 + set List of model names = lithosphere with rift, rift box initial plastic strain, function + + subsection Lithosphere with rift + set Blend polygons and rifts = true + set Standard deviation of Gaussian rift geometry = 60e3 + set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 # LAB at 110 km -# set Rift axis line segments = 350e3 -# set Layer thicknesses = 20e3, 15e3, 85e3 + set Rift axis line segments = 350e3 + set Layer thicknesses = 20e3, 15e3, 85e3 # Polygon LAB at 200 km -# set Lithospheric polygon layer thicknesses = 23e3, 20e3 , 157.e3 -# set Lithospheric polygons = 450e3 > 3000e3 -# set Half width of polygon smoothing = 10e3 -# end - + set Lithospheric polygon layer thicknesses = 23e3, 20e3 , 157.e3 + set Lithospheric polygons = 450e3 > 3000e3 + set Half width of polygon smoothing = 10e3 + end + + # Inherited noise + subsection Rift box initial plastic strain + set Standard deviation of Gaussian noise amplitude distribution = 200e3 + set Maximum amplitude of Gaussian noise amplitude distribution = 0.250000 + set Random number generator seed = 2.000000 + set Depth around which Gaussian noise is smoothed out = 50e3 + set Halfwidth with which Gaussian noise is smoothed out in depth = 10e3 + #set Grid intervals for noise X or radius = 2240 + # Add 16 intervals for the additional 5 km that is added to the grid + # to account for initial topography + #set Grid intervals for noise Y or longitude = 976 #960 + set Rift axis line segments = 350e3 + end + subsection Function - set Variable names = x,y - set Function expression = 0; \ - if(x>50.e3 && x<150.e3 && y>50.e3, 0.5 + rand_seed(1), 0); \ - if(y>=80.e3, 1, 0); \ - if(y<80.e3 && y>=60.e3, 1, 0); \ - if(y<60.e3, 1, 0); + set Variable names = x,y + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0 end +# subsection Function +# set Variable names = x,y +# set Function expression = 0; \ +# if(x>50.e3 && x<150.e3 && y>50.e3, 0.5 + rand_seed(1), 0); \ +# if(y>=80.e3, 1, 0); \ +# if(y<80.e3 && y>=60.e3, 1, 0); \ +# if(y<60.e3, 1, 0); +# end end # Composition: fixed on bottom (inflow boundary), free on sides and top subsection Boundary composition model set Fixed composition boundary indicators = bottom - set List of model names = initial composition + set List of model names = function + subsection Function + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0 + end end # Temperature boundary conditions @@ -202,7 +232,36 @@ end # plugin is illustrated in the test for this cookbook # (tests/continental_extension.prm). subsection Initial temperature model - set Model name = function + set List of model names = adiabatic, lithosphere with rift + set List of model operators = add, replace if valid + subsection Lithosphere with rift + set LAB isotherm temperature = 1623. + set Surface temperature = 293. + # Whether or not to prescribe the LAB depth up to a + # certain depth (in area below LAB) + # or use adiabat everywhere + set Use temperature compensation depth = true + set Temperature compensation depth = 200e3 + end + subsection Adiabatic + # A reference profile of the compositional fields + # where x represents depth + subsection Function + # plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio_marine_continental_sediment, silt_fraction + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + if(x<23e3,1,0); \ + if(x>=23e3&x<43e3,1,0); \ + if(x>=43e3&x<200e3,1,0); \ + 0; \ + 0 + end + set Age top boundary layer = 0 + set Age bottom boundary layer = 0 + end subsection Function set Variable names = x,y @@ -317,7 +376,7 @@ end # Post processing subsection Postprocess - set List of postprocessors = basic statistics, composition statistics, heat flux densities, heat flux statistics, mass flux statistics, matrix statistics, pressure statistics, temperature statistics, topography, velocity statistics, visualization + set List of postprocessors = composition statistics, heat flux densities, heat flux statistics, mass flux statistics, pressure statistics, temperature statistics, topography, velocity statistics, visualization subsection Visualization set List of output variables = density, heat flux map, named additional outputs, strain rate, viscosity From 73e9eeb4690bb48017ad2cd89aa3c649163d63e6 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 30 Sep 2022 14:02:04 +0200 Subject: [PATCH 07/38] Store pointer and update read-in density initial temperature --- .../lithosphere_rift_IT.h | 10 +++++ .../lithosphere_rift_IT_2.cc | 39 +++++++++++++++---- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h index b9e9ba24bc9..24cc4c3fff4 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h @@ -153,6 +153,16 @@ namespace aspect * first time step. */ std::shared_ptr> initial_composition_manager; + + /** + * Vector containing the number of phases for each composition. + */ + std::unique_ptr> n_phases_for_each_composition; + + /** + * Vector containing the names of the compositional fields. + */ + std::vector list_of_composition_names; }; } } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index e19185cc490..9c6c084f5bc 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -77,7 +77,7 @@ namespace aspect double distance_to_rift_axis = 1e23; Point surface_position; std::pair distance_to_L_polygon; - for (typename std::list > >::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); + for (typename std::list>>::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); it != initial_composition_manager->get_active_initial_composition_conditions().end(); ++it) if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) @@ -260,14 +260,16 @@ namespace aspect } prm.leave_subsection(); + prm.enter_subsection ("Compositional fields"); + { + list_of_composition_names = Utilities::split_string_list (prm.get("Names of fields")); + } + prm.leave_subsection(); + prm.enter_subsection("Material model"); { prm.enter_subsection("Visco Plastic"); { - // The material model viscoplastic prefixes an entry for the background material - const std::vector temp_densities = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Densities"))), - n_fields+1, - "Densities"); const std::vector temp_thermal_diffusivities = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Thermal diffusivities"))), n_fields+1, "Thermal diffusivities"); @@ -275,9 +277,30 @@ namespace aspect n_fields+1, "Heat capacities"); - densities.push_back(temp_densities[id_upper+1]); - densities.push_back(temp_densities[id_lower+1]); - densities.push_back(temp_densities[id_mantle_L+1]); + n_phases_for_each_composition = std::make_unique>(); + const std::vector temp_densities = Utilities::parse_map_to_double_array (prm.get("Densities"), + list_of_composition_names, + /*has_background_field=*/true, + "Densities", + true, + n_phases_for_each_composition); + + // Assemble a list of phase densities for each composition. + // Add 1 for background material. + std::vector> densities_per_composition(this->n_compositional_fields()+1); + unsigned int counter = 0; + for (unsigned int i = 0; i < (*n_phases_for_each_composition).size(); ++i) + { + for (unsigned int j = 0; j < (*n_phases_for_each_composition)[i]; ++j) + { + densities_per_composition[i].push_back(temp_densities[counter]); + ++counter; + } + } + + densities.push_back(densities_per_composition[id_upper+1][0]); + densities.push_back(densities_per_composition[id_lower+1][0]); + densities.push_back(densities_per_composition[id_mantle_L+1][0]); // Thermal diffusivity kappa = k/(rho*cp), so thermal conducitivity k = kappa*rho*cp conductivities.push_back(temp_thermal_diffusivities[id_upper+1] * densities[0] * temp_heat_capacities[id_upper+1]); From fd37a9b27811c94c340ddf18afffdba418e57513 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 30 Sep 2022 11:58:56 +0200 Subject: [PATCH 08/38] Update read-in densities initial topography --- .../lithosphere_rift_topo.cc | 41 +++++++++++++++---- .../lithosphere_rift_topo.h | 10 +++++ 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc index d5f3d67fb28..8a6cb1bac45 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -43,10 +43,27 @@ namespace aspect const unsigned int id_lower = this->introspection().compositional_index_for_name("lower"); const unsigned int id_mantle_L = this->introspection().compositional_index_for_name("mantle_L"); - densities.push_back(temp_densities[0]); - densities.push_back(temp_densities[id_upper+1]); - densities.push_back(temp_densities[id_lower+1]); - densities.push_back(temp_densities[id_mantle_L+1]); + // Assemble a list of phase densities for each composition. + // Add 1 for background material. + std::vector> densities_per_composition(this->n_compositional_fields()+1); + unsigned int counter = 0; + for (unsigned int i = 0; i < (*n_phases_for_each_composition).size(); ++i) + { + for (unsigned int j = 0; j < (*n_phases_for_each_composition)[i]; ++j) + { + densities_per_composition[i].push_back(temp_densities[counter]); + ++counter; + } + } + + // Get the relevant densities for the lithosphere. + densities.push_back(densities_per_composition[0][0]); + densities.push_back(densities_per_composition[id_upper+1][0]); + densities.push_back(densities_per_composition[id_lower+1][0]); + densities.push_back(densities_per_composition[id_mantle_L+1][0]); + std::cout << "Assembling final densities: " << densities_per_composition[0][0] << ", "; + std::cout << densities_per_composition[id_upper+1][0] << ", " << densities_per_composition[id_lower+1][0]; + std::cout << ", " << densities_per_composition[id_mantle_L+1][0] << std::endl; // The reference column ref_rgh = 0; @@ -225,15 +242,23 @@ namespace aspect } prm.leave_subsection(); + prm.enter_subsection ("Compositional fields"); + { + list_of_composition_names = Utilities::split_string_list (prm.get("Names of fields")); + } + prm.leave_subsection(); prm.enter_subsection("Material model"); { prm.enter_subsection("Visco Plastic"); { - // The material model viscoplastic prefixes an entry for the background material - temp_densities = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Densities"))), - n_fields+1, - "Densities"); + n_phases_for_each_composition = std::make_unique>(); + temp_densities = Utilities::parse_map_to_double_array (prm.get("Densities"), + list_of_composition_names, + /*has_background_field=*/true, + "Densities", + true, + n_phases_for_each_composition); } prm.leave_subsection(); } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h index ae3931eb0c0..d6f6411daae 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h @@ -151,6 +151,16 @@ namespace aspect * first time step. */ std::shared_ptr> initial_composition_manager; + + /** + * Vector containing the number of phases for each composition. + */ + std::unique_ptr> n_phases_for_each_composition; + + /** + * Vector containing the names of the compositional fields. + */ + std::vector list_of_composition_names; }; } } From 785f7d1f0c42ca698bc1d1acf7d4e04af0687ae2 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Sun, 17 Dec 2023 18:12:19 +0100 Subject: [PATCH 09/38] Remove unused parameter --- .../lithosphere_rift_topo.cc | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc index 8a6cb1bac45..50556895053 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -209,12 +209,6 @@ namespace aspect void LithosphereRift::parse_parameters (ParameterHandler &prm) { - unsigned int n_fields; - prm.enter_subsection ("Compositional fields"); - { - n_fields = prm.get_integer ("Number of fields"); - } - prm.leave_subsection(); prm.enter_subsection ("Initial composition model"); { prm.enter_subsection("Lithosphere with rift"); From 1236592075f78a8bb8171f9b53b385ec6e9165e4 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Sun, 17 Dec 2023 18:12:38 +0100 Subject: [PATCH 10/38] Fix compiler warnings --- .../rift_box_initial_plastic_strain.cc | 8 +++++--- .../rift_box_initial_plastic_strain.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc index e93162f67fa..54b46f0db46 100644 --- a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc +++ b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc @@ -147,7 +147,7 @@ namespace aspect prm.enter_subsection("Rift box initial plastic strain"); { prm.declare_entry ("Random number generator seed", "0", - Patterns::Double (0), + Patterns::Integer (0), "The value of the seed used for the random number generator. " "Units: none."); prm.declare_entry ("Standard deviation of Gaussian noise amplitude distribution", "20000", @@ -229,8 +229,10 @@ namespace aspect prm.leave_subsection(); // The grid intervals equal the number of mesh cells. + // refinement, repetitions and grid_intervals are integers, + // but pow returns a double, so convert to int. for (unsigned int d = 0; d < dim; ++d) - grid_intervals[d] = repetitions[d] * std::pow(2, refinement); + grid_intervals[d] = repetitions[d] * int(std::pow(2, refinement)); // Both initial mesh deformation and initial topography models // can distort the initial mesh such that the vertical coordinate @@ -254,7 +256,7 @@ namespace aspect prm.enter_subsection("Rift box initial plastic strain"); sigma = prm.get_double ("Standard deviation of Gaussian noise amplitude distribution"); A = prm.get_double ("Maximum amplitude of Gaussian noise amplitude distribution"); - seed = prm.get_double ("Random number generator seed"); + seed = prm.get_integer ("Random number generator seed"); strain_height = origin[dim-1] + extents[dim-1] - prm.get_double ("Depth around which Gaussian noise is smoothed out"); strain_halfwidth = prm.get_double ("Halfwidth with which Gaussian noise is smoothed out in depth"); diff --git a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h index 099c5274201..8413f4ccb3d 100644 --- a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h +++ b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h @@ -93,7 +93,7 @@ namespace aspect /** * The value of the seed for the random number generator */ - double seed; + unsigned int seed; /** * The maximum amplitude of the Gaussian amplitude of the noise. From 532f8fbead070e1cdaae576e6f37734a7d5e3ad1 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Tue, 2 Jan 2024 19:35:01 +0100 Subject: [PATCH 11/38] Clean up --- .../lithosphere_rift_IC.cc | 203 +++++++++--------- .../lithosphere_rift_IC.h | 49 +++-- 2 files changed, 130 insertions(+), 122 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc index 808a4349b49..0c32696912b 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc @@ -34,7 +34,7 @@ namespace aspect LithosphereRift:: initialize () { - // Check that the required initial composition model is used + // Check that the corresponding initial temperature model is used. const std::vector active_initial_temperature_models = this->get_initial_temperature_manager().get_active_initial_temperature_names(); AssertThrow(find(active_initial_temperature_models.begin(),active_initial_temperature_models.end(), "lithosphere with rift") != active_initial_temperature_models.end(), ExcMessage("The lithosphere with rift initial composition plugin requires the lithosphere with rift initial temperature plugin.")); @@ -47,45 +47,48 @@ namespace aspect const unsigned int compositional_index) const { // Retrieve the indices of the fields that represent the lithospheric layers. - // We assume a 3-layer system with an upper crust, lower crust and lithospheric mantle + // We assume a 3-layer system with an upper crust, lower crust and lithospheric mantle. const unsigned int id_upper = this->introspection().compositional_index_for_name("upper"); const unsigned int id_lower = this->introspection().compositional_index_for_name("lower"); const unsigned int id_mantle_L = this->introspection().compositional_index_for_name("mantle_L"); // Determine coordinate system - const bool cartesian_geometry = dynamic_cast *>(&this->get_geometry_model()) != NULL ? true : false; + const bool cartesian_geometry = Plugins::plugin_type_matches> (this->get_geometry_model()); + // Get the surface coordinates of the point under consideration const Point surface_point = surface_position(position, cartesian_geometry); - // Get the distance to the line segments along a path parallel to the surface + // Get the distance to the rift segments along a path parallel to the surface const double distance_to_rift_axis = distance_to_rift(surface_point); - // Get the signed distance to a polygon of different lithospheric thicknesses + // Get the signed distance to potential polygons of different lithospheric thicknesses const std::pair distance_to_L_polygon = distance_to_polygon(surface_point); // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere // (in this exact order) based on the distance from the rift axis. - const double local_upper_crust_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][0] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[0]) - * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - const double local_lower_crust_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) - * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - const double local_mantle_lithosphere_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) - * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - -//sb std::cout << "Initial compo " << position[0] << " " << compositional_index << " " << local_upper_crust_thickness << " " << local_lower_crust_thickness << " " << local_mantle_lithosphere_thickness << std::endl; - - // Compute depth + std::vector local_thicknesses(3); + for (unsigned int i = 0; i<3; ++i) + local_thicknesses[i] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][i] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[i]) + * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + //const double local_lower_crust_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] + // +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[1]) + // * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + //const double local_mantle_lithosphere_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] + // +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[2]) + // * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + + // Get depth with respect to the surface. const double depth = this->get_geometry_model().depth(position); - // Check which layer we're in and return value. - if (depth <= local_upper_crust_thickness && compositional_index == id_upper) + // Check which layer the current point lies in and return a value of 1 if the field corresponds to the layer. + if (depth <= local_thicknesses[0] && compositional_index == id_upper) return 1.; - else if (depth > local_upper_crust_thickness && depth <= local_upper_crust_thickness+local_lower_crust_thickness && compositional_index == id_lower) + else if (depth > local_thicknesses[0] && depth <= local_thicknesses[0] + local_thicknesses[1] + && compositional_index == id_lower) return 1.; - else if (depth > local_upper_crust_thickness+local_lower_crust_thickness && depth <= local_upper_crust_thickness+local_lower_crust_thickness+local_mantle_lithosphere_thickness && compositional_index == id_mantle_L) + else if (depth > local_thicknesses[0] + local_thicknesses[2] && depth <= local_thicknesses[0] + local_thicknesses[1] + local_thicknesses[2] + && compositional_index == id_mantle_L) return 1.; else return 0.; @@ -101,9 +104,11 @@ namespace aspect double temp_distance = 0; // Loop over all line segments - for (unsigned int i_segments = 0; i_segments < point_list.size(); ++i_segments) + for (unsigned int i_segments = 0; i_segments < rift_point_list.size(); ++i_segments) { - temp_distance = (dim == 2) ? std::abs(surface_position[0]-point_list[i_segments][0][0]) : std::abs(Utilities::distance_to_line(point_list[i_segments], Point<2>(surface_position[0],surface_position[dim-2]))); + // The Utilities function only works in 3d, so compute distance here in 2d. + temp_distance = (dim == 2) ? std::abs(surface_position[0]-rift_point_list[i_segments][0][0]) + : std::abs(Utilities::distance_to_line(rift_point_list[i_segments], Point<2>(surface_position[0],surface_position[dim-2]))); // Get the minimum distance distance_to_rift_axis = std::min(distance_to_rift_axis, temp_distance); @@ -124,10 +129,10 @@ namespace aspect for (unsigned int d=0; d spherical_point = Utilities::Coordinates::cartesian_to_spherical_coordinates(position); // return lon [degrees], lat [degrees] for (unsigned int d=0; d:: distance_to_polygon (const Point &surface_position) const { - // Inside is positive, outside negative. We assume no overlap of the different polygons. + // Inside the polygon is positive, outside negative. We assume the different polygons do not overlap. + // The Utilities function only works in 3d, so compute distance here in 2d. double max_distance = -1e24; unsigned int max_distance_polygon = 0; for (unsigned int n = 0; n(polygon_point_list[n], Point<2>(surface_position[0],surface_position[dim-2])); -//sb std::cout << "Distance to polygon " << n << " " << surface_position << " " << temp_distance << std::endl; } -// std::cout << "Distance to polygon " << dim << " " << surface_position << " " << temp_distance << std::endl; if (temp_distance > max_distance) { max_distance = temp_distance; @@ -183,58 +187,55 @@ namespace aspect { prm.declare_entry ("Standard deviation of Gaussian rift geometry", "20000", Patterns::Double (0), - "The standard deviation of the Gaussian distribution of the amplitude of the strain noise. " - "Note that this parameter is taken to be the same for all rift segments. " - "Units: $m$ or degrees."); + "The standard deviation of the Gaussian distribution of the thinning/thickening " + "of the lithosphere thicknesses. This parameter is taken to be the same " + "for all rift segments. Units: $m$ or degrees."); + prm.declare_entry("Amplitude of Gaussian rift geometry", "0.2", + Patterns::List(Patterns::Double(-1, 1)), + "The amplitude of the Gaussian distribution of the thinning/thickening of the. " + "lithosphere thicknesses. This parameter is taken to be the same for all rift segments, " + "but can be set to vary per lithosphere layer. " + "Units: none."); prm.declare_entry ("Half width of polygon smoothing", "20000", Patterns::Double (0), - "The half width of the hyperbolic tangent smoothing used to transition to the lithospheric thicknesses of the polygon. " - "Note that this parameter is taken to be the same for all polygons. " + "The half width of the hyperbolic tangent smoothing used to transition to the " + "lithospheric thicknesses of the polygon. This parameter is taken to be the same for all polygons. " "Units: $m$ or degrees."); prm.declare_entry ("Blend polygons and rifts", "true", Patterns::Bool (), - "Whether or not to blend the contributions of polygons and the rift. For true, they're blend together. " - "For false, the polygon thicknesses are taken as the local thicknesses. " - "Units: /."); - prm.declare_entry ("Amplitude of Gaussian rift geometry", "0.2", - Patterns::List(Patterns::Double (-1,1)), - "The amplitude of the Gaussian distribution of the amplitude of the strain noise. " - "Note that this parameter is taken to be the same for all rift segments, but can " - "vary per lithosphere layer. " + "Whether or not to blend the contributions of polygons and rift segments. If true, " + "they are blended, if false the polygon thicknesses are taken as the local thicknesses. " "Units: none."); - prm.declare_entry ("Layer thicknesses", "30000.", - Patterns::List(Patterns::Double(0)), - "List of thicknesses for the bottom of the lithospheric layers," - "for a total of N+1 values, where N is the number of compositional fields." - "If only one value is given, then all use the same value. Units: $m$"); - prm.declare_entry ("Rift axis line segments", - "", - Patterns::Anything(), - "Set the line segments that represent the rift axis. Each segment is made up of " - "two points that represent horizontal coordinates (x,y) or (lon,lat). " - "The exact format for the point list describing the segments is " - "\"x1,y1>x2,y2;x2,y2>x3,y3;x4,y4>x5,y5\". Note that the segments can be connected " - "or isolated. The units of the coordinates are " - "dependent on the geometry model. In the box model they are in meters, in the " - "chunks they are in degrees."); + prm.declare_entry("Layer thicknesses", "30000.", + Patterns::List(Patterns::Double(0)), + "List of reference lithospheric layer thicknesses, i.e., the thicknesses of " + "the upper crust, lower crust and lithospheric mantle layers. " + "Units: $m$"); + prm.declare_entry("Rift axis line segments", + "", + Patterns::Anything(), + "The line segments that represent the rift axis separated by a semi-colon. " + "Each segment is made up of two points that represent horizontal coordinates (x,y) or (lon,lat). " + "The exact format for the point list describing the segments is " + "\"x1,y1>x2,y2;x2,y2>x3,y3;x4,y4>x5,y5\". Note that the segments can be connected " + "or isolated. The units of the coordinates are " + "dependent on the geometry model. In the box model they are in meters, in the " + "chunks they are in degrees. Units: $m$ or degrees."); prm.declare_entry ("Lithospheric polygons", "", Patterns::List(Patterns::Anything()), - "Set the polygons that represent an area of different lithospheric thickness. " - "The polygons are separated by semicolons." - "Each polygon is a list of " + "The points making up polygons that represent an area of different lithospheric thickness. " + "The polygons are separated by semicolons. Each polygon is a list of " "points that represent horizontal coordinates (x,y) or (lon,lat). " "The exact format for the point list describing a polygon is " "\"x1,y1>x2,y2>x3,y3>x4,y4>x5,y5\". Note that the polygon is assumed to be closed. " - "The units of the coordinates are " - "dependent on the geometry model. In the box model they are in meters, in the " - "chunks they are in degrees."); + "The units of the coordinates are dependent on the geometry model. " + "In the box model they are in meters, in the chunks they are in degrees. Units: $m$ or degrees."); prm.declare_entry ("Lithospheric polygon layer thicknesses", "30000.", Patterns::List(Patterns::List(Patterns::Double(0),0,3,","),0,10,";"), "List of thicknesses of the lithospheric layers for each polygon." - "For each polygon a total of 3 values should be given (upper crust, lower crust, mantle lithosphere)." - "If only one value is given, then all use the same value. Units: $m$"); - + "For each polygon, a total of 3 thicknesses should be given (upper crust, lower crust, mantle lithosphere)." + "If only one value is given, then all layers are assigned the same value. Units: $m$"); } prm.leave_subsection(); } @@ -246,54 +247,57 @@ namespace aspect LithosphereRift::parse_parameters (ParameterHandler &prm) { // Check that the required compositional fields exist. - AssertThrow(this->introspection().compositional_name_exists("upper"),ExcMessage("We need a compositional field called 'upper' representing the upper crust.")); - AssertThrow(this->introspection().compositional_name_exists("lower"),ExcMessage("We need a compositional field called 'lower' representing the lower crust.")); - AssertThrow(this->introspection().compositional_name_exists("mantle_L"),ExcMessage("We need a compositional field called 'mantle_L' representing the lithospheric part of the mantle.")); + AssertThrow(this->introspection().compositional_name_exists("upper"), + ExcMessage("We need a compositional field called 'upper' representing the upper crust.")); + AssertThrow(this->introspection().compositional_name_exists("lower"), + ExcMessage("We need a compositional field called 'lower' representing the lower crust.")); + AssertThrow(this->introspection().compositional_name_exists("mantle_L"), + ExcMessage("We need a compositional field called 'mantle_L' representing the lithospheric part of the mantle.")); prm.enter_subsection ("Initial composition model"); { prm.enter_subsection("Lithosphere with rift"); { sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); + A_rift = Utilities::possibly_extend_from_1_to_N(Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), + 3, + "Amplitude of Gaussian rift geometry"); sigma_polygon = prm.get_double ("Half width of polygon smoothing"); blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); - A = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), + reference_thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), 3, - "Amplitude of Gaussian rift geometry"); - thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), - 3, - "Layer thicknesses"); + "Layer thicknesses"); // Read in the string of segments const std::string temp_all_segments = prm.get("Rift axis line segments"); // Split the string into segment strings const std::vector temp_segments = Utilities::split_string_list(temp_all_segments,';'); const unsigned int n_temp_segments = temp_segments.size(); - point_list.resize(n_temp_segments); + rift_point_list.resize(n_temp_segments); // Loop over the segments to extract the points - for (unsigned int i_segment = 0; i_segment < n_temp_segments; i_segment++) + for (unsigned int i_segment = 0; i_segment < n_temp_segments; ++i_segment) { // In 3d a line segment consists of 2 points, - // in 2d only 1 (ridge axis orthogonal to x and y) - + // in 2d of only 1 (the horizontal ridge axis runs orthogonal to x and y into the screen) const std::vector temp_segment = Utilities::split_string_list(temp_segments[i_segment],'>'); if (dim == 3) { - AssertThrow(temp_segment.size() == 2,ExcMessage ("The given coordinate '" + temp_segment[i_segment] + "' is not correct. " + AssertThrow(temp_segment.size() == 2,ExcMessage ("The given segment '" + temp_segment[i_segment] + "' is not correct. " "It should only contain 2 parts: " "the two points of the segment, separated by a '>'.")); } else { - AssertThrow(temp_segment.size() == 1,ExcMessage ("The given coordinate '" + temp_segment[i_segment] + "' is not correct. " + AssertThrow(temp_segment.size() == 1,ExcMessage ("The given segment '" + temp_segment[i_segment] + "' is not correct. " "It should only contain 1 part: " "the point representing the rift axis.")); } - // Loop over the dim-1 points of each segment (i.e. in 2d only 1 point is required for a 'segment') - for (unsigned int i_points = 0; i_points < dim-1; i_points++) + // Loop over the dim-1 points of each segment + for (unsigned int i_points = 0; i_points < dim-1; ++i_points) { const std::vector temp_point = Utilities::string_to_double(Utilities::split_string_list(temp_segment[i_points],',')); + if (dim == 3) { AssertThrow(temp_point.size() == 2,ExcMessage ("The given coordinates of segment '" + temp_segment[i_points] + "' are not correct. " @@ -307,13 +311,14 @@ namespace aspect "the one coordinate of the segment end point.")); } - // Add the point to the list of points for this segment - point_list[i_segment][i_points][0] = temp_point[0]; - point_list[i_segment][i_points][1] = temp_point[dim-2]; + // Add the point to the list of points for this segment. Two points are set + // even in 2d, although in 2d they are the same. + rift_point_list[i_segment][i_points][0] = temp_point[0]; + rift_point_list[i_segment][i_points][1] = temp_point[dim-2]; } } - // Split the string into the separate polygons + // Split the polygon string into the separate polygons const std::vector temp_polygons = Utilities::split_string_list(prm.get("Lithospheric polygons"),';'); const std::vector temp_thicknesses = Utilities::split_string_list(prm.get("Lithospheric polygon layer thicknesses"),';'); const unsigned int n_polygons = temp_polygons.size(); @@ -322,24 +327,17 @@ namespace aspect ") does not correspond to the number of polygons for which a thickness is prescribed (" + Utilities::int_to_string(temp_thicknesses.size()) + ").")); - - polygon_point_list.resize(n_polygons); polygon_thicknesses.resize(n_polygons); for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) { polygon_thicknesses[i_polygons] = Utilities::string_to_double(Utilities::split_string_list(temp_thicknesses[i_polygons],',')); - AssertThrow(polygon_thicknesses[i_polygons].size()==3, + AssertThrow(polygon_thicknesses[i_polygons].size() == 3, ExcMessage ("The number of layer thicknesses should be equal to 3 for polygon: " + Utilities::int_to_string(i_polygons) + " but it is " + Utilities::int_to_string(polygon_thicknesses[i_polygons].size()))); -//sb std::cout << "polygon thicknesses "; -//sb for (unsigned int q=0; q temp_points = Utilities::split_string_list(temp_polygons[i_polygons],'>'); const unsigned int n_temp_points = temp_points.size(); if (dim == 3) @@ -350,9 +348,11 @@ namespace aspect { AssertThrow(n_temp_points==2, ExcMessage ("The number of polygon points should be equal to 2 in 2d.")); } + polygon_point_list[i_polygons].resize(n_temp_points); - // Loop over the points of the polygon. Each point should consist of 2 values (lon and lat coordinate). - for (unsigned int i_points = 0; i_points < n_temp_points; i_points++) + + // Loop over the points of the polygon. Each point coordinate should consist of 2 (in 3d) or 1 (in 2d) values. + for (unsigned int i_points = 0; i_points < n_temp_points; ++i_points) { const std::vector temp_point = Utilities::string_to_double(Utilities::split_string_list(temp_points[i_points],',')); AssertThrow(temp_point.size() == dim-1,ExcMessage ("The given coordinates of point '" + temp_points[i_points] + "' are not correct. " @@ -363,6 +363,8 @@ namespace aspect polygon_point_list[i_polygons][i_points][0] = temp_point[0]; polygon_point_list[i_polygons][i_points][1] = temp_point[dim-2]; } + + // For simplicity later on, we want the polygon coordinates of each point in 2d to be increasing. if (dim == 2) AssertThrow(polygon_point_list[i_polygons][0][0] < polygon_point_list[i_polygons][1][0], ExcMessage("The order of the x coordinates of the 2 points " "of each 2d polygon should be ascending. ")); @@ -385,12 +387,13 @@ namespace aspect ASPECT_REGISTER_INITIAL_COMPOSITION_MODEL(LithosphereRift, "lithosphere with rift", "A class that implements initial conditions for a continental rift " - "by computing the thickness of the upper crust, lower crust and mantle " - "lithosphere layers. This thickness decreases towards the axis of the " + "by computing the variable thickness of the upper crust, lower crust and mantle " + "lithosphere layers. Thicknesses can change towards the axis of the " "rift according to a Gaussian distribution whose amplitude and standard " "deviation can be specified from the input file. " "Additional variations in layer thicknesses can be introduced through the " "addition of polygons. Note that the different polygons " - "are assumed not to overlap. ") + "are assumed not to overlap. The user can decide how overlapping rifts " + "and polygons are treated. ") } } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h index 267914645ba..dbd5902e0bc 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2017 by the authors of the ASPECT code. + Copyright (C) 2023 by the authors of the ASPECT code. This file is part of ASPECT. @@ -60,17 +60,18 @@ namespace aspect const unsigned int compositional_index) const; /** - * Return the overall shortest distance to the rift segments + * Return the overall shortest distance to the rift center segments. */ double distance_to_rift (const Point &position) const; /* - * Return the overall shortest distance to the polygon segments + * Return the overall shortest distance to the polygon segments. Polygons + * can be used to specify lithosphere of different thicknesses. */ std::pair distance_to_polygon (const Point &position) const; /* - * Return the position of the point in surface coordinates + * Return the position of the point in surface coordinates, * i.e. x(,y) in meters or lon(,lat) in degrees. */ Point surface_position (const Point &position, @@ -93,11 +94,23 @@ namespace aspect private: /** - * The standard deviation of the Gaussian amplitude of the lithospheric thicknesses - * with distance from the rift axis. + * The standard deviation of the rift-perpendicular Gaussian distribution + * of the thinning/thickening of the lithospheric thicknesses with its + * maximum along the rift axis. */ double sigma_rift; + /** + * The maximum amplitude of the Gaussian distribution of the thinning/thickening + * of the lithospheric thicknesses with distance from the rift axis. + * The amplitude should have values between -1 and 1, where positive + * numbers represent a reduction in thickness and negative numbers an increase. + * For example, values of 0.25, 0, 0 reduce the reference thickness of the + * upper crust by 25%, while the lower crust and mantle lithosphere are + * untouched. + */ + std::vector A_rift; + /** * The half width of the hyperbolic tangent used to smooth the transitions * between reference and polygon lithospheric thicknesses. @@ -110,38 +123,30 @@ namespace aspect */ bool blend_rift_and_polygon; - /** - * The maximum amplitude of the Gaussian distribution of the lithospheric thicknesses - * with distance from the rift axis. It should have values between -1 and 1, where positive - * numbers represent a reduction in thickness and negative numbers an increase. - */ - std::vector A; - /** * The list of line segments consisting of two 2d coordinates per segment. * The segments represent the rift axis. */ - std::vector,2 > > point_list; + std::vector,2 >> rift_point_list; /** * The list of lists of polygon points. - * The polygon represents an area of different lithospheric thicknesses. + * The polygons can represent areas of different lithospheric thicknesses. */ - std::vector > > polygon_point_list; + std::vector>> polygon_point_list; /** - * Vector for the reference field thicknesses away from the rift. + * Vector for the reference field thicknesses away from rift and polygons. */ - std::vector thicknesses; + std::vector reference_thicknesses; /** - * Vector for the field thicknesses inside the polygons. + * Vector for the field thicknesses for each polygon. */ - std::vector > polygon_thicknesses; - + std::vector> polygon_thicknesses; }; } } -#endif +#endiff From 893bcbea92a7705bf375bcdee44cf15cf4060f83 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Tue, 2 Jan 2024 19:40:50 +0100 Subject: [PATCH 12/38] Clean up IT --- .../lithosphere_rift_IT.h | 49 ++++++++++++------- .../lithosphere_rift_IT_2.cc | 8 +-- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h index 24cc4c3fff4..cc40a4f4689 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h @@ -83,6 +83,7 @@ namespace aspect parse_parameters (ParameterHandler &prm); private: + /** * Surface temperature */ @@ -94,48 +95,58 @@ namespace aspect double LAB_isotherm; /** - * Wheter or not to take the polygon thicknesses as dominant, or to smooth them - * gradually into rift areas. - */ - bool blend_rift_and_polygon; - - /** - * Vector for field heat production rates. + * Vector for lithospheric layer heat production rates. */ std::vector heat_productivities; /** - * Vector for thermal conductivities. + * Vector for lithospheric layer thermal conductivities. */ std::vector conductivities; /** - * Vector for field densities. + * Vector for lithospheric layer densities. */ std::vector densities; /** * Vector for the reference field thicknesses. */ - std::vector thicknesses; + std::vector reference_thicknesses; /** - * Vector for the reference field thicknesses away from the rift. + * The standard deviation of the Gaussian distribution of the lithospheric thicknesses + * around the rift segments. */ - std::vector > polygon_thicknesses; + double sigma_rift; /** - * The standard deviation of the Gaussian amplitude of the lithospheric thicknesses. + * The maximum amplitude of the Gaussian distribution of the thinning/thickening + * of the lithospheric thicknesses with distance from the rift axis. + * The amplitude should have values between -1 and 1, where positive + * numbers represent a reduction in thickness and negative numbers an increase. + * For example, values of 0.25, 0, 0 reduce the reference thickness of the + * upper crust by 25%, while the lower crust and mantle lithosphere are + * untouched. + */ + std::vector A_rift; + + /** + * Vector for the polygon thicknesses. + */ + std::vector> polygon_thicknesses; + + /** + * The half width of the hyperbolic tangent used to smooth the transitions + * between reference and polygon lithospheric thicknesses. */ - double sigma_rift; double sigma_polygon; /** - * The maximum amplitude of the Gaussian distribution of the lithospheric thicknesses - * with distance from the rift axis. It should have values between -1 and 1, where positive - * numbers represent a reduction in thickness and negative numbers an increase. + * Whether or not to take the polygon thicknesses as dominant, or to smooth them + * gradually into rift areas. */ - std::vector A; + bool blend_rift_and_polygon; /** * Whether or not to use a compensation depth for the temperature @@ -168,4 +179,4 @@ namespace aspect } -#endif +#endif \ No newline at end of file diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index 9c6c084f5bc..bbbb42872db 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -93,15 +93,15 @@ namespace aspect local_thicknesses[0] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][0] +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[0]) *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + (1.0 - A_rift[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); local_thicknesses[1] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); local_thicknesses[2] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); const double depth = this->get_geometry_model().depth(position); @@ -196,7 +196,7 @@ namespace aspect sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); sigma_polygon = prm.get_double ("Half width of polygon smoothing"); blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); - A = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), + A_rift = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), 3, "Amplitude of Gaussian rift geometry"); thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), From 2f60c80c1eaca82c53e6700a764b1536bcf79366 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Mon, 15 Jan 2024 09:49:45 +0100 Subject: [PATCH 13/38] Clean up IT --- .../lithosphere_rift_IT.h | 6 + .../lithosphere_rift_IT_2.cc | 103 ++++++++++-------- 2 files changed, 65 insertions(+), 44 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h index cc40a4f4689..0d3d2b4dfdb 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h @@ -174,6 +174,12 @@ namespace aspect * Vector containing the names of the compositional fields. */ std::vector list_of_composition_names; + + /** + * Whether a cartesian box geometry is used, or a geometry + * of spherical type (e.g., shell or chunk). + */ + bool cartesian_geometry; }; } } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index bbbb42872db..cfd0290ed22 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -44,22 +44,27 @@ namespace aspect initialize () { - // Check that the required radioactive heating model ("compositional heating") is used + // Check that the required radioactive heating model ("compositional heating") is used. const std::vector &heating_models = this->get_heating_model_manager().get_active_heating_model_names(); AssertThrow(std::find(heating_models.begin(), heating_models.end(), "compositional heating") != heating_models.end(), ExcMessage("The lithosphere with rift initial temperature plugin requires the compositional heating plugin.")); - // Check that the required material model ("visco plastic") is used - //AssertThrow((dynamic_cast *> (const_cast *>(&this->get_material_model()))) != 0, - AssertThrow((dynamic_cast *> (const_cast *>(&this->get_material_model()))) != 0, + // Check that the required material model ("visco plastic") is used. + AssertThrow(Plugins::plugin_type_matches> (this->get_material_model()), ExcMessage("The lithosphere with rift initial temperature plugin requires the viscoplastic material model plugin.")); // The simulator only keeps the initial conditions around for // the first time step. As a consequence, we have to save a - // shared pointer to that object ourselves the first time we get - // here. + // shared pointer to that object ourselves the first time we get here. if (initial_composition_manager == nullptr) initial_composition_manager = this->get_initial_composition_manager_pointer(); + + // Check that the required initial composition model is used. + AssertThrow(initial_composition_manager->template has_matching_initial_composition_model>(), + ExcMessage("The initial temperature plugin lithosphere with rift requires the correspond initial composition plugin.")); + + // Determine whether a cartesian or a spherical geometry is used. + cartesian_geometry = dynamic_cast *>(&this->get_geometry_model()) != NULL ? true : false; } @@ -69,40 +74,43 @@ namespace aspect initial_temperature (const Point &position) const { // Determine coordinate system - const bool cartesian_geometry = dynamic_cast *>(&this->get_geometry_model()) != NULL ? true : false; + //const bool cartesian_geometry = dynamic_cast *>(&this->get_geometry_model()) != NULL ? true : false; // Get the distance to the line segments along a path parallel to the surface - //InitialComposition::LithosphereRift *ic = dynamic_cast *> (const_cast *>(&this->get_initial_composition())); - double distance_to_rift_axis = 1e23; Point surface_position; std::pair distance_to_L_polygon; - for (typename std::list>>::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); - it != initial_composition_manager->get_active_initial_composition_conditions().end(); - ++it) - if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) - { - surface_position = ic->surface_position(position, cartesian_geometry); - distance_to_rift_axis = ic->distance_to_rift(surface_position); - distance_to_L_polygon = ic->distance_to_polygon(surface_position); - } + // Get the initial composition plugin + const InitialComposition::LithosphereRift &ic = initial_composition_manager->template get_matching_initial_composition_model>(); + //for (typename std::list>>::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); + // it != initial_composition_manager->get_active_initial_composition_conditions().end(); + // ++it) + // if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) + // { + surface_position = ic.surface_position(position, cartesian_geometry); + distance_to_rift_axis = ic.distance_to_rift(surface_position); + distance_to_L_polygon = ic.distance_to_polygon(surface_position); + // } // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere // based on the distance from the rift axis. std::vector local_thicknesses(3); - local_thicknesses[0] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][0] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[0]) - *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A_rift[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - local_thicknesses[1] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) - *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - local_thicknesses[2] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) + for (unsigned int i = 0; i<3; ++i) + local_thicknesses[i] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][i] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[i]) *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - + (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + + // local_thicknesses[1] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] + // +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) + // *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : + // (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + // local_thicknesses[2] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] + // +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) + // *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : + // (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + + // Get depth with respect to the surface. const double depth = this->get_geometry_model().depth(position); return temperature(depth, local_thicknesses); @@ -135,11 +143,13 @@ namespace aspect // Temperature in layer 3 else if (depth < layer_thicknesses[0]+layer_thicknesses[1]+layer_thicknesses[2]) return (LAB_isotherm-T2)/layer_thicknesses[2] *(depth-layer_thicknesses[0]-layer_thicknesses[1]) + T2; - // Return a constant sublithospheric temperature of . - // This way we can combine the continental geotherm with an adiabatic profile from the input file - // using the "if valid" operator on the "List of initial temperature models" + // Temperature in the sublithospheric mantle up to the user-set compensation depth + // equals the temperature at the lithosphere-asthenosphere boundary. else if (use_compensation_depth && depth < compensation_depth) return LAB_isotherm; + // Return a NaN sublithospheric temperature. + // This way we can combine the continental geotherm with an adiabatic profile from the input file + // using the "if valid" operator on the "List of initial temperature models". else return std::numeric_limits::quiet_NaN(); } @@ -153,23 +163,26 @@ namespace aspect { prm.enter_subsection("Lithosphere with rift"); { - prm.declare_entry ("Surface temperature", "273.15", Patterns::Double (0), "The value of the surface temperature. Units: Kelvin."); prm.declare_entry ("LAB isotherm temperature", "1673.15", Patterns::Double (0), "The value of the isothermal boundary temperature assumed at the LAB " - "and up to the reference depth . Units: Kelvin."); + "and up to the compensation depth when this compensation is set. Units: Kelvin."); prm.declare_entry ("Use temperature compensation depth", "false", Patterns::Bool (), "Whether or not to use a compensation depth to which the LAB isotherm temperature " - "is prescribed when no lithosphere is present. Below this depth, 10 times the isotherm " - "is prescribed . Units: -."); - prm.declare_entry ("Temperature compensation depth", "100e3", + "is prescribed below the lithosphere. If true, this plugin can be combined with " + "the adabiatic temperature plugin. The adiabtic surface temperature can be used to " + "match the LAB temperature and the adiabatic temperature at the compensation depth. " + "If false, combining this plugin with the adiabtic temperature plugin will lead to " + "jumps in the temperature profile at the LAB when the lithospheric thickness varies " + "laterally. Units: -."); + prm.declare_entry ("Temperature compensation depth", "120e3", Patterns::Double (0), - "The depth of the temperature compensation depth, " - "i.e. the depth up to which the LAB isotherm is prescribed when not in the lithosphere. Units: Kelvin."); + "The depth of the temperature compensation, i.e. the depth up to which the LAB isotherm " + "is prescribed below the lithosphere. Units: Kelvin."); } prm.leave_subsection(); } @@ -193,13 +206,13 @@ namespace aspect { prm.enter_subsection("Lithosphere with rift"); { - sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); - sigma_polygon = prm.get_double ("Half width of polygon smoothing"); + sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); + sigma_polygon = prm.get_double ("Half width of polygon smoothing"); blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); - A_rift = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), + A_rift = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), 3, "Amplitude of Gaussian rift geometry"); - thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), + reference_thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), 3, "Layer thicknesses"); // Split the string into the separate polygons @@ -336,6 +349,8 @@ namespace aspect "This is a temperature initial condition that " "computes a continental geotherm based on the " "conductive equations of Turcotte and Schubert Ch. 4.6. " + "This plugin only works with the corresponding composition " + "initial conditions plugin 'lithosphere with rift'. " "The geotherm can be computed for any number of crustal " "layers, for each of which a density, heat production and thermal " "conductivity should be supplied. " From 5d382362fc8184163cf818b4363da9b660429ab5 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Mon, 15 Jan 2024 09:50:45 +0100 Subject: [PATCH 14/38] Fix type --- .../initial_conditions_continental_rift/lithosphere_rift_IC.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h index dbd5902e0bc..e5623570170 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h @@ -149,4 +149,4 @@ namespace aspect } -#endiff +#endif From 4bf53aac3b97576cfa03fcec9622795b3d083c97 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Mon, 15 Jan 2024 18:05:36 +0100 Subject: [PATCH 15/38] Astyle --- .../lithosphere_rift_topo.cc | 2 +- .../lithosphere_rift_topo.h | 2 +- .../rift_box_initial_plastic_strain.cc | 4 ++-- .../rift_box_initial_plastic_strain.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc index 50556895053..eb97a691a33 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -151,7 +151,7 @@ namespace aspect // Get the distance to the line segments along a path parallel to the surface double distance_to_rift_axis = 1e23; std::pair distance_to_L_polygon; - for (typename std::list > >::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); + for (typename std::list>>::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); it != initial_composition_manager->get_active_initial_composition_conditions().end(); ++it) if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h index d6f6411daae..5e8a7937e1a 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h @@ -137,7 +137,7 @@ namespace aspect /** * Vector for the polygon thicknesses at the center. */ - std::vector > polygon_thicknesses; + std::vector> polygon_thicknesses; /** * The maximum topography in this model diff --git a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc index 54b46f0db46..4749c0e9752 100644 --- a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc +++ b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc @@ -37,7 +37,7 @@ namespace aspect void RiftBoxInitialPlasticStrain::initialize () { - AssertThrow(Plugins::plugin_type_matches >(this->get_material_model()), + AssertThrow(Plugins::plugin_type_matches>(this->get_material_model()), ExcMessage("This initial condition only makes sense in combination with the visco_plastic material model.")); @@ -196,7 +196,7 @@ namespace aspect ExcMessage("This plugin requires a compositional field named plastic_strain. ")); strain_composition_number = this->introspection().compositional_index_for_name("plastic_strain"); - AssertThrow(Plugins::plugin_type_matches >(this->get_geometry_model()), + AssertThrow(Plugins::plugin_type_matches>(this->get_geometry_model()), ExcMessage("This initial condition only makes sense in combination with the box geometry model.")); // Get the number of mesh cells in each direction diff --git a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h index 8413f4ccb3d..d8bdd7329af 100644 --- a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h +++ b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h @@ -115,7 +115,7 @@ namespace aspect * The list of line segments consisting of two 2d coordinates per segment (even in 2d). * The segments represent the rift axis. */ - std::vector,2 > > point_list; + std::vector,2 >> point_list; /** * A table with random noise for the From 9a3c9c5316aa51f605579d6a81122ca2fa126769 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Tue, 16 Jan 2024 09:15:58 +0100 Subject: [PATCH 16/38] Indent --- .../CMakeLists.txt | 2 +- .../initial_conditions_continental_rift.prm | 28 +++---- .../lithosphere_rift_IC.cc | 54 +++++++------- .../lithosphere_rift_IT.h | 2 +- .../lithosphere_rift_IT_2.cc | 73 +++++++------------ 5 files changed, 71 insertions(+), 88 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/CMakeLists.txt b/cookbooks/initial_conditions_continental_rift/CMakeLists.txt index 5763297edab..9d718c97571 100644 --- a/cookbooks/initial_conditions_continental_rift/CMakeLists.txt +++ b/cookbooks/initial_conditions_continental_rift/CMakeLists.txt @@ -35,7 +35,7 @@ DEAL_II_INITIALIZE_CACHED_VARIABLES() SET(TARGET "initial_conditions_continental_rift") PROJECT(${TARGET}) -ADD_LIBRARY(${TARGET} SHARED +ADD_LIBRARY(${TARGET} SHARED lithosphere_rift_IC.cc lithosphere_rift_IT_2.cc lithosphere_rift_topo.cc diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm index 2859f28ae40..4ef594afbaa 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm @@ -141,36 +141,36 @@ subsection Initial composition model set Standard deviation of Gaussian rift geometry = 60e3 set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 # LAB at 110 km - set Rift axis line segments = 350e3 + set Rift axis line segments = 350e3 set Layer thicknesses = 20e3, 15e3, 85e3 - + # Polygon LAB at 200 km set Lithospheric polygon layer thicknesses = 23e3, 20e3 , 157.e3 set Lithospheric polygons = 450e3 > 3000e3 - set Half width of polygon smoothing = 10e3 + set Half width of polygon smoothing = 10e3 end - - # Inherited noise + + # Inherited noise subsection Rift box initial plastic strain - set Standard deviation of Gaussian noise amplitude distribution = 200e3 + set Standard deviation of Gaussian noise amplitude distribution = 200e3 set Maximum amplitude of Gaussian noise amplitude distribution = 0.250000 set Random number generator seed = 2.000000 - set Depth around which Gaussian noise is smoothed out = 50e3 - set Halfwidth with which Gaussian noise is smoothed out in depth = 10e3 + set Depth around which Gaussian noise is smoothed out = 50e3 + set Halfwidth with which Gaussian noise is smoothed out in depth = 10e3 #set Grid intervals for noise X or radius = 2240 # Add 16 intervals for the additional 5 km that is added to the grid # to account for initial topography #set Grid intervals for noise Y or longitude = 976 #960 set Rift axis line segments = 350e3 end - + subsection Function set Variable names = x,y set Function expression = 0; \ 0; \ 0; \ - 0; \ - 0 + 0; \ + 0 end # subsection Function # set Variable names = x,y @@ -190,8 +190,8 @@ subsection Boundary composition model set Function expression = 0; \ 0; \ 0; \ - 0; \ - 0 + 0; \ + 0 end end @@ -252,7 +252,7 @@ subsection Initial temperature model 0; \ 0; \ 0; \ - 0; \ + 0; \ if(x<23e3,1,0); \ if(x>=23e3&x<43e3,1,0); \ if(x>=43e3&x<200e3,1,0); \ diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc index 0c32696912b..ae3309bf6ff 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc @@ -185,22 +185,22 @@ namespace aspect { prm.enter_subsection("Lithosphere with rift"); { - prm.declare_entry ("Standard deviation of Gaussian rift geometry", "20000", - Patterns::Double (0), - "The standard deviation of the Gaussian distribution of the thinning/thickening " - "of the lithosphere thicknesses. This parameter is taken to be the same " - "for all rift segments. Units: $m$ or degrees."); + prm.declare_entry("Standard deviation of Gaussian rift geometry", "20000", + Patterns::Double(0), + "The standard deviation of the Gaussian distribution of the thinning/thickening " + "of the lithosphere thicknesses. This parameter is taken to be the same " + "for all rift segments. Units: \\si{\\meter} or degrees."); prm.declare_entry("Amplitude of Gaussian rift geometry", "0.2", Patterns::List(Patterns::Double(-1, 1)), "The amplitude of the Gaussian distribution of the thinning/thickening of the. " "lithosphere thicknesses. This parameter is taken to be the same for all rift segments, " "but can be set to vary per lithosphere layer. " "Units: none."); - prm.declare_entry ("Half width of polygon smoothing", "20000", - Patterns::Double (0), - "The half width of the hyperbolic tangent smoothing used to transition to the " - "lithospheric thicknesses of the polygon. This parameter is taken to be the same for all polygons. " - "Units: $m$ or degrees."); + prm.declare_entry("Half width of polygon smoothing", "20000", + Patterns::Double(0), + "The half width of the hyperbolic tangent smoothing used to transition to the " + "lithospheric thicknesses of the polygon. This parameter is taken to be the same for all polygons. " + "Units: \\si{\\meter} or degrees."); prm.declare_entry ("Blend polygons and rifts", "true", Patterns::Bool (), "Whether or not to blend the contributions of polygons and rift segments. If true, " @@ -210,7 +210,7 @@ namespace aspect Patterns::List(Patterns::Double(0)), "List of reference lithospheric layer thicknesses, i.e., the thicknesses of " "the upper crust, lower crust and lithospheric mantle layers. " - "Units: $m$"); + "Units: \\si{\\meter}"); prm.declare_entry("Rift axis line segments", "", Patterns::Anything(), @@ -220,22 +220,22 @@ namespace aspect "\"x1,y1>x2,y2;x2,y2>x3,y3;x4,y4>x5,y5\". Note that the segments can be connected " "or isolated. The units of the coordinates are " "dependent on the geometry model. In the box model they are in meters, in the " - "chunks they are in degrees. Units: $m$ or degrees."); - prm.declare_entry ("Lithospheric polygons", - "", - Patterns::List(Patterns::Anything()), - "The points making up polygons that represent an area of different lithospheric thickness. " - "The polygons are separated by semicolons. Each polygon is a list of " - "points that represent horizontal coordinates (x,y) or (lon,lat). " - "The exact format for the point list describing a polygon is " - "\"x1,y1>x2,y2>x3,y3>x4,y4>x5,y5\". Note that the polygon is assumed to be closed. " - "The units of the coordinates are dependent on the geometry model. " - "In the box model they are in meters, in the chunks they are in degrees. Units: $m$ or degrees."); - prm.declare_entry ("Lithospheric polygon layer thicknesses", "30000.", - Patterns::List(Patterns::List(Patterns::Double(0),0,3,","),0,10,";"), - "List of thicknesses of the lithospheric layers for each polygon." - "For each polygon, a total of 3 thicknesses should be given (upper crust, lower crust, mantle lithosphere)." - "If only one value is given, then all layers are assigned the same value. Units: $m$"); + "chunks they are in degrees. Units: \\si{\\meter} or degrees."); + prm.declare_entry("Lithospheric polygons", + "", + Patterns::List(Patterns::Anything()), + "The points making up polygons that represent an area of different lithospheric thickness. " + "The polygons are separated by semicolons. Each polygon is a list of " + "points that represent horizontal coordinates (x,y) or (lon,lat). " + "The exact format for the point list describing a polygon is " + "\"x1,y1>x2,y2>x3,y3>x4,y4>x5,y5\". Note that the polygon is assumed to be closed. " + "The units of the coordinates are dependent on the geometry model. " + "In the box model they are in meters, in the chunks they are in degrees. Units: \\si{\\meter} or degrees."); + prm.declare_entry("Lithospheric polygon layer thicknesses", "30000.", + Patterns::List(Patterns::List(Patterns::Double(0), 0, 3, ","), 0, 10, ";"), + "List of thicknesses of the lithospheric layers for each polygon." + "For each polygon, a total of 3 thicknesses should be given (upper crust, lower crust, mantle lithosphere)." + "If only one value is given, then all layers are assigned the same value. Units: \\si{\\meter}"); } prm.leave_subsection(); } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h index 0d3d2b4dfdb..cbb9ed56d38 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h @@ -185,4 +185,4 @@ namespace aspect } -#endif \ No newline at end of file +#endiff diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index cfd0290ed22..7f861bcf88e 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -61,7 +61,7 @@ namespace aspect // Check that the required initial composition model is used. AssertThrow(initial_composition_manager->template has_matching_initial_composition_model>(), - ExcMessage("The initial temperature plugin lithosphere with rift requires the correspond initial composition plugin.")); + ExcMessage("The initial temperature plugin lithosphere with rift requires the correspond initial composition plugin.")); // Determine whether a cartesian or a spherical geometry is used. cartesian_geometry = dynamic_cast *>(&this->get_geometry_model()) != NULL ? true : false; @@ -73,42 +73,24 @@ namespace aspect LithosphereRift:: initial_temperature (const Point &position) const { - // Determine coordinate system - //const bool cartesian_geometry = dynamic_cast *>(&this->get_geometry_model()) != NULL ? true : false; - // Get the distance to the line segments along a path parallel to the surface double distance_to_rift_axis = 1e23; Point surface_position; std::pair distance_to_L_polygon; // Get the initial composition plugin const InitialComposition::LithosphereRift &ic = initial_composition_manager->template get_matching_initial_composition_model>(); - //for (typename std::list>>::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); - // it != initial_composition_manager->get_active_initial_composition_conditions().end(); - // ++it) - // if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) - // { - surface_position = ic.surface_position(position, cartesian_geometry); - distance_to_rift_axis = ic.distance_to_rift(surface_position); - distance_to_L_polygon = ic.distance_to_polygon(surface_position); - // } + surface_position = ic.surface_position(position, cartesian_geometry); + distance_to_rift_axis = ic.distance_to_rift(surface_position); + distance_to_L_polygon = ic.distance_to_polygon(surface_position); // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere // based on the distance from the rift axis. std::vector local_thicknesses(3); for (unsigned int i = 0; i<3; ++i) - local_thicknesses[i] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][i] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[i]) - *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - - // local_thicknesses[1] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] - // +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) - // *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - // (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - // local_thicknesses[2] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] - // +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) - // *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - // (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + local_thicknesses[i] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][i] + +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[i]) + *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : + (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); // Get depth with respect to the surface. const double depth = this->get_geometry_model().depth(position); @@ -163,26 +145,27 @@ namespace aspect { prm.enter_subsection("Lithosphere with rift"); { - prm.declare_entry ("Surface temperature", "273.15", - Patterns::Double (0), - "The value of the surface temperature. Units: Kelvin."); - prm.declare_entry ("LAB isotherm temperature", "1673.15", - Patterns::Double (0), - "The value of the isothermal boundary temperature assumed at the LAB " - "and up to the compensation depth when this compensation is set. Units: Kelvin."); + prm.declare_entry("Surface temperature", "273.15", + Patterns::Double(0), + "The value of the surface temperature. Units: \\si{\\kelvin}."); + prm.declare_entry("LAB isotherm temperature", "1673.15", + Patterns::Double(0), + "The value of the isothermal boundary temperature assumed at the LAB " + "and up to the compensation depth when 'Use temperature compensation depth' " + "is set to true. Units: \\si{\\kelvin}."); prm.declare_entry ("Use temperature compensation depth", "false", Patterns::Bool (), - "Whether or not to use a compensation depth to which the LAB isotherm temperature " + "Whether or not to use a compensation depth up to which the LAB isotherm temperature " "is prescribed below the lithosphere. If true, this plugin can be combined with " - "the adabiatic temperature plugin. The adiabtic surface temperature can be used to " - "match the LAB temperature and the adiabatic temperature at the compensation depth. " - "If false, combining this plugin with the adiabtic temperature plugin will lead to " + "the adabiatic temperature plugin. The adiabatic surface temperature can be adapted to " + "ensure the LAB temperature and the adiabatic temperature match at the compensation depth. " + "If false, combining this plugin with the adiabatic temperature plugin will lead to " "jumps in the temperature profile at the LAB when the lithospheric thickness varies " "laterally. Units: -."); - prm.declare_entry ("Temperature compensation depth", "120e3", - Patterns::Double (0), - "The depth of the temperature compensation, i.e. the depth up to which the LAB isotherm " - "is prescribed below the lithosphere. Units: Kelvin."); + prm.declare_entry("Temperature compensation depth", "120e3", + Patterns::Double(0), + "The depth of the temperature compensation, i.e. the depth up to which the LAB isotherm " + "is prescribed below the lithosphere. Units: \\si{\\meter}."); } prm.leave_subsection(); } @@ -210,11 +193,11 @@ namespace aspect sigma_polygon = prm.get_double ("Half width of polygon smoothing"); blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); A_rift = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), - 3, - "Amplitude of Gaussian rift geometry"); + 3, + "Amplitude of Gaussian rift geometry"); reference_thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), - 3, - "Layer thicknesses"); + 3, + "Layer thicknesses"); // Split the string into the separate polygons const std::vector temp_thicknesses = Utilities::split_string_list(prm.get("Lithospheric polygon layer thicknesses"),';'); const unsigned int n_polygons = temp_thicknesses.size(); From ec5fd24aed452d838d7dd0f3026180e3f326f3b8 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Wed, 17 Jan 2024 18:05:02 +0100 Subject: [PATCH 17/38] Use function instead of cast --- .../lithosphere_rift_IT_2.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index 7f861bcf88e..511f30ad148 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -64,7 +64,7 @@ namespace aspect ExcMessage("The initial temperature plugin lithosphere with rift requires the correspond initial composition plugin.")); // Determine whether a cartesian or a spherical geometry is used. - cartesian_geometry = dynamic_cast *>(&this->get_geometry_model()) != NULL ? true : false; + cartesian_geometry = Plugins::plugin_type_matches> (geometry_model); } From b81547d5c6f9a47fc28ab6474db3367e29321be5 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 18 Jan 2024 10:05:43 +0100 Subject: [PATCH 18/38] Update comments topo --- .../lithosphere_rift_topo.h | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h index 5e8a7937e1a..463d47c7174 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2016 by the authors of the ASPECT code. + Copyright (C) 2024 by the authors of the ASPECT code. This file is part of ASPECT. @@ -33,8 +33,8 @@ namespace aspect /** * A class that describes an initial topography for the geometry model, - * by defining a set of polylines on the surface from the prm file. It - * sets the elevation in each Polyline to a constant value. + * based on isostatically balancing the thinning of lithospheric layers + * around a rift axis. */ template class LithosphereRift : public Interface, @@ -76,8 +76,9 @@ namespace aspect private: /** - * The standard deviation of the Gaussian amplitude of the lithospheric thicknesses - * with distance from the rift axis. + * The standard deviation of the rift-perpendicular Gaussian distribution + * of the thinning/thickening of the lithospheric thicknesses with its + * maximum along the rift axis. */ double sigma_rift; @@ -88,11 +89,15 @@ namespace aspect double sigma_polygon; /** - * The maximum amplitude of the Gaussian distribution of the lithospheric thicknesses - * with distance from the rift axis. It should have values between -1 and 1, where positive + * The maximum amplitude of the Gaussian distribution of the thinning/thickening + * of the lithospheric thicknesses with distance from the rift axis. + * The amplitude should have values between -1 and 1, where positive * numbers represent a reduction in thickness and negative numbers an increase. + * For example, values of 0.25, 0, 0 reduce the reference thickness of the + * upper crust by 25%, while the lower crust and mantle lithosphere are + * untouched. */ - std::vector A; + std::vector A_rift; /** * The maximum amplitude of the Gaussian distribution of the topography around the rift. @@ -100,14 +105,19 @@ namespace aspect double topo_rift_amplitude; /** - * The reference lithospheric column used in computing the topography based on isostasy - * and the thickness of this column. + * The product of density, gravitational accelleration constant and thickness of the + * reference lithospheric column used in computing the topography based on isostasy. */ double ref_rgh; + + /** + * The thickness/depth of the reference lithospheric column used in computing the topography + * based on isostasy. + */ double compensation_depth; /** - * Wheter or not to take the polygon thicknesses as dominant, or to smooth them + * Whether or not to take the polygon thicknesses as dominant, or to smooth them * gradually into rift areas. */ bool blend_rift_and_polygon; @@ -127,7 +137,7 @@ namespace aspect /** * Vector for the reference field thicknesses away from the rift. */ - std::vector thicknesses; + std::vector reference_thicknesses; /** * Vector for the rift thicknesses at the center. From 75fc9743b95cf0441617248a3a531b9c32376faf Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 19 Jan 2024 15:49:27 +0100 Subject: [PATCH 19/38] Update topo files --- .../lithosphere_rift_topo.cc | 41 ++++++++++++++----- .../lithosphere_rift_topo.h | 3 +- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc index eb97a691a33..2f8e961a9aa 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -81,7 +81,7 @@ namespace aspect double rift_rgh = 0; rift_thicknesses = thicknesses; for (unsigned int l=0; l 0.-2.*sigma_polygon ? 1. : - (1.0 - A[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + (1.0 - A_rift[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); local_thicknesses[1] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); local_thicknesses[2] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); // The local lithospheric column double local_rgh = 0; @@ -216,7 +216,7 @@ namespace aspect sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); sigma_polygon = prm.get_double ("Half width of polygon smoothing"); blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); - A = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), + A_rift = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), 3, "Amplitude of Gaussian rift geometry"); thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), @@ -247,12 +247,31 @@ namespace aspect prm.enter_subsection("Visco Plastic"); { n_phases_for_each_composition = std::make_unique>(); - temp_densities = Utilities::parse_map_to_double_array (prm.get("Densities"), - list_of_composition_names, - /*has_background_field=*/true, - "Densities", - true, - n_phases_for_each_composition); + + const std::vector indices = this->introspection().chemical_composition_field_indices(); + + std::vector n_phases_for_each_chemical_composition = {n_phases_for_each_composition[0]}; + for (auto i : indices) + { + n_phases_for_each_chemical_composition.push_back(n_phases_for_each_composition[i + 1]); + } + + std::vector chemical_field_names = this->introspection().chemical_composition_field_names(); + chemical_field_names.insert(chemical_field_names.begin(), "background"); + + std::vector compositional_field_names = this->introspection().get_composition_names(); + compositional_field_names.insert(compositional_field_names.begin(), "background"); + + Utilities::MapParsing::Options options(chemical_field_names, "Densities"); + options.list_of_allowed_keys = compositional_field_names; + options.allow_multiple_values_per_key = true; + options.n_values_per_key = n_phases_for_each_chemical_composition; + options.check_values_per_key = (options.n_values_per_key.size() != 0); + options.store_values_per_key = (options.n_values_per_key.size() == 0); + + + temp_densities = Utilities::MapParsing::parse_map_to_double_array (prm.get("Densities"), + options); } prm.leave_subsection(); } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h index 463d47c7174..448c55e0035 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h @@ -122,7 +122,6 @@ namespace aspect */ bool blend_rift_and_polygon; - /** * The maximum amplitude of the topography of the polygon area. */ @@ -150,7 +149,7 @@ namespace aspect std::vector> polygon_thicknesses; /** - * The maximum topography in this model + * The maximum topography in this model. */ double maximum_topography; From f61d6d373535da3f7157d83d0bfc55f790792f5c Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 30 May 2024 03:35:36 +0200 Subject: [PATCH 20/38] Fix rift-craton interaction --- .../lithosphere_rift_IC.cc | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc index ae3309bf6ff..a9bd8bc0800 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc @@ -65,18 +65,12 @@ namespace aspect const std::pair distance_to_L_polygon = distance_to_polygon(surface_point); // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere - // (in this exact order) based on the distance from the rift axis. + // (in this exact order) based on the distance from the rift axis and the polygons. + const double polygon_contribution = (0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon)); + const double rift_contribution = (0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon)); std::vector local_thicknesses(3); for (unsigned int i = 0; i<3; ++i) - local_thicknesses[i] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][i] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[i]) - * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - //const double local_lower_crust_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] - // +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[1]) - // * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - //const double local_mantle_lithosphere_thickness = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] - // +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[2]) - // * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + local_thicknesses[i] = (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2))))) * thicknesses[i] * rift_contribution + craton_contribution * polygon_thicknesses[distance_to_L_polygon.second][i]; // Get depth with respect to the surface. const double depth = this->get_geometry_model().depth(position); @@ -201,11 +195,6 @@ namespace aspect "The half width of the hyperbolic tangent smoothing used to transition to the " "lithospheric thicknesses of the polygon. This parameter is taken to be the same for all polygons. " "Units: \\si{\\meter} or degrees."); - prm.declare_entry ("Blend polygons and rifts", "true", - Patterns::Bool (), - "Whether or not to blend the contributions of polygons and rift segments. If true, " - "they are blended, if false the polygon thicknesses are taken as the local thicknesses. " - "Units: none."); prm.declare_entry("Layer thicknesses", "30000.", Patterns::List(Patterns::Double(0)), "List of reference lithospheric layer thicknesses, i.e., the thicknesses of " @@ -263,7 +252,6 @@ namespace aspect 3, "Amplitude of Gaussian rift geometry"); sigma_polygon = prm.get_double ("Half width of polygon smoothing"); - blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); reference_thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), 3, "Layer thicknesses"); From 930a6fdf0e0351478d79bddfb5835a9069f35621 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 30 May 2024 04:52:20 +0200 Subject: [PATCH 21/38] Use the IC function for local thicknesses --- .../lithosphere_rift_IC.cc | 36 +++++++++---- .../lithosphere_rift_IC.h | 13 ++--- .../lithosphere_rift_IT_2.cc | 46 ++-------------- .../lithosphere_rift_topo.cc | 53 +------------------ 4 files changed, 39 insertions(+), 109 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc index a9bd8bc0800..cf038c9c6ca 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc @@ -58,19 +58,9 @@ namespace aspect // Get the surface coordinates of the point under consideration const Point surface_point = surface_position(position, cartesian_geometry); - // Get the distance to the rift segments along a path parallel to the surface - const double distance_to_rift_axis = distance_to_rift(surface_point); - - // Get the signed distance to potential polygons of different lithospheric thicknesses - const std::pair distance_to_L_polygon = distance_to_polygon(surface_point); - // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere // (in this exact order) based on the distance from the rift axis and the polygons. - const double polygon_contribution = (0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon)); - const double rift_contribution = (0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon)); - std::vector local_thicknesses(3); - for (unsigned int i = 0; i<3; ++i) - local_thicknesses[i] = (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2))))) * thicknesses[i] * rift_contribution + craton_contribution * polygon_thicknesses[distance_to_L_polygon.second][i]; + const std::vector local_thicknesses = compute_local_thickness(surface_points); // Get depth with respect to the surface. const double depth = this->get_geometry_model().depth(position); @@ -171,6 +161,30 @@ namespace aspect return std::pair (max_distance, max_distance_polygon); } + template + std::vector + LithosphereRift:: + compute_local_thicknesses(const Point &surface_point) const + { + // Get the distance to the rift segments along a path parallel to the surface + const double distance_to_rift_axis = distance_to_rift(surface_point); + + // Get the signed distance to potential polygons of different lithospheric thicknesses + const std::pair distance_to_L_polygon = distance_to_polygon(surface_point); + + // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere + // (in this exact order) based on the distance from the rift axis and the polygons. + const double polygon_contribution = (0.5 + 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)); + const double rift_contribution = (0.5 - 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)); + + std::vector local_thicknesses(3); + for (unsigned int i = 0; i < 3; ++i) + local_thicknesses[i] = (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2))))) + * thicknesses[i] * rift_contribution + craton_contribution * polygon_thicknesses[distance_to_L_polygon.second][i]; + + return local_thicknesses; + } + template void LithosphereRift::declare_parameters (ParameterHandler &prm) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h index e5623570170..2c081ec467e 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h @@ -77,6 +77,13 @@ namespace aspect Point surface_position (const Point &position, const bool cartesian_geometry) const; + /* + * Compute the local thicknesses of the upper and lower crust + * and lithospheric mantle based on the distance to the rift center + * and the edge of polygons. + */ + std::vector compute_local_thicknesses(const Point &position) const; + /** * Declare the parameters this class takes through input files. */ @@ -117,12 +124,6 @@ namespace aspect */ double sigma_polygon; - /** - * Whether or not to take the polygon thicknesses as dominant, or to smooth them - * gradually into rift areas. - */ - bool blend_rift_and_polygon; - /** * The list of line segments consisting of two 2d coordinates per segment. * The segments represent the rift axis. diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index 511f30ad148..6314d989b6c 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -73,24 +73,15 @@ namespace aspect LithosphereRift:: initial_temperature (const Point &position) const { - // Get the distance to the line segments along a path parallel to the surface - double distance_to_rift_axis = 1e23; - Point surface_position; - std::pair distance_to_L_polygon; // Get the initial composition plugin const InitialComposition::LithosphereRift &ic = initial_composition_manager->template get_matching_initial_composition_model>(); - surface_position = ic.surface_position(position, cartesian_geometry); - distance_to_rift_axis = ic.distance_to_rift(surface_position); - distance_to_L_polygon = ic.distance_to_polygon(surface_position); + + // Convert to surface position + const Point surface_position = ic.surface_position(position, cartesian_geometry); // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere - // based on the distance from the rift axis. - std::vector local_thicknesses(3); - for (unsigned int i = 0; i<3; ++i) - local_thicknesses[i] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][i] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*reference_thicknesses[i]) - *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + // based on the distance from the rift axis and polygon edges. + std::vector local_thicknesses = ic.compute_local_thicknesses(surface_position); // Get depth with respect to the surface. const double depth = this->get_geometry_model().depth(position); @@ -185,33 +176,6 @@ namespace aspect } prm.leave_subsection(); - prm.enter_subsection ("Initial composition model"); - { - prm.enter_subsection("Lithosphere with rift"); - { - sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); - sigma_polygon = prm.get_double ("Half width of polygon smoothing"); - blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); - A_rift = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), - 3, - "Amplitude of Gaussian rift geometry"); - reference_thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), - 3, - "Layer thicknesses"); - // Split the string into the separate polygons - const std::vector temp_thicknesses = Utilities::split_string_list(prm.get("Lithospheric polygon layer thicknesses"),';'); - const unsigned int n_polygons = temp_thicknesses.size(); - polygon_thicknesses.resize(n_polygons); - for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) - { - polygon_thicknesses[i_polygons] = Utilities::string_to_double(Utilities::split_string_list(temp_thicknesses[i_polygons],',')); - AssertThrow(polygon_thicknesses[i_polygons].size()==3, ExcMessage ("The number of layer thicknesses should be equal to 3.")); - } - } - prm.leave_subsection(); - } - prm.leave_subsection(); - prm.enter_subsection ("Initial temperature model"); { prm.enter_subsection("Lithosphere with rift"); diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc index 2f8e961a9aa..75076ace03c 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -148,32 +148,10 @@ namespace aspect for (unsigned int d=0; d distance_to_L_polygon; - for (typename std::list>>::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); - it != initial_composition_manager->get_active_initial_composition_conditions().end(); - ++it) - if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) - { - distance_to_rift_axis = ic->distance_to_rift(surface_position); - distance_to_L_polygon = ic->distance_to_polygon(surface_position); - } + const InitialComposition::LithosphereRift &ic = initial_composition_manager->template get_matching_initial_composition_model>(); // Compute the topography based on distance to the rift and distance to the polygon - std::vector local_thicknesses(3); - local_thicknesses[0] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][0] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[0]) - *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A_rift[0] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - local_thicknesses[1] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][1] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[1]) - *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); - local_thicknesses[2] = ((0.5+0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*polygon_thicknesses[distance_to_L_polygon.second][2] - +(0.5-0.5*std::tanh(distance_to_L_polygon.first/sigma_polygon))*thicknesses[2]) - *(!blend_rift_and_polygon && distance_to_L_polygon.first > 0.-2.*sigma_polygon ? 1. : - (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis,2)/(2.0*std::pow(sigma_rift,2)))))); + std::vector local_thicknesses = ic.compute_local_thicknesses(surface_position); // The local lithospheric column double local_rgh = 0; @@ -209,33 +187,6 @@ namespace aspect void LithosphereRift::parse_parameters (ParameterHandler &prm) { - prm.enter_subsection ("Initial composition model"); - { - prm.enter_subsection("Lithosphere with rift"); - { - sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); - sigma_polygon = prm.get_double ("Half width of polygon smoothing"); - blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); - A_rift = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), - 3, - "Amplitude of Gaussian rift geometry"); - thicknesses = Utilities::possibly_extend_from_1_to_N (Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), - 3, - "Layer thicknesses"); - // Split the string into the separate polygons - const std::vector temp_thicknesses = Utilities::split_string_list(prm.get("Lithospheric polygon layer thicknesses"),';'); - const unsigned int n_polygons = temp_thicknesses.size(); - polygon_thicknesses.resize(n_polygons); - for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) - { - polygon_thicknesses[i_polygons] = Utilities::string_to_double(Utilities::split_string_list(temp_thicknesses[i_polygons],',')); - AssertThrow(polygon_thicknesses[i_polygons].size()==3, ExcMessage ("The number of layer thicknesses should be equal to 3.")); - } - } - prm.leave_subsection(); - } - prm.leave_subsection(); - prm.enter_subsection ("Compositional fields"); { list_of_composition_names = Utilities::split_string_list (prm.get("Names of fields")); From fe988f88ed225a2b2e53f11ed88d2579d57a628d Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 30 May 2024 06:02:08 +0200 Subject: [PATCH 22/38] Fix overrides and parameter names --- .../lithosphere_rift_IC.cc | 4 +- .../lithosphere_rift_IC.h | 8 +- .../lithosphere_rift_IT.h | 8 +- .../lithosphere_rift_IT_2.cc | 2 +- .../lithosphere_rift_topo.cc | 81 ++++++++++++------- .../lithosphere_rift_topo.h | 8 +- .../rift_box_initial_plastic_strain.h | 6 +- 7 files changed, 69 insertions(+), 48 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc index cf038c9c6ca..5f667e72e62 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc @@ -60,7 +60,7 @@ namespace aspect // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere // (in this exact order) based on the distance from the rift axis and the polygons. - const std::vector local_thicknesses = compute_local_thickness(surface_points); + const std::vector local_thicknesses = compute_local_thicknesses(surface_point); // Get depth with respect to the surface. const double depth = this->get_geometry_model().depth(position); @@ -180,7 +180,7 @@ namespace aspect std::vector local_thicknesses(3); for (unsigned int i = 0; i < 3; ++i) local_thicknesses[i] = (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2))))) - * thicknesses[i] * rift_contribution + craton_contribution * polygon_thicknesses[distance_to_L_polygon.second][i]; + * reference_thicknesses[i] * rift_contribution + polygon_contribution * polygon_thicknesses[distance_to_L_polygon.second][i]; return local_thicknesses; } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h index 2c081ec467e..80cfb48be7a 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.h @@ -49,7 +49,7 @@ namespace aspect * beginning of the program. Checks preconditions. */ void - initialize (); + initialize () override; /** * Return the initial composition as a function of position and number @@ -57,7 +57,7 @@ namespace aspect */ virtual double initial_composition (const Point &position, - const unsigned int compositional_index) const; + const unsigned int compositional_index) const override; /** * Return the overall shortest distance to the rift center segments. @@ -82,7 +82,7 @@ namespace aspect * and lithospheric mantle based on the distance to the rift center * and the edge of polygons. */ - std::vector compute_local_thicknesses(const Point &position) const; + std::vector compute_local_thicknesses(const Point &position) const; /** * Declare the parameters this class takes through input files. @@ -96,7 +96,7 @@ namespace aspect */ virtual void - parse_parameters (ParameterHandler &prm); + parse_parameters (ParameterHandler &prm) override; private: diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h index cbb9ed56d38..17d26e8af0b 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT.h @@ -52,13 +52,13 @@ namespace aspect * beginning of the program. Checks preconditions. */ void - initialize (); + initialize () override; /** * Return the initial temperature as a function of position. */ virtual - double initial_temperature (const Point &position) const; + double initial_temperature (const Point &position) const override; /** * Return the initial temperature as a function of depth and @@ -80,7 +80,7 @@ namespace aspect */ virtual void - parse_parameters (ParameterHandler &prm); + parse_parameters (ParameterHandler &prm) override; private: @@ -185,4 +185,4 @@ namespace aspect } -#endiff +#endif diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index 6314d989b6c..a2e327304d0 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -64,7 +64,7 @@ namespace aspect ExcMessage("The initial temperature plugin lithosphere with rift requires the correspond initial composition plugin.")); // Determine whether a cartesian or a spherical geometry is used. - cartesian_geometry = Plugins::plugin_type_matches> (geometry_model); + cartesian_geometry = Plugins::plugin_type_matches> (this->get_geometry_model()); } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc index 75076ace03c..2d27751e897 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -69,17 +69,17 @@ namespace aspect ref_rgh = 0; // Assume constant gravity magnitude, so ignore for (unsigned int l=0; l<3; ++l) - ref_rgh += densities[l+1] * thicknesses[l]; + ref_rgh += densities[l+1] * reference_thicknesses[l]; // The total lithosphere thickness - const double sum_thicknesses = std::accumulate(thicknesses.begin(), thicknesses.end(),0); + const double sum_thicknesses = std::accumulate(reference_thicknesses.begin(), reference_thicknesses.end(), 0); // Make sure the compensation depth is in the sublithospheric mantle compensation_depth = 2. * sum_thicknesses + 1e3; // The column at the rift center double rift_rgh = 0; - rift_thicknesses = thicknesses; + rift_thicknesses = reference_thicknesses; for (unsigned int l=0; l &ic = initial_composition_manager->template get_matching_initial_composition_model>(); + // Get the distance to the line segments along a path parallel to the surface + double distance_to_rift_axis = 1e23; + std::pair distance_to_L_polygon; + for (typename std::list>>::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); + it != initial_composition_manager->get_active_initial_composition_conditions().end(); + ++it) + if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) + { + distance_to_rift_axis = ic->distance_to_rift(surface_position); + distance_to_L_polygon = ic->distance_to_polygon(surface_position); + } // Compute the topography based on distance to the rift and distance to the polygon - std::vector local_thicknesses = ic.compute_local_thicknesses(surface_position); + std::vector local_thicknesses(3); + local_thicknesses[0] = ((0.5 + 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * polygon_thicknesses[distance_to_L_polygon.second][0] + (0.5 - 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * reference_thicknesses[0]) * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0. - 2. * sigma_polygon ? 1. : (1.0 - A_rift[0] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2)))))); + local_thicknesses[1] = ((0.5 + 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * polygon_thicknesses[distance_to_L_polygon.second][1] + (0.5 - 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * reference_thicknesses[1]) * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0. - 2. * sigma_polygon ? 1. : (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2)))))); + local_thicknesses[2] = ((0.5 + 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * polygon_thicknesses[distance_to_L_polygon.second][2] + (0.5 - 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * reference_thicknesses[2]) * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0. - 2. * sigma_polygon ? 1. : (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2)))))); // The local lithospheric column double local_rgh = 0; @@ -187,6 +200,33 @@ namespace aspect void LithosphereRift::parse_parameters (ParameterHandler &prm) { + prm.enter_subsection ("Initial composition model"); + { + prm.enter_subsection("Lithosphere with rift"); + { + sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); + sigma_polygon = prm.get_double ("Half width of polygon smoothing"); + blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); + A_rift = Utilities::possibly_extend_from_1_to_N(Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), + 3, + "Amplitude of Gaussian rift geometry"); + reference_thicknesses = Utilities::possibly_extend_from_1_to_N(Utilities::string_to_double(Utilities::split_string_list(prm.get("Layer thicknesses"))), + 3, + "Layer thicknesses"); + // Split the string into the separate polygons + const std::vector temp_thicknesses = Utilities::split_string_list(prm.get("Lithospheric polygon layer thicknesses"),';'); + const unsigned int n_polygons = temp_thicknesses.size(); + polygon_thicknesses.resize(n_polygons); + for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) + { + polygon_thicknesses[i_polygons] = Utilities::string_to_double(Utilities::split_string_list(temp_thicknesses[i_polygons],',')); + AssertThrow(polygon_thicknesses[i_polygons].size()==3, ExcMessage ("The number of layer thicknesses should be equal to 3.")); + } + } + prm.leave_subsection(); + } + prm.leave_subsection(); + prm.enter_subsection ("Compositional fields"); { list_of_composition_names = Utilities::split_string_list (prm.get("Names of fields")); @@ -198,31 +238,12 @@ namespace aspect prm.enter_subsection("Visco Plastic"); { n_phases_for_each_composition = std::make_unique>(); - - const std::vector indices = this->introspection().chemical_composition_field_indices(); - - std::vector n_phases_for_each_chemical_composition = {n_phases_for_each_composition[0]}; - for (auto i : indices) - { - n_phases_for_each_chemical_composition.push_back(n_phases_for_each_composition[i + 1]); - } - - std::vector chemical_field_names = this->introspection().chemical_composition_field_names(); - chemical_field_names.insert(chemical_field_names.begin(), "background"); - - std::vector compositional_field_names = this->introspection().get_composition_names(); - compositional_field_names.insert(compositional_field_names.begin(), "background"); - - Utilities::MapParsing::Options options(chemical_field_names, "Densities"); - options.list_of_allowed_keys = compositional_field_names; - options.allow_multiple_values_per_key = true; - options.n_values_per_key = n_phases_for_each_chemical_composition; - options.check_values_per_key = (options.n_values_per_key.size() != 0); - options.store_values_per_key = (options.n_values_per_key.size() == 0); - - - temp_densities = Utilities::MapParsing::parse_map_to_double_array (prm.get("Densities"), - options); + temp_densities = Utilities::parse_map_to_double_array (prm.get("Densities"), + list_of_composition_names, + /*has_background_field=*/true, + "Densities", + true, + n_phases_for_each_composition); } prm.leave_subsection(); } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h index 448c55e0035..bc684324522 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h @@ -46,19 +46,19 @@ namespace aspect * beginning of the program. Checks preconditions. */ void - initialize (); + initialize () override; /** * Return the value of the topography for a point. */ virtual - double value (const Point &p) const; + double value (const Point &p) const override; /** * Return the maximum value of the elevation. */ virtual - double max_topography () const; + double max_topography () const override; /** * Declare the parameters this class takes through input files. @@ -72,7 +72,7 @@ namespace aspect */ virtual void - parse_parameters (ParameterHandler &prm); + parse_parameters (ParameterHandler &prm) override; private: /** diff --git a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h index d8bdd7329af..831dc9ab86e 100644 --- a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h +++ b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.h @@ -53,7 +53,7 @@ namespace aspect * Initialization function. */ void - initialize (); + initialize () override; /** * Return the initial composition as a function of position and number @@ -61,7 +61,7 @@ namespace aspect * around a user-defined set of line-segments. */ virtual - double initial_composition (const Point &position, const unsigned int n_comp) const; + double initial_composition (const Point &position, const unsigned int n_comp) const override; /** * Declare the parameters this class takes through input files. The @@ -81,7 +81,7 @@ namespace aspect */ virtual void - parse_parameters (ParameterHandler &prm); + parse_parameters(ParameterHandler &prm) override; private: From 51694d54efe778142c00f7ec80eda9ca2c5f4976 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 30 May 2024 19:26:19 +0200 Subject: [PATCH 23/38] Update prm --- .../initial_conditions_continental_rift.prm | 211 +++++++----------- 1 file changed, 86 insertions(+), 125 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm index 4ef594afbaa..186ed221b5a 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm @@ -1,31 +1,19 @@ -#### Continental Extension Cookbook -# This cookbook is based off numerous published studies, five of which are listed below. -# For additional information, see these publications and references therein. -# 1. Brune, S., Heine, C., Perez-Gussinye, M., and Sobolev, S.V. (2014), Nat. Comm., v.5, n.4014, -# Rift migration explains continental margin asymmetry and crustal hyperextension -# 2. Huismans, R., and Beaumont, C. (2011), Nature, v.473, p.71-75. -# Depth-dependent extension, two-stage breakup and cratonic underplating at rifted margins -# 3. Naliboff, J., and Buiter, S.H. (2015), Earth Planet. Sci. Lett., v.421, p.58-67, -# "Rift Reactivation and migration during multiphase extension" -# 4. Naliboff, J., Glerum, A., Sascha, S., Peron-Pinvidic, G., and Wrona, T. (2020), Geophys. -# Res. Lett., 47, e2019GL086611, "Development of 3‐D rift heterogeneity through fault -# network evolution" -# 5. Sandiford, D., Brune, S., Glerum, A., Naliboff, J., and Whittaker, J.M. (2021), Geophys. -# Geochem. Geosys., 22, e2021GC009681, "Kinematics of footwall exhumation at oceanic -# detachment faults: Solid-block rotation and apparent unbending" +#### This is an adaptation of the Continental Extension Cookbook +#### using new plugins for the initial composition, temperature +#### topography and strain of an incipient continental rift system. #### Global parameters -set Additional shared libraries = /Applications/ASPECT/VisualStudioCode/aspect/cookbooks/initial_conditions_continental_rift/libinitial_conditions_continental_rift.debug.so +set Additional shared libraries = $ASPECT_SOURCE_DIR/cookbooks/initial_conditions_continental_rift/libinitial_conditions_continental_rift.debug.so set Dimension = 2 set Start time = 0 -set End time = 5e6 +set End time = 0 #5e6 set Use years in output instead of seconds = true -set Nonlinear solver scheme = single Advection, iterated defect correction Stokes -set Nonlinear solver tolerance = 1e-4 +set Nonlinear solver scheme = single Advection, iterated Stokes +set Nonlinear solver tolerance = 1e-5 set Max nonlinear iterations = 2 set CFL number = 0.5 set Maximum time step = 20e3 -set Output directory = output-continental_extension +set Output directory = output-initial_conditions_continental_rift set Pressure normalization = no #### Parameters describing the model @@ -65,20 +53,11 @@ subsection Mesh refinement end end -# Use the Eisenstat Walker method to automatically determine the -# linear solver tolerance during the defect Picard iterations. -# Adjusting the Maximum linear solver tolerance will affect how long -# it takes to reach a solution, but not the actual value of the -# solution. + subsection Solver parameters subsection Stokes solver parameters set Number of cheap Stokes solver steps = 0 end - - subsection Newton solver parameters - set Maximum linear Stokes solver tolerance = 1e-2 - set Use Eisenstat Walker method for Picard iterations = true - end end # Advecting the free surface using a normal, rather than vertical, @@ -128,58 +107,69 @@ subsection Compositional fields end # Initial values of different compositional fields -# The upper crust (20 km thick), lower crust (20 km thick) -# and mantle (60 km thick) are continuous horizontal layers -# of constant thickness. The non initial plastic strain is set +# The upper crust (20 km thick), lower crust (15 km thick) +# and mantle (85 km thick) are continuous horizontal layers +# of constant thickness, except in a center area. +# In the centre of the domain, the upper crust is thickened to 25 km, +# while the mantle lithosphere is thinned. The transition from this +# perturbed center to the reference thicknesses of the lithospheric +# layers is smoothened using a Gaussian. The combined effect +# is a hotter, weaker centre area that localizes deformation. +# An additional thicker/stronger area is added on the right of the domain +# to represent cratonic lithosphere. The transition in layer thicknesses +# uses a hyperbolic tangent. +# The non initial plastic strain is set # to 0 and the initial plastic strain is randomized between -# 0.5 and 1.5. +# 0.5 and 1.5 in an area around the rift axis. subsection Initial composition model set List of model names = lithosphere with rift, rift box initial plastic strain, function subsection Lithosphere with rift - set Blend polygons and rifts = true - set Standard deviation of Gaussian rift geometry = 60e3 - set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 - # LAB at 110 km - set Rift axis line segments = 350e3 + # The reference layer thicknesses of the upper crust, lower crust and mantle lithosphere. set Layer thicknesses = 20e3, 15e3, 85e3 - - # Polygon LAB at 200 km - set Lithospheric polygon layer thicknesses = 23e3, 20e3 , 157.e3 - set Lithospheric polygons = 450e3 > 3000e3 + # How wide the weak zone will be + set Standard deviation of Gaussian rift geometry = 50e3 + # The maximum thinning/thickening of the lithospheric layers + set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 + # Where the rift axis should be. In this case in the centre of the domain. + # In 3D simulations, line segments consisting of two coordinates + # should be provided. + set Rift axis line segments = 100e3 + + # The thicknesses of the lithospheric layer within a polygon + set Lithospheric polygon layer thicknesses = 20e3, 15e3 , 115.e3 + # The segments making up the polygon + set Lithospheric polygons = 150e3 > 3000e3 + # The half width of the transition from polygon to reference lithosphere set Half width of polygon smoothing = 10e3 end - # Inherited noise + # Inherited plastic strain subsection Rift box initial plastic strain - set Standard deviation of Gaussian noise amplitude distribution = 200e3 + # We focus initial strain around the rift axis + set Rift axis line segments = 100e3 + # The strain values follow a Gaussian distribution around the rift axis + # The maximum magnitude of the strain set Maximum amplitude of Gaussian noise amplitude distribution = 0.250000 + # The sigma width of the area of strain + set Standard deviation of Gaussian noise amplitude distribution = 50e3 + # The number with which to start of the random number generator set Random number generator seed = 2.000000 + # Using a hyperbolic tangent centred around this value, + # we smooth out the strain with increasing depth. set Depth around which Gaussian noise is smoothed out = 50e3 + # The halfwidth of the hyperbolic tangent. set Halfwidth with which Gaussian noise is smoothed out in depth = 10e3 - #set Grid intervals for noise X or radius = 2240 - # Add 16 intervals for the additional 5 km that is added to the grid - # to account for initial topography - #set Grid intervals for noise Y or longitude = 976 #960 - set Rift axis line segments = 350e3 end subsection Function set Variable names = x,y - set Function expression = 0; \ - 0; \ - 0; \ - 0; \ - 0 + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0 end -# subsection Function -# set Variable names = x,y -# set Function expression = 0; \ -# if(x>50.e3 && x<150.e3 && y>50.e3, 0.5 + rand_seed(1), 0); \ -# if(y>=80.e3, 1, 0); \ -# if(y<80.e3 && y>=60.e3, 1, 0); \ -# if(y<60.e3, 1, 0); -# end end # Composition: fixed on bottom (inflow boundary), free on sides and top @@ -187,50 +177,38 @@ subsection Boundary composition model set Fixed composition boundary indicators = bottom set List of model names = function subsection Function - set Function expression = 0; \ - 0; \ - 0; \ - 0; \ - 0 + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0 end end # Temperature boundary conditions -# Top and bottom (fixed) temperatures are consistent with the initial temperature field -# Note that while temperatures are specified for the model sides, these values are -# not used as the sides are not specified "Fixed temperature boundaries". Rather, -# these boundaries are insulating (zero net heat flux). +# Top and bottom (fixed) temperatures are consistent with the initial temperature field. +# Because we use a free surface, the height/depth of the surface can change over time, +# meaning that if the initial temperature plugin is asked for the temperature +# at the surface, this temperature could also vary over time. Therefore +# we also use the box plugin and take the minimum of the initial temperature and +# the box plugins, thus maintaining a temperature of 293 K. subsection Boundary temperature model - set Fixed temperature boundary indicators = bottom, top - set List of model names = box - + set Fixed temperature boundary indicators = bottom, top + set List of model names = initial temperature, box + set List of model operators = add, minimum subsection Box - set Bottom temperature = 1613 - set Top temperature = 273 + set Top temperature = 293 + # Unrealistically high, so that it is always taken from initial temperature plugin + set Bottom temperature = 5000 end end # Initial temperature field -# Typical continental geotherm based on equations 4-6 from: -# D.S. Chapman (1986), "Thermal gradients in the continental crust", -# Geological Society of London Special Publications, v.24, p.63-70. -# The initial constraints are: -# Surface Temperature - upper crust (ts1) = 273 K -# Surface Heat Flow - upper crust (qs1) = 0.055 mW/m^2 -# Heat Production - upper crust (A1) = 1.00e-6 W/m^3; -# Heat Production - lower crust (A2) = 0.25e-6 W/m^3; -# Heat Production - mantle (A3) = 0.00e-6 W/m^3; -# Thermal Conductivity - all layers = 2.5 (W/(m K)); -# To satisfy these constraints, the following values are required: -# Surface Temperature - lower crust (ts2) = 633 K -# - mantle (ts3) = 893 K -# Surface Heat Flow - lower crust (qs2) = 0.035 W/m^2; -# - mantle (qs3) = 0.030 W/m^2; -# Note: The continental geotherm initial temperature model -# plugin can be used to compute an identical geotherm -# for the lithosphere. An example of how to use this -# plugin is illustrated in the test for this cookbook -# (tests/continental_extension.prm). +# The initial temperature consists of a typical continental geotherm +# based on equations Turcotte and Schubert Ch. 4.6. +# Below the lithosphere-asthenosphere boundary (LAB, defined initially by the +# bottom of the mantle lithsphere and the 1623 K isotherm, +# we prescribe an adiabatic temperature increase. subsection Initial temperature model set List of model names = adiabatic, lithosphere with rift set List of model operators = add, replace if valid @@ -238,8 +216,7 @@ subsection Initial temperature model set LAB isotherm temperature = 1623. set Surface temperature = 293. # Whether or not to prescribe the LAB depth up to a - # certain depth (in area below LAB) - # or use adiabat everywhere + # certain depth (in area below LAB) or use the adiabat everywhere, set Use temperature compensation depth = true set Temperature compensation depth = 200e3 end @@ -247,34 +224,18 @@ subsection Initial temperature model # A reference profile of the compositional fields # where x represents depth subsection Function - # plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio_marine_continental_sediment, silt_fraction - set Function expression = 0; \ - 0; \ - 0; \ - 0; \ - 0; \ - if(x<23e3,1,0); \ - if(x>=23e3&x<43e3,1,0); \ - if(x>=43e3&x<200e3,1,0); \ - 0; \ - 0 + # noninitial_plastic_strain, plastic_strain, upper, lower, mantle_L + set Function expression = 0; \ + 0; \ + if(x<20e3,1,0); \ + if(x>=20e3&x<35e3,1,0); \ + if(x>=35e3&x<120e3,1,0); \ end + # No thermal boundary layers, as we already add a continental geotherm set Age top boundary layer = 0 set Age bottom boundary layer = 0 end - subsection Function - set Variable names = x,y - set Function constants = h=100e3, ts1=273, ts2=633, ts3=893, \ - A1=1.e-6, A2=0.25e-6, A3=0.0, \ - k1=2.5, k2=2.5, k3=2.5, \ - qs1=0.055, qs2=0.035, qs3=0.030 - set Function expression = if( (h-y)<=20.e3, \ - ts1 + (qs1/k1)*(h-y) - (A1*(h-y)*(h-y))/(2.0*k1), \ - if( (h-y)>20.e3 && (h-y)<=40.e3, \ - ts2 + (qs2/k2)*(h-y-20.e3) - (A2*(h-y-20.e3)*(h-y-20.e3))/(2.0*k2), \ - ts3 + (qs3/k3)*(h-y-40.e3) - (A3*(h-y-40.e3)*(h-y-40.e3))/(2.0*k3) ) ); - end end # Constant internal heat production values (W/m^3) for background material @@ -283,7 +244,7 @@ subsection Heating model set List of model names = compositional heating subsection Compositional heating - set Use compositional field for heat production averaging = 1, 0, 0, 1, 1, 1 + set Use compositional field for heat production averaging = 0, 0, 1, 1, 1 set Compositional heating values = 0.0, 0.0, 0.0, 1.0e-6, 0.25e-6, 0. end end @@ -376,10 +337,10 @@ end # Post processing subsection Postprocess - set List of postprocessors = composition statistics, heat flux densities, heat flux statistics, mass flux statistics, pressure statistics, temperature statistics, topography, velocity statistics, visualization + set List of postprocessors = composition statistics, temperature statistics, topography, velocity statistics, visualization subsection Visualization - set List of output variables = density, heat flux map, named additional outputs, strain rate, viscosity + set List of output variables = density, named additional outputs, strain rate, viscosity set Output format = vtu set Time between graphical output = 100.e3 set Interpolate output = true From 7933e9b95375dda4c745a8be7fe876aedc7d4c15 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 30 May 2024 22:29:29 +0200 Subject: [PATCH 24/38] Fix IC and IT --- ...continental_rift_no_initial_topography.prm | 342 ++++++++++++++++++ .../lithosphere_rift_IC.cc | 5 +- .../lithosphere_rift_IT_2.cc | 8 +- 3 files changed, 352 insertions(+), 3 deletions(-) create mode 100644 cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm new file mode 100644 index 00000000000..56fc5a19662 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm @@ -0,0 +1,342 @@ +#### This is an adaptation of the Continental Extension Cookbook +#### using new plugins for the initial composition, temperature +#### topography and strain of an incipient continental rift system. + +#### Global parameters +set Additional shared libraries = $ASPECT_SOURCE_DIR/cookbooks/initial_conditions_continental_rift/libinitial_conditions_continental_rift.debug.so +set Dimension = 2 +set Start time = 0 +set End time = 0 #5e6 +set Use years in output instead of seconds = true +set Nonlinear solver scheme = single Advection, iterated Stokes +set Nonlinear solver tolerance = 1e-5 +set Max nonlinear iterations = 2 +set CFL number = 0.5 +set Maximum time step = 20e3 +set Output directory = output-initial_conditions_continental_rift_no_initial_topography +set Pressure normalization = no +set Adiabatic surface temperature = 1573 + +#### Parameters describing the model + +# Governing equations +subsection Formulation + set Formulation = Boussinesq approximation +end + +# Model geometry (400x200 km, 40 km spacing) +subsection Geometry model + set Model name = box + + subsection Box + set X repetitions = 10 + set Y repetitions = 5 + set X extent = 400e3 + set Y extent = 200e3 + end +end + +# Globally refine the mesh to 2.5 km spacing, and then +# adaptively refine the mesh to 1.25 km spacing above y=50 km +# and between x=40 and x=160 km. These values ensure areas +# undergoing brittle deformation are in the high-resolution +# region. +subsection Mesh refinement + set Initial adaptive refinement = 0 + set Initial global refinement = 3 + set Time steps between mesh refinement = 0 + set Strategy = minimum refinement function + + subsection Minimum refinement function + set Coordinate system = cartesian + set Variable names = x,y + set Function expression = if ( y>=50e3 && x>=40.e3 && x<=160.e3, 4, 3) + end +end + + +subsection Solver parameters + subsection Stokes solver parameters + set Number of cheap Stokes solver steps = 0 + end +end + +# Advecting the free surface using a normal, rather than vertical, +# projection. To reduce mesh instabilities and associated solver +# issues when deformation becomes large, diffusion is applied to +# the free surface at each time step. +subsection Mesh deformation + set Mesh deformation boundary indicators = top: free surface, top: diffusion + + subsection Free surface + set Surface velocity projection = normal + end + + subsection Diffusion + # Diffusivity term. Increasing this value will result + # in a smoother free surface and lower topography + # amplitudes. + set Hillslope transport coefficient = 1.e-8 + end +end + +# Velocity on boundaries characterized by functions +# The outward velocity (x-direction) on the left and right walls is 0.25 cm/year +# The vertical velocity at the base is 0.25 cm/year (balances outflow on sides) +# Velocity components parallel to the base (x-velocity) and side walls (y-velocity) +# are unconstrained (i.e. 'free'). +subsection Boundary velocity model + set Prescribed velocity boundary indicators = left x: function, right x:function, bottom y:function + + subsection Function + set Variable names = x,y + set Function constants = v=0.0025, w=200.e3, d=100.e3 + set Function expression = if (x < w/2 , -v, v) ; v*2*d/w + end +end + +# Number and names of compositional fields +# The five compositional fields represent: +# 1. The plastic strain that accumualates over time, with the initial plastic strain removed +# 2. The plastic strain that accumulated over time, including the initial plastic strain values +# 3. The upper crust +# 4. The lower crust +# 5. The mantle lithosphere +subsection Compositional fields + set Number of fields = 5 + set Names of fields = noninitial_plastic_strain, plastic_strain, upper, lower, mantle_L +end + +# Initial values of different compositional fields +# The upper crust (20 km thick), lower crust (15 km thick) +# and mantle (85 km thick) are continuous horizontal layers +# of constant thickness, except in a center area. +# In the centre of the domain, the upper crust is thickened to 25 km, +# while the mantle lithosphere is thinned. The transition from this +# perturbed center to the reference thicknesses of the lithospheric +# layers is smoothened using a Gaussian. The combined effect +# is a hotter, weaker centre area that localizes deformation. +# An additional thicker/stronger area is added on the right of the domain +# to represent cratonic lithosphere. The transition in layer thicknesses +# uses a hyperbolic tangent. +# The non initial plastic strain is set +# to 0 and the initial plastic strain is randomized between +# 0.5 and 1.5 in an area around the rift axis. +subsection Initial composition model + set List of model names = lithosphere with rift, rift box initial plastic strain, function + + subsection Lithosphere with rift + # The reference layer thicknesses of the upper crust, lower crust and mantle lithosphere. + set Layer thicknesses = 20e3, 15e3, 85e3 + # How wide the weak zone will be + set Standard deviation of Gaussian rift geometry = 50e3 + # The maximum thinning/thickening of the lithospheric layers + set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 + # Where the rift axis should be. In this case in the centre of the domain. + # In 3D simulations, line segments consisting of two coordinates + # should be provided. + set Rift axis line segments = 200e3 + + # The thicknesses of the lithospheric layer within a polygon + set Lithospheric polygon layer thicknesses = 20e3, 15e3 , 115.e3 + # The segments making up the polygon + set Lithospheric polygons = 550e3 > 3000e3 + # The half width of the transition from polygon to reference lithosphere + set Half width of polygon smoothing = 10e3 + end + + # Inherited plastic strain + subsection Rift box initial plastic strain + # We focus initial strain around the rift axis + set Rift axis line segments = 200e3 + # The strain values follow a Gaussian distribution around the rift axis + # The maximum magnitude of the strain + set Maximum amplitude of Gaussian noise amplitude distribution = 0.250000 + # The sigma width of the area of strain + set Standard deviation of Gaussian noise amplitude distribution = 50e3 + # The number with which to start of the random number generator + set Random number generator seed = 2 + # Using a hyperbolic tangent centred around this value, + # we smooth out the strain with increasing depth. + set Depth around which Gaussian noise is smoothed out = 50e3 + # The halfwidth of the hyperbolic tangent. + set Halfwidth with which Gaussian noise is smoothed out in depth = 10e3 + end + + subsection Function + set Variable names = x,y + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0 + end +end + +# Composition: fixed on bottom (inflow boundary), free on sides and top +subsection Boundary composition model + set Fixed composition boundary indicators = bottom + set List of model names = function + subsection Function + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0 + end +end + +# Temperature boundary conditions +# Top and bottom (fixed) temperatures are consistent with the initial temperature field. +# Because we use a free surface, the height/depth of the surface can change over time, +# meaning that if the initial temperature plugin is asked for the temperature +# at the surface, this temperature could also vary over time. Therefore +# we also use the box plugin and take the minimum of the initial temperature and +# the box plugins, thus maintaining a temperature of 293 K. +subsection Boundary temperature model + set Fixed temperature boundary indicators = bottom, top + set List of model names = initial temperature, box + set List of model operators = add, minimum + subsection Box + set Top temperature = 293 + # Unrealistically high, so that it is always taken from initial temperature plugin + set Bottom temperature = 5000 + end +end + +# Initial temperature field +# The initial temperature consists of a typical continental geotherm +# based on equations Turcotte and Schubert Ch. 4.6. +# Below the lithosphere-asthenosphere boundary (LAB, defined initially by the +# bottom of the mantle lithsphere and the 1623 K isotherm, +# we prescribe an adiabatic temperature increase. +subsection Initial temperature model + set List of model names = adiabatic, lithosphere with rift + set List of model operators = add, replace if valid + subsection Lithosphere with rift + set LAB isotherm temperature = 1573. + set Surface temperature = 293. + end + subsection Adiabatic + # A reference profile of the compositional fields + # where x represents depth + subsection Function + # noninitial_plastic_strain, plastic_strain, upper, lower, mantle_L + set Function expression = 0; \ + 0; \ + if(x<20e3,1,0); \ + if(x>=20e3&x<35e3,1,0); \ + if(x>=35e3&x<120e3,1,0) + end + end + +end + +# Constant internal heat production values (W/m^3) for background material +# and compositional fields. +subsection Heating model + set List of model names = compositional heating + + subsection Compositional heating + set Use compositional field for heat production averaging = 0, 0, 0, 1, 1, 1 + set Compositional heating values = 0.0, 0.0, 0.0, 1.0e-6, 0.25e-6, 0. + end +end + +# Material model +# Rheology: Non-linear viscous flow and Drucker Prager Plasticity +# Values for most rheological parameters are specified for a background material and +# each compositional field. Values for viscous deformation are based on dislocation +# creep flow-laws, with distinct values for the upper crust (wet quartzite), lower +# crust (wet anorthite) and mantle (dry olivine). Table 1 of Naliboff and Buiter (2015), +# Earth Planet. Sci. Lett., v.421, p. 58-67 contains values for each of these flow laws. +subsection Material model + set Model name = visco plastic + + subsection Visco Plastic + # Reference temperature and viscosity + set Reference temperature = 273 + + # The minimum strain-rate helps limit large viscosities values that arise + # as the strain-rate approaches zero. + # The reference strain-rate is used on the first non-linear iteration + # of the first time step when the velocity has not been determined yet. + set Minimum strain rate = 1.e-20 + set Reference strain rate = 1.e-16 + + # Limit the viscosity with minimum and maximum values + set Minimum viscosity = 1e18 + set Maximum viscosity = 1e26 + + # Thermal diffusivity is adjusted to match thermal conductivities + # assumed in assigning the initial geotherm + set Define thermal conductivities = true + set Thermal conductivities = 2.5 + set Heat capacities = 750. + + # Density values of 1 are assigned to "strain" fields, which are not taken into + # account when computing material properties. + set Densities = 3300, 1.0, 1.0, 2700, 2900, 3300 + set Thermal expansivities = 2e-5 + + # Harmonic viscosity averaging + set Viscosity averaging scheme = harmonic + + # Choose to have the viscosity (pre-yield) follow a dislocation + # diffusion or composite flow law. Here, dislocation is selected + # so no need to specify diffusion creep parameters below, which are + # only used if "diffusion" or "composite" option is selected. + set Viscous flow law = dislocation + + # Dislocation creep parameters for + # 1. Background material/mantle (dry olivine) + # Hirth & Kohlstedt (2004), Geophys. Monogr. Am. Geophys. Soc., v.138, p.83-105. + # "Rheology of the upper mantle and the mantle wedge:a view from the experimentalists" + # 2. Upper crust (wet quartzite) + # Rutter & Brodie (2004), J. Struct. Geol., v.26, p.2011-2023. + # "Experimental grain size-sensitive flow of hot-pressed Brazilian quartz aggregates" + # 3. Lower crust and weak seed (wet anorthite) + # Rybacki et al. (2006), J. Geophys. Res., v.111(B3). + # "Influence of water fugacity and activation volume on the flow properties of fine-grained + # anorthite aggregates" + # Note that the viscous pre-factors below are scaled to plane strain from unixial strain experiments. + # For ease of identification, fields tracking strain are assigned prefactors of 1e-50 + set Prefactors for dislocation creep = 6.52e-16, 1.00e-50, 1.00e-50, 8.57e-28, 7.13e-18, 6.52e-16 + set Stress exponents for dislocation creep = 3.5, 1.0, 1.0, 4.0, 3.0, 3.5 + set Activation energies for dislocation creep = 530.e3, 0.0, 0.0, 223.e3, 345.e3, 530.e3 + set Activation volumes for dislocation creep = 18.e-6, 0.0, 0.0, 0.0, 0.0, 18.e-6 + + # Plasticity parameters + set Angles of internal friction = 30 + set Cohesions = 20.e6 + + # The parameters below weaken the friction and cohesion by a + # a factor of 4 between plastic strain values of 0.5 and 1.5. + set Strain weakening mechanism = plastic weakening with plastic strain only + set Start plasticity strain weakening intervals = 0.5 + set End plasticity strain weakening intervals = 1.5 + set Cohesion strain weakening factors = 0.25 + set Friction strain weakening factors = 0.25 + end +end + +# Gravity model +subsection Gravity model + set Model name = vertical + + subsection Vertical + set Magnitude = 9.81 + end +end + +# Post processing +subsection Postprocess + set List of postprocessors = composition statistics, temperature statistics, topography, velocity statistics, visualization + + subsection Visualization + set List of output variables = density, named additional outputs, strain rate, viscosity + set Output format = vtu + set Time between graphical output = 100.e3 + set Interpolate output = true + end +end diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc index 5f667e72e62..38be60fe572 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc @@ -71,7 +71,7 @@ namespace aspect else if (depth > local_thicknesses[0] && depth <= local_thicknesses[0] + local_thicknesses[1] && compositional_index == id_lower) return 1.; - else if (depth > local_thicknesses[0] + local_thicknesses[2] && depth <= local_thicknesses[0] + local_thicknesses[1] + local_thicknesses[2] + else if (depth > local_thicknesses[0] + local_thicknesses[1] && depth <= local_thicknesses[0] + local_thicknesses[1] + local_thicknesses[2] && compositional_index == id_mantle_L) return 1.; else @@ -174,9 +174,12 @@ namespace aspect // Compute the local thickness of the upper crust, lower crust and mantle part of the lithosphere // (in this exact order) based on the distance from the rift axis and the polygons. + // The transition from reference and/or rift perturbation lithosphere to polygon lithosphere + // is smoothed by a hyperbolic tangent. const double polygon_contribution = (0.5 + 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)); const double rift_contribution = (0.5 - 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)); + // The rift perturbation follows a Gaussian contribution. std::vector local_thicknesses(3); for (unsigned int i = 0; i < 3; ++i) local_thicknesses[i] = (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2))))) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index a2e327304d0..dc644ac9a6d 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -60,8 +60,9 @@ namespace aspect initial_composition_manager = this->get_initial_composition_manager_pointer(); // Check that the required initial composition model is used. - AssertThrow(initial_composition_manager->template has_matching_initial_composition_model>(), - ExcMessage("The initial temperature plugin lithosphere with rift requires the correspond initial composition plugin.")); + // This doesn't work during initialization. + //AssertThrow(initial_composition_manager->template has_matching_initial_composition_model>(), + // ExcMessage("The initial temperature plugin lithosphere with rift requires the corresponding initial composition plugin.")); // Determine whether a cartesian or a spherical geometry is used. cartesian_geometry = Plugins::plugin_type_matches> (this->get_geometry_model()); @@ -73,6 +74,9 @@ namespace aspect LithosphereRift:: initial_temperature (const Point &position) const { + Assert(initial_composition_manager->template has_matching_initial_composition_model>(), + ExcMessage("The initial temperature plugin lithosphere with rift requires the corresponding initial composition plugin.")); + // Get the initial composition plugin const InitialComposition::LithosphereRift &ic = initial_composition_manager->template get_matching_initial_composition_model>(); From c2bf6d281810c91245a81857f28919db10cbf526 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 30 May 2024 22:31:11 +0200 Subject: [PATCH 25/38] Rename prm --- ...s_continental_rift_initial_topography.prm} | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) rename cookbooks/initial_conditions_continental_rift/{initial_conditions_continental_rift.prm => initial_conditions_continental_rift_initial_topography.prm} (94%) diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm similarity index 94% rename from cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm rename to cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm index 186ed221b5a..5621f14a757 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm @@ -13,8 +13,9 @@ set Nonlinear solver tolerance = 1e-5 set Max nonlinear iterations = 2 set CFL number = 0.5 set Maximum time step = 20e3 -set Output directory = output-initial_conditions_continental_rift +set Output directory = output-initial_conditions_continental_rift_initial_topography set Pressure normalization = no +set Adiabatic surface temperature = 1573 #### Parameters describing the model @@ -23,16 +24,24 @@ subsection Formulation set Formulation = Boussinesq approximation end -# Model geometry (200x100 km, 20 km spacing) +# Model geometry (400x200 km, 40 km spacing) subsection Geometry model set Model name = box subsection Box set X repetitions = 10 set Y repetitions = 5 - set X extent = 200e3 - set Y extent = 100e3 + set X extent = 400e3 + set Y extent = 200e3 end + + # With respect to the reference lithosphere, + # move the surface of perturbed lithosphere + # to obtain isostasy. + subsection Initial topography model + set Model name = lithosphere with rift + end + end # Globally refine the mesh to 2.5 km spacing, and then @@ -134,12 +143,12 @@ subsection Initial composition model # Where the rift axis should be. In this case in the centre of the domain. # In 3D simulations, line segments consisting of two coordinates # should be provided. - set Rift axis line segments = 100e3 + set Rift axis line segments = 200e3 # The thicknesses of the lithospheric layer within a polygon set Lithospheric polygon layer thicknesses = 20e3, 15e3 , 115.e3 # The segments making up the polygon - set Lithospheric polygons = 150e3 > 3000e3 + set Lithospheric polygons = 550e3 > 3000e3 # The half width of the transition from polygon to reference lithosphere set Half width of polygon smoothing = 10e3 end @@ -147,14 +156,14 @@ subsection Initial composition model # Inherited plastic strain subsection Rift box initial plastic strain # We focus initial strain around the rift axis - set Rift axis line segments = 100e3 + set Rift axis line segments = 200e3 # The strain values follow a Gaussian distribution around the rift axis # The maximum magnitude of the strain set Maximum amplitude of Gaussian noise amplitude distribution = 0.250000 # The sigma width of the area of strain set Standard deviation of Gaussian noise amplitude distribution = 50e3 # The number with which to start of the random number generator - set Random number generator seed = 2.000000 + set Random number generator seed = 2 # Using a hyperbolic tangent centred around this value, # we smooth out the strain with increasing depth. set Depth around which Gaussian noise is smoothed out = 50e3 @@ -213,12 +222,8 @@ subsection Initial temperature model set List of model names = adiabatic, lithosphere with rift set List of model operators = add, replace if valid subsection Lithosphere with rift - set LAB isotherm temperature = 1623. + set LAB isotherm temperature = 1573. set Surface temperature = 293. - # Whether or not to prescribe the LAB depth up to a - # certain depth (in area below LAB) or use the adiabat everywhere, - set Use temperature compensation depth = true - set Temperature compensation depth = 200e3 end subsection Adiabatic # A reference profile of the compositional fields @@ -229,11 +234,8 @@ subsection Initial temperature model 0; \ if(x<20e3,1,0); \ if(x>=20e3&x<35e3,1,0); \ - if(x>=35e3&x<120e3,1,0); \ + if(x>=35e3&x<120e3,1,0) end - # No thermal boundary layers, as we already add a continental geotherm - set Age top boundary layer = 0 - set Age bottom boundary layer = 0 end end @@ -244,7 +246,7 @@ subsection Heating model set List of model names = compositional heating subsection Compositional heating - set Use compositional field for heat production averaging = 0, 0, 1, 1, 1 + set Use compositional field for heat production averaging = 0, 0, 0, 1, 1, 1 set Compositional heating values = 0.0, 0.0, 0.0, 1.0e-6, 0.25e-6, 0. end end From 59f13d7b43afce0a41fa2d6490a82d54a21303c6 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 31 May 2024 01:34:21 +0200 Subject: [PATCH 26/38] Update text with figure --- .../doc/Initial_density_with_craton.png | Bin 0 -> 35944 bytes .../Initial_plastic_strain_with_craton.png | Bin 0 -> 269998 bytes .../doc/Initial_temperature_with_craton.png | Bin 0 -> 99953 bytes .../doc/Initial_topography_with_craton.png | Bin 0 -> 195918 bytes .../doc/lithosphere_with_rift_IC_cookbook.md | 109 ++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 cookbooks/initial_conditions_continental_rift/doc/Initial_density_with_craton.png create mode 100644 cookbooks/initial_conditions_continental_rift/doc/Initial_plastic_strain_with_craton.png create mode 100644 cookbooks/initial_conditions_continental_rift/doc/Initial_temperature_with_craton.png create mode 100644 cookbooks/initial_conditions_continental_rift/doc/Initial_topography_with_craton.png create mode 100644 cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md diff --git a/cookbooks/initial_conditions_continental_rift/doc/Initial_density_with_craton.png b/cookbooks/initial_conditions_continental_rift/doc/Initial_density_with_craton.png new file mode 100644 index 0000000000000000000000000000000000000000..15b29aff3a61c6f9176837431b796f8fa2eba074 GIT binary patch literal 35944 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

f_g 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

J?2^411IPOqlaER{JoGj6 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%0ApCnB{gUpDHA$e`??uI93UsXfHpp@FSEqT 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 literal 0 HcmV?d00001 diff --git a/cookbooks/initial_conditions_continental_rift/doc/Initial_temperature_with_craton.png b/cookbooks/initial_conditions_continental_rift/doc/Initial_temperature_with_craton.png new file mode 100644 index 0000000000000000000000000000000000000000..9e69ad3c51f4b867286a71a73712083769e92e2a GIT binary patch literal 99953 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 literal 0 HcmV?d00001 diff --git a/cookbooks/initial_conditions_continental_rift/doc/Initial_topography_with_craton.png b/cookbooks/initial_conditions_continental_rift/doc/Initial_topography_with_craton.png new file mode 100644 index 0000000000000000000000000000000000000000..dd83c799b7886e242a74ecb429a666163fcdb62e GIT binary patch literal 195918 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

G3vbZV_{`y-rPnBQcCC5*0P7vJ^6j|8 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�c;?>+0UOQYBcLZ!%XAw`lQ%;noIT4VEN>Nk!b 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 literal 0 HcmV?d00001 diff --git a/cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md b/cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md new file mode 100644 index 00000000000..e92a6e347c7 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md @@ -0,0 +1,109 @@ +# Initial conditions for continental rifting + +*This section was contributed by Anne Glerum.* + +In order to localize deformation under prescribed far-field +extension, initial weaknesses have to be introduced to the +model setup. Here we discuss plugins that 1) perturb the lithosphere +consisting of upper crust, lower crust and mantle lithosphere +at a user-specified location and 2) add initial plastic +strain is around this same location. This strain represents +inherited weakness for example from prior deformation phases. +To represent other deviations of the reference lithosphere, +additional regions of different lithospheric layer thicknesses +can also be specified. + +The initial temperature plugin prescribes a steady-state +continental geotherm within the lithosphere and an adiabat +below. The temperature field is perturbed in the same way +as the lithosphere compositional structure. + +In case the perturbations of the lithosphere in combination with +the free surface induce large velocities initially, an initial +topography plugin approximates the topography resulting from +isostatic equilibrium. + + +## Initial lithosphere compositional fields and temperature + +```{figure-md} fig:setup + + +Lithospheric structure with perturbations that represent an +incipient rift and a cratonic region. +``` + +The perturbation of the lithospheric layers that represents an +incipient rift follows a Gaussian +curve. We can either thicken or thin the layers, depending on +the sign of the Gaussian amplitude: a negative amplitude thickens +the corresponding layer and vice versa. The width of the perturbation +is determined by the sigma of the Gaussian. The centre of the Gaussian +curve will be the rift centre. The parameters that need to be set are: + + +```{literalinclude} initial_composition_lithosphere.prm +``` + +In addition to a rift centre, other deviations from the reference +lithospheric thicknesses can also be prescribed. In the above snippet, +these are specified as polygons (multiple polygons are allowed) with +their own layer thicknesses. The transition from reference lithosphere +to polgyon lithosphere is implemented as a hyperbolic tangent with a +centre point and a half-width. + + +```{literalinclude} initial_temperature.prm +``` + +For the initial temperature we combine two plugins: one that prescribes +a continental steady-state geotherm and one that computes an adiabatic +temperature profile. The geotherm implementation is based on Chapter 4.6 +of Turcotte and Schubert. For each x-coordinate, it solves a steady-state +heat conduction equation taking into account the respective densities, +heat productivities and thermal conductivities of the three lithospheric +layers. Below the lithospheric a NaN is returned, such that we can replace +this NaN by an adiabatic temperature profile. Care has to be taken that the +adiabatic surface temperature matches the LAB temperature. + +```{figure-md} fig:initial_temperature + + + The initial temperature distribution. + +```{literalinclude} initial_topography.prm +``` + +```{literalinclude} initial_composition_strain.prm +``` + +To include inherited heterogeneity we also include initial plastic strain +in the rift centre (Fig. {numref}`fig:initial_strain`). +We generate random strain values between 0 and 1 that +are subsequently multiplied with a Gaussian distribution for which we specify +the maximum amplitude and sigma. To control the depth extent of the initial +strain, we specify a depth around which the amplitude is smoothed to zero +with a hyperbolic tangent. + +```{figure-md} fig:initial_strain + + + The initial plastic strain distribution. + +```{literalinclude} initial_topography.prm +``` + +Sometimes the combination of a free surface with lateral variations in the +lithospheric thicknesses leads to very high velocities in the first timesteps. +To avoid a drunken sailor effect and/or very small timesteps, we can then +prescribe initial topography that roughly fulfills isostatic equilibrium (Fig. {numref}`fig:initial_topography`). +The required topography is computed using the reference density, so it neglects +temperature effects on the density. + + +```{figure-md} fig:initial_topography + + + The initial topography that roughly isostatically balances the rift perturbation and craton region + with respect to the reference lithosphere. +``` From 982f9b7c9d244f34cca6853fff8c123981c71988 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 31 May 2024 01:37:47 +0200 Subject: [PATCH 27/38] Add craton and AMR --- .../5p_fixed_CERI_craton_right.prm | 338 ++++++++++++++++++ .../continental_extension.prm | 310 ++++++++++++++++ ...ns_continental_rift_initial_topography.prm | 17 +- ...continental_rift_no_initial_topography.prm | 18 +- .../test.prm | 251 +++++++++++++ 5 files changed, 917 insertions(+), 17 deletions(-) create mode 100644 cookbooks/initial_conditions_continental_rift/5p_fixed_CERI_craton_right.prm create mode 100644 cookbooks/initial_conditions_continental_rift/continental_extension.prm create mode 100644 cookbooks/initial_conditions_continental_rift/test.prm diff --git a/cookbooks/initial_conditions_continental_rift/5p_fixed_CERI_craton_right.prm b/cookbooks/initial_conditions_continental_rift/5p_fixed_CERI_craton_right.prm new file mode 100644 index 00000000000..103eb58ea4c --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/5p_fixed_CERI_craton_right.prm @@ -0,0 +1,338 @@ +set Additional shared libraries = /Applications/ASPECT/VisualStudioCode/aspect/cookbooks/initial_conditions_continental_rift/libinitial_conditions_continental_rift.debug.so + + +set Dimension = 2 +set End time = 3500 +set Use years in output instead of seconds = true +set CFL number = 1 +set Maximum time step = 3.5e3 +set Maximum first time step = 2e2 +set Maximum relative increase in time step = 100 + +set Adiabatic surface temperature = 1547 +set Pressure normalization = no +set Output directory = /Applications/ASPECT/VisualStudioCode/aspect/cookbooks/initial_conditions_continental_rift/output + +set Nonlinear solver scheme = single Advection, iterated Stokes +set Max nonlinear iterations = 2 +set Nonlinear solver tolerance = 1e-3 +set Max nonlinear iterations in pre-refinement = 0 + +# Solver parameters +subsection Solver parameters + subsection Stokes solver parameters + set Number of cheap Stokes solver steps = 1000 + set Linear solver tolerance = 1e-3 + set GMRES solver restart length = 50 + set Use full A block as preconditioner = true + end +end + +subsection Geometry model + set Model name = box + + subsection Box + set X extent = 700e3 + set Y extent = 300e3 + set X repetitions = 70 + set Y repetitions = 30 + end + +end + +# Take the minimum of the continental geotherm +# and the adiabat with 'Adiabatic surface temperature' +subsection Initial temperature model + set List of model names = adiabatic, lithosphere with rift + set List of model operators = add, replace if valid + subsection Lithosphere with rift + set LAB isotherm temperature = 1623. + set Surface temperature = 293. + # Whether or not to prescribe the LAB depth up to a + # certain depth (in area below LAB) + # or use adiabat everywhere + set Use temperature compensation depth = true + set Temperature compensation depth = 200e3 + end + subsection Adiabatic + # A reference profile of the compositional fields + # where x represents depth + subsection Function + # plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio_marine_continental_sediment, silt_fraction + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + if(x<23e3,1,0); \ + if(x>=23e3&x<43e3,1,0); \ + if(x>=43e3&x<200e3,1,0); \ + 0; \ + 0 + end + set Age top boundary layer = 0 + set Age bottom boundary layer = 0 + end +end + +subsection Compositional fields + set Number of fields = 10 + set Names of fields = plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio_marine_continental_sediment, silt_fraction +end + +subsection Initial composition model + set List of model names = lithosphere with rift, rift box initial plastic strain, function + #set List of model names = lithosphere with rift, rift, function + subsection Lithosphere with rift + set Blend polygons and rifts = true + set Standard deviation of Gaussian rift geometry = 60e3 + set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 + # LAB at 110 km + set Rift axis line segments = 350e3 + set Layer thicknesses = 20e3, 15e3, 85e3 + + # Polygon LAB at 200 km + set Lithospheric polygon layer thicknesses = 23e3, 20e3 , 157.e3 + set Lithospheric polygons = 450e3 > 3000e3 + set Half width of polygon smoothing = 10e3 + end + + # Inherited noise + subsection Rift box initial plastic strain + set Standard deviation of Gaussian noise amplitude distribution = 200e3 + set Maximum amplitude of Gaussian noise amplitude distribution = 0.250000 + set Random number generator seed = 2 + set Depth around which Gaussian noise is smoothed out = 50e3 + set Halfwidth with which Gaussian noise is smoothed out in depth = 10e3 + #set Grid intervals for noise X or radius = 2240 + # Add 16 intervals for the additional 5 km that is added to the grid + # to account for initial topography + #set Grid intervals for noise Y or longitude = 976 #960 + set Rift axis line segments = 350e3 + end + + subsection Function + set Variable names = x,y + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0 + end +end + +subsection Boundary composition model + set List of model names = function + set Fixed composition boundary indicators = bottom, top + subsection Function + set Variable names = x,y,t + set Function constants = h=300e3,My=1e-6, SL=0 + # Names of fields = plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio, silt_fraction + set Function expression = 0; \ + 0; \ + if(y>h/2 && t>0,t*My,0); \ + if(y>h/2 && t>0,h+SL-y,0); \ + if(y>h/2 && t>0,1,0); \ + if(y>h/2 && t==0,1,0); \ + 0; \ + 0; \ + 0; \ + 0 + end +end + +subsection Boundary temperature model + set List of model names = initial temperature, box + set List of model operators = add, minimum + set Fixed temperature boundary indicators = bottom, top + subsection Box + set Top temperature = 293 + set Bottom temperature = 5000 # Unrealistically high, so that it is always taken from initial temperature plugin + end +end + + +subsection Mesh deformation + set Additional tangential mesh velocity boundary indicators = right + set Mesh deformation boundary indicators = top: free surface, top: ascii data + + subsection Ascii data model + set Data directory = /Applications/ASPECT/VisualStudioCode/aspect/cookbooks/initial_conditions_continental_rift + set Data file name = 5p_fixed_craton_UC23km.txt + end +end + +subsection Formulation + set Formulation = custom + # incompressible + set Mass conservation = ask material model + # use reference density in the temperature equation + set Temperature equation = reference density profile +end + +subsection Boundary velocity model + set Prescribed velocity boundary indicators = left: function, right: function + set Tangential velocity boundary indicators = + subsection Function + set Coordinate system = cartesian + set Variable names = x,y,t + set Function constants = mm=0.001, yr=1, Z=300e3, X=700e3, outflow=10 + set Function expression = if(x=255e3,5,if(y>90e3, 3, 1)) + end + +end + +subsection Heating model + set List of model names = compositional heating, adiabatic heating, shear heating + subsection Adiabatic heating + set Use simplified adiabatic heating = true + end + subsection Compositional heating + # order: background, plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio, silt_fraction + set Use compositional field for heat production averaging = 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1, 0, 0 + set Compositional heating values = 0 , 0 , 0 , 0 , 0 , 1.2e-6 ,1.0e-6,0.1e-6, 0, 0, 0 + end +end + +subsection Adiabatic conditions model + set Model name = compute profile + subsection Compute profile + set Composition reference profile = function + # In terms of depth + # Moho depth craton 43 km, LAB depth 200 km (i.e. max LAB depth in model) + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + if(x<23e3,1,0); \ + if(x>=23e3&x<43e3,1,0); \ + if(x>=43e3&x<200e3,1,0); \ + 0; \ + 0 + end +end + +subsection Postprocess + set List of postprocessors = velocity statistics, temperature statistics, visualization, composition statistics, topography + subsection Visualization + set Interpolate output = false + set Write higher order output = false + set List of output variables = adiabat, viscosity, density, named additional outputs, thermal conductivity, heating + set Time between graphical output = 500e3 + set Point-wise stress and strain = true + end + subsection Topography + set Output to file = true + set Time between text output = 500e3 + end + +end diff --git a/cookbooks/initial_conditions_continental_rift/continental_extension.prm b/cookbooks/initial_conditions_continental_rift/continental_extension.prm new file mode 100644 index 00000000000..fba92e9d2da --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/continental_extension.prm @@ -0,0 +1,310 @@ +#### Continental Extension Cookbook +# This cookbook is based off numerous published studies, five of which are listed below. +# For additional information, see these publications and references therein. +# 1. Brune, S., Heine, C., Perez-Gussinye, M., and Sobolev, S.V. (2014), Nat. Comm., v.5, n.4014, +# Rift migration explains continental margin asymmetry and crustal hyperextension +# 2. Huismans, R., and Beaumont, C. (2011), Nature, v.473, p.71-75. +# Depth-dependent extension, two-stage breakup and cratonic underplating at rifted margins +# 3. Naliboff, J., and Buiter, S.H. (2015), Earth Planet. Sci. Lett., v.421, p.58-67, +# "Rift Reactivation and migration during multiphase extension" +# 4. Naliboff, J., Glerum, A., Sascha, S., Peron-Pinvidic, G., and Wrona, T. (2020), Geophys. +# Res. Lett., 47, e2019GL086611, "Development of 3‐D rift heterogeneity through fault +# network evolution" +# 5. Sandiford, D., Brune, S., Glerum, A., Naliboff, J., and Whittaker, J.M. (2021), Geophys. +# Geochem. Geosys., 22, e2021GC009681, "Kinematics of footwall exhumation at oceanic +# detachment faults: Solid-block rotation and apparent unbending" + +#### Global parameters +set Additional shared libraries = /Applications/ASPECT/VisualStudioCode/aspect/cookbooks/initial_conditions_continental_rift/libinitial_conditions_continental_rift.debug.so +set Dimension = 2 +set Start time = 0 +set End time = 2e3 +set Use years in output instead of seconds = true +set Nonlinear solver scheme = single Advection, iterated Stokes +set Nonlinear solver tolerance = 1e-4 +set Max nonlinear iterations = 1 +set CFL number = 0.5 +set Maximum time step = 2e3 +set Output directory = output-continental_extension +set Pressure normalization = no + +#### Parameters describing the model + +# Governing equations +subsection Formulation + set Formulation = Boussinesq approximation +end + +# Model geometry (200x100 km, 20 km spacing) +subsection Geometry model + set Model name = box + + subsection Box + set X repetitions = 70 + set Y repetitions = 30 + set X extent = 700e3 + set Y extent = 300e3 + end +end + +subsection Mesh refinement + set Initial adaptive refinement = 0 + set Initial global refinement = 0 + set Time steps between mesh refinement = 0 + set Strategy = minimum refinement function + + subsection Minimum refinement function + set Coordinate system = cartesian + set Variable names = x,y + set Function expression = if ( y>=50e3 && x>=40.e3 && x<=160.e3, 4, 3) + end +end + +subsection Solver parameters + subsection Stokes solver parameters + set Number of cheap Stokes solver steps = 0 + set Linear solver tolerance = 1e-5 + end + +end + +# Advecting the free surface using a normal, rather than vertical, +# projection. To reduce mesh instabilities and associated solver +# issues when deformation becomes large, diffusion is applied to +# the free surface at each time step. +subsection Mesh deformation + set Mesh deformation boundary indicators = top: free surface + + subsection Free surface + set Surface velocity projection = normal + end + +end + +# Velocity on boundaries characterized by functions +# The outward velocity (x-direction) on the left and right walls is 0.25 cm/year +# The vertical velocity at the base is 0.25 cm/year (balances outflow on sides) +# Velocity components parallel to the base (x-velocity) and side walls (y-velocity) +# are unconstrained (i.e. 'free'). +subsection Boundary velocity model + set Prescribed velocity boundary indicators = left x: function, right x:function + + subsection Function + set Variable names = x,y + set Function constants = v=0.0025, w=700.e3, d=300.e3 + set Function expression = if (x < w/2 , -v, v) ; v*2*d/w + end +end + +subsection Boundary traction model + set Prescribed traction boundary indicators = bottom: initial lithostatic pressure + subsection Initial lithostatic pressure + set Representative point = 10000,0 + end +end +# Number and names of compositional fields +# The five compositional fields represent: +# 1. The plastic strain that accumualates over time, with the initial plastic strain removed +# 2. The plastic strain that accumulated over time, including the initial plastic strain values +# 3. The upper crust +# 4. The lower crust +# 5. The mantle lithosphere +subsection Compositional fields + set Number of fields = 5 + set Names of fields = noninitial_plastic_strain, plastic_strain, upper, lower, mantle_L +end + +# Initial values of different compositional fields +# The upper crust (20 km thick), lower crust (20 km thick) +# and mantle (60 km thick) are continuous horizontal layers +# of constant thickness. The non initial plastic strain is set +# to 0 and the initial plastic strain is randomized between +# 0.5 and 1.5. +subsection Initial composition model + set List of model names = rift box initial plastic strain, function + + subsection Rift box initial plastic strain + set Standard deviation of Gaussian noise amplitude distribution = 200e3 + set Maximum amplitude of Gaussian noise amplitude distribution = 0.250000 + set Random number generator seed = 2.000000 + set Depth around which Gaussian noise is smoothed out = 50e3 + set Halfwidth with which Gaussian noise is smoothed out in depth = 10e3 + set Rift axis line segments = 350e3 + end + subsection Function + set Variable names = x,y + set Function expression = 0; \ + 0; \ + if(y>=280.e3, 1, 0); \ + if(y<280.e3 && y>=260.e3, 1, 0); \ + if(y<260.e3, 1, 0); + end +end + +# Composition: fixed on bottom (inflow boundary), free on sides and top +subsection Boundary composition model + set Fixed composition boundary indicators = bottom + set List of model names = initial composition +end + +# Temperature boundary conditions +# Top and bottom (fixed) temperatures are consistent with the initial temperature field +# Note that while temperatures are specified for the model sides, these values are +# not used as the sides are not specified "Fixed temperature boundaries". Rather, +# these boundaries are insulating (zero net heat flux). +subsection Boundary temperature model + set Fixed temperature boundary indicators = bottom, top + set List of model names = box + + subsection Box + set Bottom temperature = 1613 + set Top temperature = 273 + end +end + +# Initial temperature field +# Typical continental geotherm based on equations 4-6 from: +# D.S. Chapman (1986), "Thermal gradients in the continental crust", +# Geological Society of London Special Publications, v.24, p.63-70. +# The initial constraints are: +# Surface Temperature - upper crust (ts1) = 273 K +# Surface Heat Flow - upper crust (qs1) = 0.055 mW/m^2 +# Heat Production - upper crust (A1) = 1.00e-6 W/m^3; +# Heat Production - lower crust (A2) = 0.25e-6 W/m^3; +# Heat Production - mantle (A3) = 0.00e-6 W/m^3; +# Thermal Conductivity - all layers = 2.5 (W/(m K)); +# To satisfy these constraints, the following values are required: +# Surface Temperature - lower crust (ts2) = 633 K +# - mantle (ts3) = 893 K +# Surface Heat Flow - lower crust (qs2) = 0.035 W/m^2; +# - mantle (qs3) = 0.030 W/m^2; +# Note: The continental geotherm initial temperature model +# plugin can be used to compute an identical geotherm +# for the lithosphere. An example of how to use this +# plugin is illustrated in the test for this cookbook +# (tests/continental_extension.prm). +subsection Initial temperature model + set Model name = function + + subsection Function + set Variable names = x,y + set Function constants = h=100e3, ts1=273, ts2=633, ts3=893, \ + A1=1.e-6, A2=0.25e-6, A3=0.0, \ + k1=2.5, k2=2.5, k3=2.5, \ + qs1=0.055, qs2=0.035, qs3=0.030 + set Function expression = if( (h-y)<=20.e3, \ + ts1 + (qs1/k1)*(h-y) - (A1*(h-y)*(h-y))/(2.0*k1), \ + if( (h-y)>20.e3 && (h-y)<=40.e3, \ + ts2 + (qs2/k2)*(h-y-20.e3) - (A2*(h-y-20.e3)*(h-y-20.e3))/(2.0*k2), \ + ts3 + (qs3/k3)*(h-y-40.e3) - (A3*(h-y-40.e3)*(h-y-40.e3))/(2.0*k3) ) ); + end +end + +# Constant internal heat production values (W/m^3) for background material +# and compositional fields. +subsection Heating model + set List of model names = compositional heating + + subsection Compositional heating + set Use compositional field for heat production averaging = 1, 0, 0, 1, 1, 1 + set Compositional heating values = 0.0, 0.0, 0.0, 1.0e-6, 0.25e-6, 0. + end +end + +# Material model +# Rheology: Non-linear viscous flow and Drucker Prager Plasticity +# Values for most rheological parameters are specified for a background material and +# each compositional field. Values for viscous deformation are based on dislocation +# creep flow-laws, with distinct values for the upper crust (wet quartzite), lower +# crust (wet anorthite) and mantle (dry olivine). Table 1 of Naliboff and Buiter (2015), +# Earth Planet. Sci. Lett., v.421, p. 58-67 contains values for each of these flow laws. +subsection Material model + set Model name = visco plastic + + subsection Visco Plastic + # Reference temperature and viscosity + set Reference temperature = 273 + + # The minimum strain-rate helps limit large viscosities values that arise + # as the strain-rate approaches zero. + # The reference strain-rate is used on the first non-linear iteration + # of the first time step when the velocity has not been determined yet. + set Minimum strain rate = 1.e-20 + set Reference strain rate = 1.e-16 + + # Limit the viscosity with minimum and maximum values + set Minimum viscosity = 1e18 + set Maximum viscosity = 1e26 + + # Thermal diffusivity is adjusted to match thermal conductivities + # assumed in assigning the initial geotherm + set Define thermal conductivities = true + set Thermal conductivities = 2.5 + set Heat capacities = 750. + + # Density values of 1 are assigned to "strain" fields, which are not taken into + # account when computing material properties. + set Densities = 3300, 1.0, 1.0, 2700, 2900, 3300 + set Thermal expansivities = 2e-5 + + # Harmonic viscosity averaging + set Viscosity averaging scheme = harmonic + + # Choose to have the viscosity (pre-yield) follow a dislocation + # diffusion or composite flow law. Here, dislocation is selected + # so no need to specify diffusion creep parameters below, which are + # only used if "diffusion" or "composite" option is selected. + set Viscous flow law = dislocation + + # Dislocation creep parameters for + # 1. Background material/mantle (dry olivine) + # Hirth & Kohlstedt (2004), Geophys. Monogr. Am. Geophys. Soc., v.138, p.83-105. + # "Rheology of the upper mantle and the mantle wedge:a view from the experimentalists" + # 2. Upper crust (wet quartzite) + # Rutter & Brodie (2004), J. Struct. Geol., v.26, p.2011-2023. + # "Experimental grain size-sensitive flow of hot-pressed Brazilian quartz aggregates" + # 3. Lower crust and weak seed (wet anorthite) + # Rybacki et al. (2006), J. Geophys. Res., v.111(B3). + # "Influence of water fugacity and activation volume on the flow properties of fine-grained + # anorthite aggregates" + # Note that the viscous pre-factors below are scaled to plane strain from unixial strain experiments. + # For ease of identification, fields tracking strain are assigned prefactors of 1e-50 + set Prefactors for dislocation creep = 6.52e-16, 1.00e-50, 1.00e-50, 8.57e-28, 7.13e-18, 6.52e-16 + set Stress exponents for dislocation creep = 3.5, 1.0, 1.0, 4.0, 3.0, 3.5 + set Activation energies for dislocation creep = 530.e3, 0.0, 0.0, 223.e3, 345.e3, 530.e3 + set Activation volumes for dislocation creep = 18.e-6, 0.0, 0.0, 0.0, 0.0, 18.e-6 + + # Plasticity parameters + set Angles of internal friction = 30 + set Cohesions = 20.e6 + + # The parameters below weaken the friction and cohesion by a + # a factor of 4 between plastic strain values of 0.5 and 1.5. + set Strain weakening mechanism = plastic weakening with plastic strain only + set Start plasticity strain weakening intervals = 0.5 + set End plasticity strain weakening intervals = 1.5 + set Cohesion strain weakening factors = 0.25 + set Friction strain weakening factors = 0.25 + end +end + +# Gravity model +subsection Gravity model + set Model name = vertical + + subsection Vertical + set Magnitude = 9.81 + end +end + +# Post processing +subsection Postprocess + set List of postprocessors = composition statistics, heat flux densities, heat flux statistics, mass flux statistics, pressure statistics, temperature statistics, topography, velocity statistics, visualization + + subsection Visualization + set List of output variables = density, named additional outputs, strain rate, viscosity + set Output format = vtu + set Time between graphical output = 100.e3 + set Interpolate output = true + end +end diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm index 5621f14a757..e662e023563 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm @@ -13,7 +13,7 @@ set Nonlinear solver tolerance = 1e-5 set Max nonlinear iterations = 2 set CFL number = 0.5 set Maximum time step = 20e3 -set Output directory = output-initial_conditions_continental_rift_initial_topography +set Output directory = output-initial_conditions_continental_rift_initial_topography_with_craton set Pressure normalization = no set Adiabatic surface temperature = 1573 @@ -44,13 +44,14 @@ subsection Geometry model end -# Globally refine the mesh to 2.5 km spacing, and then -# adaptively refine the mesh to 1.25 km spacing above y=50 km -# and between x=40 and x=160 km. These values ensure areas + +# Globally refine the mesh to 5 km spacing, and then +# adaptively refine the mesh to 2.5 km spacing for the crustal layers. +# These values ensure areas # undergoing brittle deformation are in the high-resolution # region. subsection Mesh refinement - set Initial adaptive refinement = 0 + set Initial adaptive refinement = 1 set Initial global refinement = 3 set Time steps between mesh refinement = 0 set Strategy = minimum refinement function @@ -58,7 +59,7 @@ subsection Mesh refinement subsection Minimum refinement function set Coordinate system = cartesian set Variable names = x,y - set Function expression = if ( y>=50e3 && x>=40.e3 && x<=160.e3, 4, 3) + set Function expression = if ( y>= 155e3, 4, 3) end end @@ -148,7 +149,7 @@ subsection Initial composition model # The thicknesses of the lithospheric layer within a polygon set Lithospheric polygon layer thicknesses = 20e3, 15e3 , 115.e3 # The segments making up the polygon - set Lithospheric polygons = 550e3 > 3000e3 + set Lithospheric polygons = 350e3 > 3000e3 # The half width of the transition from polygon to reference lithosphere set Half width of polygon smoothing = 10e3 end @@ -284,7 +285,7 @@ subsection Material model # Density values of 1 are assigned to "strain" fields, which are not taken into # account when computing material properties. - set Densities = 3300, 1.0, 1.0, 2700, 2900, 3300 + set Densities = 3300, 1.0, 1.0, 2700, 2900, 3200 set Thermal expansivities = 2e-5 # Harmonic viscosity averaging diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm index 56fc5a19662..2472ad4884d 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm @@ -6,14 +6,14 @@ set Additional shared libraries = $ASPECT_SOURCE_DIR/cookbooks/initial_conditions_continental_rift/libinitial_conditions_continental_rift.debug.so set Dimension = 2 set Start time = 0 -set End time = 0 #5e6 +set End time = 0 set Use years in output instead of seconds = true set Nonlinear solver scheme = single Advection, iterated Stokes set Nonlinear solver tolerance = 1e-5 -set Max nonlinear iterations = 2 +set Max nonlinear iterations = 50 set CFL number = 0.5 set Maximum time step = 20e3 -set Output directory = output-initial_conditions_continental_rift_no_initial_topography +set Output directory = output-initial_conditions_continental_rift_no_initial_topography_with_craton set Pressure normalization = no set Adiabatic surface temperature = 1573 @@ -36,13 +36,13 @@ subsection Geometry model end end -# Globally refine the mesh to 2.5 km spacing, and then -# adaptively refine the mesh to 1.25 km spacing above y=50 km -# and between x=40 and x=160 km. These values ensure areas +# Globally refine the mesh to 5 km spacing, and then +# adaptively refine the mesh to 2.5 km spacing for the crustal layers. +# These values ensure areas # undergoing brittle deformation are in the high-resolution # region. subsection Mesh refinement - set Initial adaptive refinement = 0 + set Initial adaptive refinement = 1 set Initial global refinement = 3 set Time steps between mesh refinement = 0 set Strategy = minimum refinement function @@ -50,7 +50,7 @@ subsection Mesh refinement subsection Minimum refinement function set Coordinate system = cartesian set Variable names = x,y - set Function expression = if ( y>=50e3 && x>=40.e3 && x<=160.e3, 4, 3) + set Function expression = if ( y>= 155e3, 4, 3) end end @@ -140,7 +140,7 @@ subsection Initial composition model # The thicknesses of the lithospheric layer within a polygon set Lithospheric polygon layer thicknesses = 20e3, 15e3 , 115.e3 # The segments making up the polygon - set Lithospheric polygons = 550e3 > 3000e3 + set Lithospheric polygons = 350e3 > 3000e3 # The half width of the transition from polygon to reference lithosphere set Half width of polygon smoothing = 10e3 end diff --git a/cookbooks/initial_conditions_continental_rift/test.prm b/cookbooks/initial_conditions_continental_rift/test.prm new file mode 100644 index 00000000000..ac93ccba0cd --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/test.prm @@ -0,0 +1,251 @@ +#set Additional shared libraries = /Applications/ASPECT/VisualStudioCode/aspect/cookbooks/initial_conditions_continental_rift/libinitial_conditions_continental_rift.debug.so + +set Dimension = 2 +set End time = 3.5e3 +set Use years in output instead of seconds = true +set Maximum time step = 3.5e3 +set Maximum first time step = 2e2 +set Maximum relative increase in time step = 100 + +set Adiabatic surface temperature = 1547 +set Pressure normalization = no +set Output directory = /Applications/ASPECT/VisualStudioCode/aspect/cookbooks/initial_conditions_continental_rift/output + +set Nonlinear solver scheme = single Advection, iterated Stokes +set Max nonlinear iterations = 2 +set Nonlinear solver tolerance = 1e-6 +set Max nonlinear iterations in pre-refinement = 0 + + +subsection Geometry model + set Model name = box + + subsection Box + set X extent = 700e3 + set Y extent = 300e3 + set X repetitions = 70 + set Y repetitions = 30 + end + subsection Initial topography model + set Model name = lithosphere with rift + end +end + +subsection Initial temperature model + set List of model names = adiabatic + subsection Adiabatic + subsection Function + # plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio_marine_continental_sediment, silt_fraction + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + if(x<23e3,1,0); \ + if(x>=23e3&x<43e3,1,0); \ + if(x>=43e3&x<200e3,1,0); \ + 0; \ + 0 + end + set Age top boundary layer = 0 + set Age bottom boundary layer = 0 + end +end + +subsection Compositional fields + set Number of fields = 10 + set Names of fields = plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio_marine_continental_sediment, silt_fraction +end + +subsection Initial composition model + set List of model names = function + + subsection Function + set Variable names = x,y + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0 + end +end + +subsection Boundary composition model + set List of model names = function + set Fixed composition boundary indicators = bottom, top + subsection Function + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + 0 + end +end + +subsection Boundary temperature model + set List of model names = box + set Fixed temperature boundary indicators = bottom, top + subsection Box + set Top temperature = 293 + set Bottom temperature = 1700 # Unrealistically high, so that it is always taken from initial temperature plugin + end +end + + +subsection Mesh deformation + set Mesh deformation boundary indicators = top: free surface +end + +subsection Formulation + set Formulation = custom + # incompressible + set Mass conservation = ask material model + # use reference density in the temperature equation + set Temperature equation = reference density profile +end + +subsection Boundary velocity model + set Tangential velocity boundary indicators = left, right, bottom +end + + +subsection Gravity model + set Model name = vertical + + subsection Vertical + set Magnitude = 9.81 + end +end + + +subsection Material model + set Model name = visco plastic + set Material averaging = harmonic average only viscosity + + subsection Visco Plastic + + set Reference temperature = 293 + + set Minimum strain rate = 1.e-25 + set Reference strain rate = 1.e-16 + + set Minimum viscosity = 5e18 + set Maximum viscosity = 1e25 + + # bg, plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio_marine_continental_sediment, silt_fraction + set Heat capacities = 1200 + # Use densities for masked fields that are closest to the density of the area they are in to avoid artefacts from under/overshoot. + set Densities = 3182, 2613, 2758, 2410, 2410, 2410, 2613, 2758, 3163, 2410, 2410 + set Thermal expansivities = 3.0e-5, 2.7e-5, 2.7e-5, 3.7e-5, 3.7e-5, 3.7e-5, 2.7e-5, 2.7e-5, 3.0e-5, 3.7e-5, 3.7e-5 + set Define thermal conductivities = true + set Thermal conductivities = 3, 2.5, 2.5, 2.1, 2.1, 2.1, 2.5, 2.5, 3, 2.5, 2.5 + + set Viscosity averaging scheme = harmonic + + set Viscous flow law = composite + + # Dislocation creep parameters for + # 1. Background material/mantle (dry olivine) + # Hirth & Kohlstedt (2003), Geophys. Monogr. Am. Geophys. Soc., v.138, p.83-105. + # "Rheology of the upper mantle and the mantle wedge:a view from the experimentalists" + # 2. Upper crust (wet quartzite) + # Rutter & Brodie (2004), J. Struct. Geol., v.26, p.2011-2023. + # "Experimental grain size-sensitive flow of hot-pressed Brazilian quartz aggregates" + # 3. Lower crust and weak seed (wet anorthite) + # Rybacki et al. (2006), J. Geophys. Res., v.111(B3). + # "Influence of water fugacity and activation volume on the flow properties of fine-grained + # anorthite aggregates" + # Note that the viscous pre-factors below are scaled to plane strain from unixial strain experiments. + set Prefactors for dislocation creep = 2.12e-15, 1e-20, 1e-20 , 1e-20, 1e-20 , 8.57e-28, 8.57e-28, 7.13e-18, 6.52e-16, 1e-20, 1e-20 + set Stress exponents for dislocation creep = 3.5, 1.0 , 1.0 , 1.0 , 1.0 , 4.0 , 4.0 , 3.0 , 3.5, 1, 1 + set Activation energies for dislocation creep = 480.e3, 530.e3, 530.e3, 530.e3, 530.e3, 223.e3 , 223.e3 , 345.e3 , 530.e3, 530.e3, 530e3 + set Activation volumes for dislocation creep = 11.e-6, 18.e-6, 18.e-6, 18.e-6, 18.e-6, 0. , 0. , 38.e-6 , 18.e-6, 18.e-6, 18e-6 + + set Prefactors for diffusion creep = 1.5e-9, 2.25e-9, 2.25e-9, 2.25e-9, 2.25e-9, 5.97e-19, 5.97e-19, 2.99e-25, 2.25e-9, 2.25e-9, 2.25e-9 + set Activation energies for diffusion creep = 335.e3 , 375.e3 , 375.e3 , 375.e3 , 375.e3 , 223.e3 , 223.e3 , 159.e3 , 375.e3, 375e3, 375e3 + set Activation volumes for diffusion creep = 4.e-6 , 6.e-6 , 6.e-6 , 6.e-6 , 6.e-6 , 0. , 0. , 38.e-6 , 6.e-6, 6.e-6, 6e-6 + set Grain size = 1e-3 + set Grain size exponents for diffusion creep = 0. , 0. , 0. , 0. , 0. , 2 , 2 , 3 , 0, 0, 0 + # Plasticity parameters + set Angles of internal friction = 26.56 + set Cohesions = 5.e6 + + # Strain weakening parameters + set Strain weakening mechanism = plastic weakening with plastic strain and viscous weakening with viscous strain + set Start plasticity strain weakening intervals = 0.0 + set End plasticity strain weakening intervals = 2 + set Cohesion strain weakening factors = 1.0 + set Friction strain weakening factors = 0.25 + + set Start prefactor strain weakening intervals = 0.0 + set End prefactor strain weakening intervals = 2 + # TODO apply weakening to bg as well? + set Prefactor strain weakening factors = 1.0, 1.0, 1.0, 1.0, 1.0, 0.25, 0.25, 0.25, 0.25, 1.0, 1.0 + + end +end + +subsection Mesh refinement + set Initial global refinement = 2 + set Initial adaptive refinement = 0 #3 + set Time steps between mesh refinement = 0 + set Strategy = minimum refinement function + set Skip solvers on initial refinement = false + + subsection Minimum refinement function + set Coordinate system = cartesian + set Variable names = x,y + # Level 5 (highest) in upper 45 km (crust is at most 43 km thick). + # Level 3 up to 130 km depth (normal lithosphere is 120 km thick). + # Level 3 up to 210 km depth if craton present (craton is 200 km thick). + # Level 1 below. + set Function expression = if(y>=255e3,5,if(y>90e3, 3, 1)) + end + +end + +subsection Heating model + set List of model names = compositional heating, adiabatic heating, shear heating + subsection Adiabatic heating + set Use simplified adiabatic heating = true + end + subsection Compositional heating + # order: background, plastic_strain, viscous_strain, sediment_age, deposition_depth, sediment, upper, lower, mantle_L, ratio, silt_fraction + set Use compositional field for heat production averaging = 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1, 0, 0 + set Compositional heating values = 0 , 0 , 0 , 0 , 0 , 1.2e-6 ,1.0e-6,0.1e-6, 0, 0, 0 + end +end + +subsection Adiabatic conditions model + set Model name = compute profile + subsection Compute profile + set Composition reference profile = function + # In terms of depth + # Moho depth craton 43 km, LAB depth 200 km (i.e. max LAB depth in model) + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0; \ + if(x<23e3,1,0); \ + if(x>=23e3&x<43e3,1,0); \ + if(x>=43e3&x<200e3,1,0); \ + 0; \ + 0 + end +end + +subsection Postprocess + set List of postprocessors = velocity statistics + +end From aaf632569790299e2cf232d23263cd97202512bb Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 31 May 2024 01:38:49 +0200 Subject: [PATCH 28/38] Update topo plugins --- .../lithosphere_rift_topo.cc | 69 ++++++++----------- .../lithosphere_rift_topo.h | 18 ----- 2 files changed, 29 insertions(+), 58 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc index 2d27751e897..dee6b5d1003 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -57,13 +57,11 @@ namespace aspect } // Get the relevant densities for the lithosphere. + // We take the reference density of the first phase. densities.push_back(densities_per_composition[0][0]); densities.push_back(densities_per_composition[id_upper+1][0]); densities.push_back(densities_per_composition[id_lower+1][0]); densities.push_back(densities_per_composition[id_mantle_L+1][0]); - std::cout << "Assembling final densities: " << densities_per_composition[0][0] << ", "; - std::cout << densities_per_composition[id_upper+1][0] << ", " << densities_per_composition[id_lower+1][0]; - std::cout << ", " << densities_per_composition[id_mantle_L+1][0] << std::endl; // The reference column ref_rgh = 0; @@ -74,9 +72,6 @@ namespace aspect // The total lithosphere thickness const double sum_thicknesses = std::accumulate(reference_thicknesses.begin(), reference_thicknesses.end(), 0); - // Make sure the compensation depth is in the sublithospheric mantle - compensation_depth = 2. * sum_thicknesses + 1e3; - // The column at the rift center double rift_rgh = 0; rift_thicknesses = reference_thicknesses; @@ -93,6 +88,7 @@ namespace aspect const unsigned int n_polygons = polygon_thicknesses.size(); std::vector polygon_rgh(n_polygons); std::vector sum_polygon_thicknesses(n_polygons); + double max_sum_polygon_thicknesses = 0.; for (unsigned int i_polygons=0; i_polygonsget_pcout() << " Maximum initial topography of rift: " << topo_rift_amplitude << " m" << std::endl; - this->get_pcout() << " Maximum initial topography of polygon: " << topo_polygon_amplitude << " m" << std::endl; + // TODO: probably there are combinations of rift and polygon topography + // that result in a higher topography + maximum_topography = std::max(topo_rift_amplitude, topo_polygon_amplitude); + this->get_pcout() << " Maximum initial topography of rift: " << topo_rift_amplitude << " m" << std::endl; + this->get_pcout() << " Maximum initial topography of polygon: " << topo_polygon_amplitude << " m" << std::endl; } @@ -134,37 +137,26 @@ namespace aspect // here. if (initial_composition_manager == nullptr) const_cast>&>(initial_composition_manager) = this->get_initial_composition_manager_pointer(); + // Check that the required initial composition model is used // We have to do it here instead of in initialize() because // the names are not available upon initialization of the // initial topography model yet. const std::vector active_initial_composition_models = initial_composition_manager->get_active_initial_composition_names(); - AssertThrow(std::find(active_initial_composition_models.begin(),active_initial_composition_models.end(), "lithosphere with rift") != active_initial_composition_models.end(), - ExcMessage("The lithosphere with rift initial mesh refinement plugin requires the lithosphere with rift initial composition plugin.")); + AssertThrow(initial_composition_manager->template has_matching_initial_composition_model>(), + ExcMessage("The 'lithosphere with rift' initial topography plugin requires the 'lithosphere with rift' initial composition plugin.")); - // When cartesian, position contains x(,y); when spherical, position contains lon(,lat) (in degrees); + // When cartesian, position contains x(,y); when spherical, position contains lon(,lat) (in degrees). // Turn into a Point Point surface_position; for (unsigned int d=0; d distance_to_L_polygon; - for (typename std::list>>::const_iterator it = initial_composition_manager->get_active_initial_composition_conditions().begin(); - it != initial_composition_manager->get_active_initial_composition_conditions().end(); - ++it) - if ( InitialComposition::LithosphereRift *ic = dynamic_cast *> ((*it).get())) - { - distance_to_rift_axis = ic->distance_to_rift(surface_position); - distance_to_L_polygon = ic->distance_to_polygon(surface_position); - } + // Get the initial composition plugin + const InitialComposition::LithosphereRift &ic = initial_composition_manager->template get_matching_initial_composition_model>(); // Compute the topography based on distance to the rift and distance to the polygon - std::vector local_thicknesses(3); - local_thicknesses[0] = ((0.5 + 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * polygon_thicknesses[distance_to_L_polygon.second][0] + (0.5 - 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * reference_thicknesses[0]) * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0. - 2. * sigma_polygon ? 1. : (1.0 - A_rift[0] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2)))))); - local_thicknesses[1] = ((0.5 + 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * polygon_thicknesses[distance_to_L_polygon.second][1] + (0.5 - 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * reference_thicknesses[1]) * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0. - 2. * sigma_polygon ? 1. : (1.0 - A_rift[1] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2)))))); - local_thicknesses[2] = ((0.5 + 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * polygon_thicknesses[distance_to_L_polygon.second][2] + (0.5 - 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)) * reference_thicknesses[2]) * (!blend_rift_and_polygon && distance_to_L_polygon.first > 0. - 2. * sigma_polygon ? 1. : (1.0 - A_rift[2] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2)))))); + std::vector local_thicknesses = ic.compute_local_thicknesses(surface_position); // The local lithospheric column double local_rgh = 0; @@ -204,9 +196,6 @@ namespace aspect { prm.enter_subsection("Lithosphere with rift"); { - sigma_rift = prm.get_double ("Standard deviation of Gaussian rift geometry"); - sigma_polygon = prm.get_double ("Half width of polygon smoothing"); - blend_rift_and_polygon = prm.get_bool ("Blend polygons and rifts"); A_rift = Utilities::possibly_extend_from_1_to_N(Utilities::string_to_double(Utilities::split_string_list(prm.get("Amplitude of Gaussian rift geometry"))), 3, "Amplitude of Gaussian rift geometry"); diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h index bc684324522..c44059dfa33 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h @@ -75,18 +75,6 @@ namespace aspect parse_parameters (ParameterHandler &prm) override; private: - /** - * The standard deviation of the rift-perpendicular Gaussian distribution - * of the thinning/thickening of the lithospheric thicknesses with its - * maximum along the rift axis. - */ - double sigma_rift; - - /** - * The half width of the hyperbolic tangent used to smooth the transitions - * between reference and polygon lithospheric thicknesses. - */ - double sigma_polygon; /** * The maximum amplitude of the Gaussian distribution of the thinning/thickening @@ -116,12 +104,6 @@ namespace aspect */ double compensation_depth; - /** - * Whether or not to take the polygon thicknesses as dominant, or to smooth them - * gradually into rift areas. - */ - bool blend_rift_and_polygon; - /** * The maximum amplitude of the topography of the polygon area. */ From 734abde779043b897b28a47c65dd101f7ee0d9f6 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 31 May 2024 01:50:12 +0200 Subject: [PATCH 29/38] Indent --- .../doc/lithosphere_with_rift_IC_cookbook.md | 16 +++++----- ...ns_continental_rift_initial_topography.prm | 8 ++--- ...continental_rift_no_initial_topography.prm | 6 ++-- .../lithosphere_rift_IC.cc | 8 ++--- .../lithosphere_rift_IT_2.cc | 4 +-- .../lithosphere_rift_topo.cc | 30 +++++++++---------- 6 files changed, 36 insertions(+), 36 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md b/cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md index e92a6e347c7..08b4bd1893b 100644 --- a/cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md +++ b/cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md @@ -3,10 +3,10 @@ *This section was contributed by Anne Glerum.* In order to localize deformation under prescribed far-field -extension, initial weaknesses have to be introduced to the +extension, initial weaknesses have to be introduced to the model setup. Here we discuss plugins that 1) perturb the lithosphere consisting of upper crust, lower crust and mantle lithosphere -at a user-specified location and 2) add initial plastic +at a user-specified location and 2) add initial plastic strain is around this same location. This strain represents inherited weakness for example from prior deformation phases. To represent other deviations of the reference lithosphere, @@ -19,9 +19,9 @@ below. The temperature field is perturbed in the same way as the lithosphere compositional structure. In case the perturbations of the lithosphere in combination with -the free surface induce large velocities initially, an initial +the free surface induce large velocities initially, an initial topography plugin approximates the topography resulting from -isostatic equilibrium. +isostatic equilibrium. ## Initial lithosphere compositional fields and temperature @@ -35,7 +35,7 @@ incipient rift and a cratonic region. The perturbation of the lithospheric layers that represents an incipient rift follows a Gaussian -curve. We can either thicken or thin the layers, depending on +curve. We can either thicken or thin the layers, depending on the sign of the Gaussian amplitude: a negative amplitude thickens the corresponding layer and vice versa. The width of the perturbation is determined by the sigma of the Gaussian. The centre of the Gaussian @@ -60,7 +60,7 @@ For the initial temperature we combine two plugins: one that prescribes a continental steady-state geotherm and one that computes an adiabatic temperature profile. The geotherm implementation is based on Chapter 4.6 of Turcotte and Schubert. For each x-coordinate, it solves a steady-state -heat conduction equation taking into account the respective densities, +heat conduction equation taking into account the respective densities, heat productivities and thermal conductivities of the three lithospheric layers. Below the lithospheric a NaN is returned, such that we can replace this NaN by an adiabatic temperature profile. Care has to be taken that the @@ -78,7 +78,7 @@ adiabatic surface temperature matches the LAB temperature. ``` To include inherited heterogeneity we also include initial plastic strain -in the rift centre (Fig. {numref}`fig:initial_strain`). +in the rift centre (Fig. {numref}`fig:initial_strain`). We generate random strain values between 0 and 1 that are subsequently multiplied with a Gaussian distribution for which we specify the maximum amplitude and sigma. To control the depth extent of the initial @@ -96,7 +96,7 @@ with a hyperbolic tangent. Sometimes the combination of a free surface with lateral variations in the lithospheric thicknesses leads to very high velocities in the first timesteps. To avoid a drunken sailor effect and/or very small timesteps, we can then -prescribe initial topography that roughly fulfills isostatic equilibrium (Fig. {numref}`fig:initial_topography`). +prescribe initial topography that roughly fulfills isostatic equilibrium (Fig. {numref}`fig:initial_topography`). The required topography is computed using the reference density, so it neglects temperature effects on the density. diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm index e662e023563..5e3f14b6e9d 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm @@ -40,7 +40,7 @@ subsection Geometry model # to obtain isostasy. subsection Initial topography model set Model name = lithosphere with rift - end + end end @@ -143,7 +143,7 @@ subsection Initial composition model set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 # Where the rift axis should be. In this case in the centre of the domain. # In 3D simulations, line segments consisting of two coordinates - # should be provided. + # should be provided. set Rift axis line segments = 200e3 # The thicknesses of the lithospheric layer within a polygon @@ -209,14 +209,14 @@ subsection Boundary temperature model subsection Box set Top temperature = 293 # Unrealistically high, so that it is always taken from initial temperature plugin - set Bottom temperature = 5000 + set Bottom temperature = 5000 end end # Initial temperature field # The initial temperature consists of a typical continental geotherm # based on equations Turcotte and Schubert Ch. 4.6. -# Below the lithosphere-asthenosphere boundary (LAB, defined initially by the +# Below the lithosphere-asthenosphere boundary (LAB, defined initially by the # bottom of the mantle lithsphere and the 1623 K isotherm, # we prescribe an adiabatic temperature increase. subsection Initial temperature model diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm index 2472ad4884d..6bae84f1979 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm @@ -134,7 +134,7 @@ subsection Initial composition model set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 # Where the rift axis should be. In this case in the centre of the domain. # In 3D simulations, line segments consisting of two coordinates - # should be provided. + # should be provided. set Rift axis line segments = 200e3 # The thicknesses of the lithospheric layer within a polygon @@ -200,14 +200,14 @@ subsection Boundary temperature model subsection Box set Top temperature = 293 # Unrealistically high, so that it is always taken from initial temperature plugin - set Bottom temperature = 5000 + set Bottom temperature = 5000 end end # Initial temperature field # The initial temperature consists of a typical continental geotherm # based on equations Turcotte and Schubert Ch. 4.6. -# Below the lithosphere-asthenosphere boundary (LAB, defined initially by the +# Below the lithosphere-asthenosphere boundary (LAB, defined initially by the # bottom of the mantle lithsphere and the 1623 K isotherm, # we prescribe an adiabatic temperature increase. subsection Initial temperature model diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc index 38be60fe572..a929d933c4b 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IC.cc @@ -178,13 +178,13 @@ namespace aspect // is smoothed by a hyperbolic tangent. const double polygon_contribution = (0.5 + 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)); const double rift_contribution = (0.5 - 0.5 * std::tanh(distance_to_L_polygon.first / sigma_polygon)); - + // The rift perturbation follows a Gaussian contribution. std::vector local_thicknesses(3); for (unsigned int i = 0; i < 3; ++i) - local_thicknesses[i] = (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2))))) - * reference_thicknesses[i] * rift_contribution + polygon_contribution * polygon_thicknesses[distance_to_L_polygon.second][i]; - + local_thicknesses[i] = (1.0 - A_rift[i] * std::exp((-std::pow(distance_to_rift_axis, 2) / (2.0 * std::pow(sigma_rift, 2))))) + * reference_thicknesses[i] * rift_contribution + polygon_contribution * polygon_thicknesses[distance_to_L_polygon.second][i]; + return local_thicknesses; } diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index dc644ac9a6d..7c2a4c6c866 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -75,8 +75,8 @@ namespace aspect initial_temperature (const Point &position) const { Assert(initial_composition_manager->template has_matching_initial_composition_model>(), - ExcMessage("The initial temperature plugin lithosphere with rift requires the corresponding initial composition plugin.")); - + ExcMessage("The initial temperature plugin lithosphere with rift requires the corresponding initial composition plugin.")); + // Get the initial composition plugin const InitialComposition::LithosphereRift &ic = initial_composition_manager->template get_matching_initial_composition_model>(); diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc index dee6b5d1003..b13da041415 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.cc @@ -101,28 +101,28 @@ namespace aspect } - // Make sure the compensation depth is in the sublithospheric mantle - compensation_depth = std::max(sum_thicknesses, std::max(sum_rift_thicknesses, max_sum_polygon_thicknesses)) + 5e3; + // Make sure the compensation depth is in the sublithospheric mantle + compensation_depth = std::max(sum_thicknesses, std::max(sum_rift_thicknesses, max_sum_polygon_thicknesses)) + 5e3; - // Add sublithospheric mantle part to the columns - ref_rgh += (compensation_depth - sum_thicknesses) * densities[0]; - rift_rgh += (compensation_depth - sum_rift_thicknesses) * densities[0]; - for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) + // Add sublithospheric mantle part to the columns + ref_rgh += (compensation_depth - sum_thicknesses) * densities[0]; + rift_rgh += (compensation_depth - sum_rift_thicknesses) * densities[0]; + for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) { polygon_rgh[i_polygons] += (compensation_depth - sum_polygon_thicknesses[i_polygons]) * densities[0]; } - // Compute the maximum topography based on mass surplus/deficit - topo_rift_amplitude = (ref_rgh - rift_rgh) / densities[0]; - for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) - topo_polygon_amplitude = std::max((ref_rgh - polygon_rgh[i_polygons]) / densities[0], topo_polygon_amplitude); + // Compute the maximum topography based on mass surplus/deficit + topo_rift_amplitude = (ref_rgh - rift_rgh) / densities[0]; + for (unsigned int i_polygons = 0; i_polygons < n_polygons; ++i_polygons) + topo_polygon_amplitude = std::max((ref_rgh - polygon_rgh[i_polygons]) / densities[0], topo_polygon_amplitude); - // TODO: probably there are combinations of rift and polygon topography - // that result in a higher topography - maximum_topography = std::max(topo_rift_amplitude, topo_polygon_amplitude); + // TODO: probably there are combinations of rift and polygon topography + // that result in a higher topography + maximum_topography = std::max(topo_rift_amplitude, topo_polygon_amplitude); - this->get_pcout() << " Maximum initial topography of rift: " << topo_rift_amplitude << " m" << std::endl; - this->get_pcout() << " Maximum initial topography of polygon: " << topo_polygon_amplitude << " m" << std::endl; + this->get_pcout() << " Maximum initial topography of rift: " << topo_rift_amplitude << " m" << std::endl; + this->get_pcout() << " Maximum initial topography of polygon: " << topo_polygon_amplitude << " m" << std::endl; } From 4cb754aa408a44bb33ef31fb2655d5f62ef863ce Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 31 May 2024 01:54:54 +0200 Subject: [PATCH 30/38] Add cookbook to geophysical setups --- ...ift_IC_cookbook.md => initial_conditions_continental_rift.md} | 0 doc/sphinx/user/cookbooks/geophysical-setups.md | 1 + 2 files changed, 1 insertion(+) rename cookbooks/initial_conditions_continental_rift/doc/{lithosphere_with_rift_IC_cookbook.md => initial_conditions_continental_rift.md} (100%) diff --git a/cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md b/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md similarity index 100% rename from cookbooks/initial_conditions_continental_rift/doc/lithosphere_with_rift_IC_cookbook.md rename to cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md diff --git a/doc/sphinx/user/cookbooks/geophysical-setups.md b/doc/sphinx/user/cookbooks/geophysical-setups.md index 6146b3d9cfc..bf113543c55 100644 --- a/doc/sphinx/user/cookbooks/geophysical-setups.md +++ b/doc/sphinx/user/cookbooks/geophysical-setups.md @@ -102,6 +102,7 @@ cookbooks/multicomponent_steinberger/doc/multicomponent_steinberger.md cookbooks/morency_doin_2004/doc/morency_doin_2004.md cookbooks/crustal_deformation/doc/crustal_deformation.md cookbooks/continental_extension/doc/continental_extension.md +cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md cookbooks/inner_core_convection/doc/inner_core_convection.md cookbooks/lower_crustal_flow/doc/lower_crustal_flow.md cookbooks/global_melt/doc/global_melt.md From 7c1f59f6eb29c6a10b7b617e64385e46c27e2a5b Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 31 May 2024 03:49:11 +0200 Subject: [PATCH 31/38] Fix typos and md syntax --- .../doc/initial_conditions_continental_rift.md | 5 ++--- .../lithosphere_rift_topo.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md b/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md index 08b4bd1893b..8ed3c337dcd 100644 --- a/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md +++ b/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md @@ -49,7 +49,7 @@ In addition to a rift centre, other deviations from the reference lithospheric thicknesses can also be prescribed. In the above snippet, these are specified as polygons (multiple polygons are allowed) with their own layer thicknesses. The transition from reference lithosphere -to polgyon lithosphere is implemented as a hyperbolic tangent with a +to polygon lithosphere is implemented as a hyperbolic tangent with a centre point and a half-width. @@ -70,8 +70,6 @@ adiabatic surface temperature matches the LAB temperature. The initial temperature distribution. - -```{literalinclude} initial_topography.prm ``` ```{literalinclude} initial_composition_strain.prm @@ -89,6 +87,7 @@ with a hyperbolic tangent. The initial plastic strain distribution. +``` ```{literalinclude} initial_topography.prm ``` diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h index c44059dfa33..7020543fd8f 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_topo.h @@ -93,7 +93,7 @@ namespace aspect double topo_rift_amplitude; /** - * The product of density, gravitational accelleration constant and thickness of the + * The product of density, gravitational acceleration constant and thickness of the * reference lithospheric column used in computing the topography based on isostasy. */ double ref_rgh; From 69de1044a6375e8a818c68bbc165231ede458360 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 31 May 2024 04:23:25 +0200 Subject: [PATCH 32/38] Add prm snippets and fix figure name --- .../doc/initial_composition_lithosphere.prm | 59 +++++++++++++++++++ .../doc/initial_composition_strain.prm | 22 +++++++ .../initial_conditions_continental_rift.md | 2 +- .../doc/initial_temperature.prm | 45 ++++++++++++++ .../doc/initial_topography.prm | 19 ++++++ 5 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 cookbooks/initial_conditions_continental_rift/doc/initial_composition_lithosphere.prm create mode 100644 cookbooks/initial_conditions_continental_rift/doc/initial_composition_strain.prm create mode 100644 cookbooks/initial_conditions_continental_rift/doc/initial_temperature.prm create mode 100644 cookbooks/initial_conditions_continental_rift/doc/initial_topography.prm diff --git a/cookbooks/initial_conditions_continental_rift/doc/initial_composition_lithosphere.prm b/cookbooks/initial_conditions_continental_rift/doc/initial_composition_lithosphere.prm new file mode 100644 index 00000000000..a34ad95ed99 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/doc/initial_composition_lithosphere.prm @@ -0,0 +1,59 @@ +# Number and names of compositional fields +# The five compositional fields represent: +# 1. The plastic strain that accumualates over time, with the initial plastic strain removed +# 2. The plastic strain that accumulated over time, including the initial plastic strain values +# 3. The upper crust +# 4. The lower crust +# 5. The mantle lithosphere +subsection Compositional fields + set Number of fields = 5 + set Names of fields = noninitial_plastic_strain, plastic_strain, upper, lower, mantle_L +end + +# Initial values of different compositional fields +# The upper crust (20 km thick), lower crust (15 km thick) +# and mantle (85 km thick) are continuous horizontal layers +# of constant thickness, except in a center area. +# In the centre of the domain, the upper crust is thickened to 25 km, +# while the mantle lithosphere is thinned. The transition from this +# perturbed center to the reference thicknesses of the lithospheric +# layers is smoothened using a Gaussian. The combined effect +# is a hotter, weaker centre area that localizes deformation. +# An additional thicker/stronger area is added on the right of the domain +# to represent cratonic lithosphere. The transition in layer thicknesses +# uses a hyperbolic tangent. +# The non initial plastic strain is set +# to 0 and the initial plastic strain is randomized between +# 0.5 and 1.5 in an area around the rift axis. +subsection Initial composition model + set List of model names = lithosphere with rift, rift box initial plastic strain, function + + subsection Lithosphere with rift + # The reference layer thicknesses of the upper crust, lower crust and mantle lithosphere. + set Layer thicknesses = 20e3, 15e3, 85e3 + # How wide the weak zone will be + set Standard deviation of Gaussian rift geometry = 50e3 + # The maximum thinning/thickening of the lithospheric layers + set Amplitude of Gaussian rift geometry = -0.25, 0, 0.17647 + # Where the rift axis should be. In this case in the centre of the domain. + # In 3D simulations, line segments consisting of two coordinates + # should be provided. + set Rift axis line segments = 200e3 + + # The thicknesses of the lithospheric layer within a polygon + set Lithospheric polygon layer thicknesses = 20e3, 15e3 , 115.e3 + # The segments making up the polygon + set Lithospheric polygons = 550e3 > 3000e3 + # The half width of the transition from polygon to reference lithosphere + set Half width of polygon smoothing = 10e3 + end + + subsection Function + set Variable names = x,y + set Function expression = 0; \ + 0; \ + 0; \ + 0; \ + 0 + end +end diff --git a/cookbooks/initial_conditions_continental_rift/doc/initial_composition_strain.prm b/cookbooks/initial_conditions_continental_rift/doc/initial_composition_strain.prm new file mode 100644 index 00000000000..e56717798f2 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/doc/initial_composition_strain.prm @@ -0,0 +1,22 @@ +subsection Initial composition model + set List of model names = lithosphere with rift, rift box initial plastic strain, function + + # Inherited plastic strain + subsection Rift box initial plastic strain + # We focus initial strain around the rift axis + set Rift axis line segments = 200e3 + # The strain values follow a Gaussian distribution around the rift axis + # The maximum magnitude of the strain + set Maximum amplitude of Gaussian noise amplitude distribution = 0.250000 + # The sigma width of the area of strain + set Standard deviation of Gaussian noise amplitude distribution = 50e3 + # The number with which to start of the random number generator + set Random number generator seed = 2 + # Using a hyperbolic tangent centred around this value, + # we smooth out the strain with increasing depth. + set Depth around which Gaussian noise is smoothed out = 50e3 + # The halfwidth of the hyperbolic tangent. + set Halfwidth with which Gaussian noise is smoothed out in depth = 10e3 + end + +end diff --git a/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md b/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md index 8ed3c337dcd..90bd8685f7d 100644 --- a/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md +++ b/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md @@ -84,7 +84,7 @@ strain, we specify a depth around which the amplitude is smoothed to zero with a hyperbolic tangent. ```{figure-md} fig:initial_strain - + The initial plastic strain distribution. ``` diff --git a/cookbooks/initial_conditions_continental_rift/doc/initial_temperature.prm b/cookbooks/initial_conditions_continental_rift/doc/initial_temperature.prm new file mode 100644 index 00000000000..3413cac7c47 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/doc/initial_temperature.prm @@ -0,0 +1,45 @@ +# Temperature boundary conditions +# Top and bottom (fixed) temperatures are consistent with the initial temperature field. +# Because we use a free surface, the height/depth of the surface can change over time, +# meaning that if the initial temperature plugin is asked for the temperature +# at the surface, this temperature could also vary over time. Therefore +# we also use the box plugin and take the minimum of the initial temperature and +# the box plugins, thus maintaining a temperature of 293 K. +subsection Boundary temperature model + set Fixed temperature boundary indicators = bottom, top + set List of model names = initial temperature, box + set List of model operators = add, minimum + subsection Box + set Top temperature = 293 + # Unrealistically high, so that it is always taken from initial temperature plugin + set Bottom temperature = 5000 + end +end + +# Initial temperature field +# The initial temperature consists of a typical continental geotherm +# based on equations Turcotte and Schubert Ch. 4.6. +# Below the lithosphere-asthenosphere boundary (LAB, defined initially by the +# bottom of the mantle lithsphere and the 1623 K isotherm, +# we prescribe an adiabatic temperature increase. +subsection Initial temperature model + set List of model names = adiabatic, lithosphere with rift + set List of model operators = add, replace if valid + subsection Lithosphere with rift + set LAB isotherm temperature = 1573. + set Surface temperature = 293. + end + subsection Adiabatic + # A reference profile of the compositional fields + # where x represents depth + subsection Function + # noninitial_plastic_strain, plastic_strain, upper, lower, mantle_L + set Function expression = 0; \ + 0; \ + if(x<20e3,1,0); \ + if(x>=20e3&x<35e3,1,0); \ + if(x>=35e3&x<120e3,1,0) + end + end + +end diff --git a/cookbooks/initial_conditions_continental_rift/doc/initial_topography.prm b/cookbooks/initial_conditions_continental_rift/doc/initial_topography.prm new file mode 100644 index 00000000000..34ef795c2e9 --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/doc/initial_topography.prm @@ -0,0 +1,19 @@ +# Model geometry (400x200 km, 40 km spacing) +subsection Geometry model + set Model name = box + + subsection Box + set X repetitions = 10 + set Y repetitions = 5 + set X extent = 400e3 + set Y extent = 200e3 + end + + # With respect to the reference lithosphere, + # move the surface of perturbed lithosphere + # to obtain isostasy. + subsection Initial topography model + set Model name = lithosphere with rift + end + +end From dbb32762653adeb36c050c33957c47e0ae27d010 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Mon, 17 Jun 2024 15:02:58 +0200 Subject: [PATCH 33/38] Expand description, add boundary conditions --- .../initial_conditions_continental_rift.md | 128 ++++++++++++------ .../doc/initial_temperature.prm | 5 + .../doc/velocity_boundary_conditions.prm | 28 ++++ 3 files changed, 122 insertions(+), 39 deletions(-) create mode 100644 cookbooks/initial_conditions_continental_rift/doc/velocity_boundary_conditions.prm diff --git a/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md b/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md index 90bd8685f7d..70b45591b9e 100644 --- a/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md +++ b/cookbooks/initial_conditions_continental_rift/doc/initial_conditions_continental_rift.md @@ -1,30 +1,42 @@ -# Initial conditions for continental rifting +# Initial and boundary conditions for continental rifting *This section was contributed by Anne Glerum.* -In order to localize deformation under prescribed far-field -extension, initial weaknesses have to be introduced to the -model setup. Here we discuss plugins that 1) perturb the lithosphere -consisting of upper crust, lower crust and mantle lithosphere -at a user-specified location and 2) add initial plastic -strain is around this same location. This strain represents -inherited weakness for example from prior deformation phases. +Continental rifting is a process that thins the continental +lithosphere and can eventually lead to full break-up of that lithosphere +and seafloor spreading at a mid-ocean ridge {cite}[e.g., ][]`brune:2023`. +We can simulate continental rifting under far-field extensional +forces by prescribing certain velocities or stresses on the lateral +boundaries of our model domain (as in, for example, section +{ref}`sec:cookbooks:continental_extension`). +Here we choose to prescribe outward horizontal velocities on +the lateral boundaries. +In order to localize deformation under this prescribed +extension (and avoid localizing at the model boundaries), +we have to introduce initial weaknesses to the +model setup. The plugins prescribed in this cookbook set up +a lithospheric (upper crust, lower crust and mantle lithosphere) and asthenosphere +composition and temperature structure and then +add weaknesses by 1) smoothly perturbing the lithosphere +at user-specified locations and by 2) adding initial plastic +strain around these same locations. This strain represents +inherited weakness from for example prior deformation phases. To represent other deviations of the reference lithosphere, +such as cratonic lithosphere, additional regions of different lithospheric layer thicknesses -can also be specified. - -The initial temperature plugin prescribes a steady-state -continental geotherm within the lithosphere and an adiabat -below. The temperature field is perturbed in the same way -as the lithosphere compositional structure. - +can be specified. In case the perturbations of the lithosphere in combination with -the free surface induce large velocities initially, an initial -topography plugin approximates the topography resulting from -isostatic equilibrium. +a free surface or another type of mesh deformation induce large initial +velocities, an initial topography plugin approximates the topography resulting from +isostatic equilibrium with respect to the reference (unperturbed) lithosphere. +Apart from prescribing tensional velocities on the lateral boundaries of +the box domain, we use the surface processes software FastScape to +modify the top boundary and a traction boundary condition for the bottom +boundary. This allows for the inclusion of sediment erosion, transport +and deposition, and the automatic balance of mass within the model domain. -## Initial lithosphere compositional fields and temperature +## Initial lithosphere composition and temperature ```{figure-md} fig:setup @@ -32,56 +44,72 @@ isostatic equilibrium. Lithospheric structure with perturbations that represent an incipient rift and a cratonic region. ``` - -The perturbation of the lithospheric layers that represents an -incipient rift follows a Gaussian -curve. We can either thicken or thin the layers, depending on -the sign of the Gaussian amplitude: a negative amplitude thickens +To set up the reference lithospheric structure, we specify the Layer thicknesses +of the upper crust, lower crust and mantle lithosphere within the Lithosphere with rift +subsection (see input-file snippet below). The perturbations of these lithospheric layers - representing an +incipient rift and localizing deformation - follow Gaussian curves. +We can either thicken or thin the layers, depending on +the sign of each Gaussian amplitude specified: a negative amplitude thickens the corresponding layer and vice versa. The width of the perturbation -is determined by the sigma of the Gaussian. The centre of the Gaussian -curve will be the rift centre. The parameters that need to be set are: +is determined by the sigma of the Gaussians. The centre of the Gaussian +curve will be the rift centre and is set with the parameter Rift axis line segments: ```{literalinclude} initial_composition_lithosphere.prm ``` -In addition to a rift centre, other deviations from the reference -lithospheric thicknesses can also be prescribed. In the above snippet, +Note that you can specify multiple segments, both in 2D and in 3D. By changing +the thickness of the layers, we simultaneously change the temperature profile, +and thus the strength distribution, creating weaker lithosphere. + +In addition to an incipient rift, other deviations from the reference +lithospheric thicknesses can also be prescribed (e.g., representing thick, cold cratonic +lithosphere). In the above snippet, these are specified as polygons (multiple polygons are allowed) with their own layer thicknesses. The transition from reference lithosphere to polygon lithosphere is implemented as a hyperbolic tangent with a -centre point and a half-width. +centre point defined by the coordinates of the polygon and a half-width (10 km in this case). ```{literalinclude} initial_temperature.prm ``` + For the initial temperature we combine two plugins: one that prescribes -a continental steady-state geotherm and one that computes an adiabatic -temperature profile. The geotherm implementation is based on Chapter 4.6 +a continental steady-state geotherm (lithosphere with rift) and one that computes an adiabatic +temperature profile (see snippet above). The geotherm implementation is based on Chapter 4.6 of Turcotte and Schubert. For each x-coordinate, it solves a steady-state heat conduction equation taking into account the respective densities, heat productivities and thermal conductivities of the three lithospheric -layers. Below the lithospheric a NaN is returned, such that we can replace -this NaN by an adiabatic temperature profile. Care has to be taken that the -adiabatic surface temperature matches the LAB temperature. +layers and the user-set temperature at the top (Surface temperature) and +bottom of the lithosphere (LAB isotherm temperature). Below the lithosphere a NaN is returned, such that we can replace +this NaN by an adiabatic temperature profile. Care has to be taken to match +the user-specified LAB temperature and the adiabatic temperature at the same +depth by modifying the adiabatic surface temperature. One can choose to prescribe +the LAB temperature up to a certain compensation depth (e.g., the bottom of the +craton), such that the LAB and adiabatic temperatures match everywhere (Fig. {numref}`fig:initial_temperature`). ```{figure-md} fig:initial_temperature The initial temperature distribution. ``` +## Inherited heterogeneity ```{literalinclude} initial_composition_strain.prm ``` To include inherited heterogeneity we also include initial plastic strain -in the rift centre (Fig. {numref}`fig:initial_strain`). +around the rift centre (Fig. {numref}`fig:initial_strain`). This requires a +compositional field called plastic_strain and the plugin rift box initial plastic strain. We generate random strain values between 0 and 1 that are subsequently multiplied with a Gaussian distribution for which we specify the maximum amplitude and sigma. To control the depth extent of the initial -strain, we specify a depth around which the amplitude is smoothed to zero -with a hyperbolic tangent. +strain, we specify a depth around which the amplitude is smoothed out to zero +with a hyperbolic tangent. The initial strain thus produced will be the same +for each run with the same specifications if the same number of MPI processes is used. +The plastic strain can be used to weaken the cohesion and/or internal angle of friction +of the plastic rheology, thus again providing weaknesses that localize deformation. ```{figure-md} fig:initial_strain @@ -92,12 +120,14 @@ with a hyperbolic tangent. ```{literalinclude} initial_topography.prm ``` +## Initial topography + Sometimes the combination of a free surface with lateral variations in the lithospheric thicknesses leads to very high velocities in the first timesteps. To avoid a drunken sailor effect and/or very small timesteps, we can then prescribe initial topography that roughly fulfills isostatic equilibrium (Fig. {numref}`fig:initial_topography`). -The required topography is computed using the reference density, so it neglects -temperature effects on the density. +The required topography is computed using the reference density for each material, +so it neglects temperature effects on the density. ```{figure-md} fig:initial_topography @@ -106,3 +136,23 @@ temperature effects on the density. The initial topography that roughly isostatically balances the rift perturbation and craton region with respect to the reference lithosphere. ``` + +## Boundary conditions + +```{literalinclude} velocity_boundary_conditions.prm +``` +Extension is driven by outward horizontal velocities on the left and +right boundary of the model domain. To compensate for this outflow, +we open the bottom boundary to flow by prescribing a traction. The +prescribed traction is computed as the initial lithostatic pressure +at a user-specified point. We pick this point to lie in the reference +(unperturbed) lithosphere close to the left domain boundary. + +For the top boundary, we pick the mesh deformation plugin fastscape, +which provides an interface to the FastScape landscape evolution model. +This plugin computes changes to the mesh's surface topography based on +river incision, hill slope diffusion, sediment deposition and marine diffusion. +For all the different parameters relating to FastScape, have a look at +section {ref}`sec:cookbooks:fastscape_eroding_box`. We allow the top corner +of the right boundary to move with the surface, but not the left top corner point, +as this is our reference location. diff --git a/cookbooks/initial_conditions_continental_rift/doc/initial_temperature.prm b/cookbooks/initial_conditions_continental_rift/doc/initial_temperature.prm index 3413cac7c47..26b74f5a00d 100644 --- a/cookbooks/initial_conditions_continental_rift/doc/initial_temperature.prm +++ b/cookbooks/initial_conditions_continental_rift/doc/initial_temperature.prm @@ -28,6 +28,11 @@ subsection Initial temperature model subsection Lithosphere with rift set LAB isotherm temperature = 1573. set Surface temperature = 293. + # Whether or not to prescribe the LAB temperature up to a + # certain depth (in the area below LAB) + # or to use adiabat everywhere below the LAB. + set Use temperature compensation depth = true + set Temperature compensation depth = 150e3 end subsection Adiabatic # A reference profile of the compositional fields diff --git a/cookbooks/initial_conditions_continental_rift/doc/velocity_boundary_conditions.prm b/cookbooks/initial_conditions_continental_rift/doc/velocity_boundary_conditions.prm new file mode 100644 index 00000000000..20babcfbe8d --- /dev/null +++ b/cookbooks/initial_conditions_continental_rift/doc/velocity_boundary_conditions.prm @@ -0,0 +1,28 @@ +subsection Boundary velocity model + set Prescribed velocity boundary indicators = left: function, right: function + set Tangential velocity boundary indicators = + subsection Function + set Coordinate system = cartesian + set Variable names = x,y,t + set Function constants = mm=0.001, yr=1, Z=300e3, X=700e3, outflow=10 + set Function expression = if(x Date: Tue, 18 Jun 2024 10:51:16 +0200 Subject: [PATCH 34/38] Add FS and traction BC --- ...ns_continental_rift_initial_topography.prm | 74 +++++++++++++++---- 1 file changed, 59 insertions(+), 15 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm index 5e3f14b6e9d..a29240a61cb 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm @@ -1,18 +1,19 @@ #### This is an adaptation of the Continental Extension Cookbook -#### using new plugins for the initial composition, temperature -#### topography and strain of an incipient continental rift system. +#### using new plugins for the initial composition, temperature, +#### topography and initial strain of an incipient continental rift system. +#### Additionally, we use FastScape and traction boundary condition. #### Global parameters set Additional shared libraries = $ASPECT_SOURCE_DIR/cookbooks/initial_conditions_continental_rift/libinitial_conditions_continental_rift.debug.so set Dimension = 2 set Start time = 0 -set End time = 0 #5e6 +set End time = 5e6 set Use years in output instead of seconds = true set Nonlinear solver scheme = single Advection, iterated Stokes set Nonlinear solver tolerance = 1e-5 set Max nonlinear iterations = 2 set CFL number = 0.5 -set Maximum time step = 20e3 +set Maximum time step = 5000 set Output directory = output-initial_conditions_continental_rift_initial_topography_with_craton set Pressure normalization = no set Adiabatic surface temperature = 1573 @@ -70,22 +71,65 @@ subsection Solver parameters end end -# Advecting the free surface using a normal, rather than vertical, -# projection. To reduce mesh instabilities and associated solver -# issues when deformation becomes large, diffusion is applied to -# the free surface at each time step. +# Use FastScape to deform the mesh. subsection Mesh deformation - set Mesh deformation boundary indicators = top: free surface, top: diffusion + set Additional tangential mesh velocity boundary indicators = right + set Mesh deformation boundary indicators = top: fastscape subsection Free surface - set Surface velocity projection = normal + set Free surface stabilization theta = 1 end + + subsection Fastscape + set Vertical exaggeration = -1 + set Maximum timestep length = 500 + set Number of fastscape timesteps per aspect timestep = 10 + set Maximum surface refinement level = 4 + set Surface refinement difference = 0 + set Additional fastscape refinement = 0 + set Use ghost nodes = true + set Y extent in 2d = 25e3 + set Uplift and advect with fastscape = true + + subsection Boundary conditions + set Front = 1 + set Right = 1 + set Back = 1 + set Left = 1 + end + + subsection Erosional parameters + set Drainage area exponent = 0.4 #m + set Slope exponent = 1 #n + set Multi-direction slope exponent = -1 #p + + set Bedrock diffusivity = 5e-3 #kd + set Bedrock river incision rate = 1e-5 #kf + set Bedrock deposition coefficient = 1 #G - subsection Diffusion - # Diffusivity term. Increasing this value will result - # in a smoother free surface and lower topography - # amplitudes. - set Hillslope transport coefficient = 1.e-8 + set Sediment diffusivity = -1 + set Sediment river incision rate = -1 + set Sediment deposition coefficient = 1 #G + end + + set Use marine component = true + set Sediment rain rates = 1e-4 # m/yr + set Sediment rain intervals = + set Use stratigraphy = false + + # No difference between sand and silt + subsection Marine parameters + set Sea level = -200 + set Sand porosity = 0. + set Silt porosity = 0. + set Sand e-folding depth = 3000 # m + set Silt e-folding depth = 3000 # m + + set Sand-silt ratio = 0.5 + set Depth averaging thickness = 1e3 # m + set Sand transport coefficient = 150 # m2/yr + set Silt transport coefficient = 150 # m2/yr + end end end From d16bcaee9c7dfea07a14abf0bdba6e48f56b12ae Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 20 Jun 2024 09:32:21 +0200 Subject: [PATCH 35/38] Rm screen output --- .../rift_box_initial_plastic_strain.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc index 4749c0e9752..59624a6b47f 100644 --- a/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc +++ b/cookbooks/initial_conditions_continental_rift/rift_box_initial_plastic_strain.cc @@ -247,10 +247,6 @@ namespace aspect // to cover 10 km at the same resolution. Round up the number of cells. grid_intervals[dim-1] += static_cast(std::ceil(maximum_initial_topography / (extents[dim-1] / grid_intervals[dim-1]))); - this->get_pcout() << "Max initial topo: " << maximum_initial_topography << std::endl; - this->get_pcout() << "Grid intervals X: " << grid_intervals[0] << std::endl; - this->get_pcout() << "Grid intervals Y: " << grid_intervals[dim-1] << std::endl; - prm.enter_subsection("Initial composition model"); { prm.enter_subsection("Rift box initial plastic strain"); From 70f1e8f818e59e9fc50dbeb57c564e96ba827687 Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 20 Jun 2024 09:33:54 +0200 Subject: [PATCH 36/38] Use FastScape instead of free surface --- ...ns_continental_rift_initial_topography.prm | 3 +- ...continental_rift_no_initial_topography.prm | 65 +++++++++++++++---- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm index a29240a61cb..018aae8dde1 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm @@ -114,8 +114,7 @@ subsection Mesh deformation set Use marine component = true set Sediment rain rates = 1e-4 # m/yr - set Sediment rain intervals = - set Use stratigraphy = false + set Sediment rain time intervals = # No difference between sand and silt subsection Marine parameters diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm index 6bae84f1979..33007a01a4f 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_no_initial_topography.prm @@ -61,22 +61,65 @@ subsection Solver parameters end end -# Advecting the free surface using a normal, rather than vertical, -# projection. To reduce mesh instabilities and associated solver -# issues when deformation becomes large, diffusion is applied to -# the free surface at each time step. + +# Use FastScape to deform the mesh. subsection Mesh deformation - set Mesh deformation boundary indicators = top: free surface, top: diffusion + set Additional tangential mesh velocity boundary indicators = right + set Mesh deformation boundary indicators = top: fastscape subsection Free surface - set Surface velocity projection = normal + set Free surface stabilization theta = 1 end + + subsection Fastscape + set Vertical exaggeration = -1 + set Maximum timestep length = 500 + set Number of fastscape timesteps per aspect timestep = 10 + set Maximum surface refinement level = 4 + set Surface refinement difference = 0 + set Additional fastscape refinement = 0 + set Use ghost nodes = true + set Y extent in 2d = 25e3 + set Uplift and advect with fastscape = true + + subsection Boundary conditions + set Front = 1 + set Right = 1 + set Back = 1 + set Left = 1 + end + + subsection Erosional parameters + set Drainage area exponent = 0.4 #m + set Slope exponent = 1 #n + set Multi-direction slope exponent = -1 #p + + set Bedrock diffusivity = 5e-3 #kd + set Bedrock river incision rate = 1e-5 #kf + set Bedrock deposition coefficient = 1 #G - subsection Diffusion - # Diffusivity term. Increasing this value will result - # in a smoother free surface and lower topography - # amplitudes. - set Hillslope transport coefficient = 1.e-8 + set Sediment diffusivity = -1 + set Sediment river incision rate = -1 + set Sediment deposition coefficient = 1 #G + end + + set Use marine component = true + set Sediment rain rates = 1e-4 # m/yr + set Sediment rain time intervals = + + # No difference between sand and silt + subsection Marine parameters + set Sea level = -200 + set Sand porosity = 0. + set Silt porosity = 0. + set Sand e-folding depth = 3000 # m + set Silt e-folding depth = 3000 # m + + set Sand-silt ratio = 0.5 + set Depth averaging thickness = 1e3 # m + set Sand transport coefficient = 150 # m2/yr + set Silt transport coefficient = 150 # m2/yr + end end end From 8ab8bf18df7d1c125d9baf4ec03ae1fc655b22fa Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Thu, 4 Jul 2024 17:13:35 +0200 Subject: [PATCH 37/38] Use traction bottom BC --- .../doc/velocity_boundary_conditions.prm | 1 - ...conditions_continental_rift_initial_topography.prm | 11 +++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cookbooks/initial_conditions_continental_rift/doc/velocity_boundary_conditions.prm b/cookbooks/initial_conditions_continental_rift/doc/velocity_boundary_conditions.prm index 20babcfbe8d..826efdc814f 100644 --- a/cookbooks/initial_conditions_continental_rift/doc/velocity_boundary_conditions.prm +++ b/cookbooks/initial_conditions_continental_rift/doc/velocity_boundary_conditions.prm @@ -20,7 +20,6 @@ end subsection Mesh deformation set Additional tangential mesh velocity boundary indicators = right set Mesh deformation boundary indicators = top: fastscape - set Surface stabilization theta = 1.0 subsection Fastscape ... diff --git a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm index 018aae8dde1..44801740206 100644 --- a/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm +++ b/cookbooks/initial_conditions_continental_rift/initial_conditions_continental_rift_initial_topography.prm @@ -138,12 +138,19 @@ end # Velocity components parallel to the base (x-velocity) and side walls (y-velocity) # are unconstrained (i.e. 'free'). subsection Boundary velocity model - set Prescribed velocity boundary indicators = left x: function, right x:function, bottom y:function + set Prescribed velocity boundary indicators = left: function, right:function subsection Function set Variable names = x,y set Function constants = v=0.0025, w=200.e3, d=100.e3 - set Function expression = if (x < w/2 , -v, v) ; v*2*d/w + set Function expression = if (x < w/2 , -v, v) ; 0 + end +end + +subsection Boundary traction model + set Prescribed traction boundary indicators = bottom: initial lithostatic pressure + subsection Initial lithostatic pressure + set Representative point = 10000,0 end end From cb4758d6a237429dfe07c1001a882170ba5f09df Mon Sep 17 00:00:00 2001 From: anne-glerum Date: Fri, 4 Oct 2024 16:49:17 +0200 Subject: [PATCH 38/38] Fix typo --- .../lithosphere_rift_IT_2.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc index 7c2a4c6c866..38cf202c95d 100644 --- a/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc +++ b/cookbooks/initial_conditions_continental_rift/lithosphere_rift_IT_2.cc @@ -273,7 +273,7 @@ namespace aspect // To obtain the radioactive heating rate in W/kg, we divide the volumetric heating rate by density AssertThrow(heat_productivities.size() == 3 && densities.size() == 3 && conductivities.size() == 3, - ExcMessage("The entries for density, conductivity and heat production do not match with the expected number of layers (3).")) + ExcMessage("The entries for density, conductivity and heat production do not match with the expected number of layers (3).")); for (unsigned int i = 0; i<3; ++i) heat_productivities[i] /= densities[i];