From 0f2d51690fb344e5ccd7e06490fbe52e6e0fba12 Mon Sep 17 00:00:00 2001 From: Menno Fraters Date: Wed, 21 Aug 2024 08:47:34 +0200 Subject: [PATCH 1/3] Update world builder to version v1.0.0 --- contrib/world_builder/CHANGELOG.md | 13 +- contrib/world_builder/CITATION | 50 +- contrib/world_builder/CMakeLists.txt | 19 +- contrib/world_builder/README.md | 8 +- contrib/world_builder/VERSION | 2 +- contrib/world_builder/appveyor.yml | 2 +- .../2d_cartesian_subduction_rift.wb | 2 +- .../2d_cartesian_subduction_rift_adiabatic.wb | 2 +- ...artesian_subduction_rift_sepran_example.wb | 2 +- .../2d_spherical_subduction_rift.wb | 2 +- .../2d_spherical_subduction_rift_adiabatic.wb | 2 +- .../3d_cartesian_curved_subduction.wb | 2 +- .../3d_cartesian_double_subduction.wb | 2 +- .../3d_cartesian_rift/3d_cartesian_rift.wb | 2 +- .../3d_cartesian_transform_fault.wb | 2 +- .../3d_spherical_subduction.wb | 2 +- contrib/world_builder/cookbooks/index.md | 3 +- .../simple_subduction_2d_cartesian.wb | 35 +- .../simple_subduction_2d_chunk.wb | 53 +- contrib/world_builder/doc/JOSS/1.0/paper.bib | 207 ++ contrib/world_builder/doc/JOSS/1.0/paper.md | 141 + .../doc/JOSS/1.0/workflow_diagram.png | Bin 0 -> 268473 bytes contrib/world_builder/doc/doxygen_config.dox | 2 +- .../world_builder/doc/generate_decl_schema.wb | 2 +- .../gwb_input_files/BST_02_minimal_box.wb | 2 +- .../BST_04_overriding_plate.wb | 2 +- .../gwb_input_files/BST_05_limit_depth.wb | 2 +- .../BST_06_oceanic_plate_temperature.wb | 2 +- .../BST_07_subducting_plate_oceanic_part.wb | 2 +- .../BST_08_passive_margin_variable_depth.wb | 2 +- .../BST_09_adding_mantle_layer.wb | 2 +- .../BST_10_adding_basic_subducting_plate.wb | 2 +- .../BST_11_dip_change_in_segment.wb | 2 +- .../gwb_input_files/BST_12_sections.wb_bak | 2 +- .../BST_12_subducting_plate_temperatures.wb | 2 +- ...BST_13_subducting_slab_adding_a_segment.wb | 2 +- .../BST_14_different_models_in_segments.wb | 2 +- .../BST_15_different_segments_in_sections.wb | 2 +- .../gwb_input_files/BST_16_mass_conserving.wb | 4 +- .../_static/gwb_input_files/BST_17_plume.wb | 4 +- .../gwb_input_files/BST_18_2D_models.wb | 4 +- .../BST_19_spherical_models.wb | 4 +- contrib/world_builder/doc/sphinx/conf.py | 4 +- .../building_documentation.md | 6 +- .../documentation_style_guide.md | 12 +- .../important_syntax.md | 16 +- .../03_optional_coordinate_system.md | 6 +- .../06_oceanic_plate_temperature.md | 4 +- .../07_subducting_plate_oceanic_part.md | 4 +- .../08_passive_margin_variable_depth.md | 10 +- .../09_optional_adding_mantle_layer.md | 10 +- .../10_adding_basic_subducting_plate.md | 16 +- .../11_dip_change_in_segment.md | 8 +- .../12_subducting_plate_temperatures.md | 10 +- .../13_subducting_slab_adding_a_segment.md | 8 +- .../14_different_models_in_segments.md | 8 +- .../15_different_segments_in_sections.md | 6 +- .../16_mass_conserving.md | 12 +- .../basic_starter_tutorial/17_plume.md | 6 +- .../basic_starter_tutorial/18_2D_models.md | 12 +- .../19_spherical_models.md | 6 +- .../installation/installing_prerequisites.md | 17 +- .../parameter_documentation/features/index.md | 2 +- .../world_builder_declarations.schema.json | 1122 +++++++- .../doc/world_builder_declarations_closed.md | 2160 ++++++++++++--- .../doc/world_builder_declarations_open.md | 2436 ++++++++++++++--- .../random_uniform_distribution_deflected.h | 4 +- .../random_uniform_distribution_deflected.h | 1 + .../random_uniform_distribution_deflected.h | 1 + .../composition/tian2019_water_content.h | 149 + .../random_uniform_distribution_deflected.h | 3 +- .../random_uniform_distribution_deflected.h | 112 + .../composition/tian2019_water_content.h | 147 + .../random_uniform_distribution_deflected.h | 1 + .../include/world_builder/utilities.h | 8 + .../random_uniform_distribution_deflected.cc | 88 +- .../temperature/linear.cc | 4 +- .../random_uniform_distribution_deflected.cc | 86 +- .../random_uniform_distribution_deflected.cc | 87 +- .../composition/tian2019_water_content.cc | 206 ++ .../random_uniform_distribution_deflected.cc | 88 +- .../temperature/linear.cc | 4 +- .../random_uniform_distribution_deflected.cc | 282 ++ .../features/subducting_plate.cc | 2 +- .../composition/tian2019_water_content.cc | 198 ++ .../random_uniform_distribution_deflected.cc | 86 +- .../temperature/mass_conserving.cc | 43 +- .../temperature/plate_model.cc | 2 +- .../source/world_builder/utilities.cc | 45 +- .../source/world_builder/world.cc | 8 +- .../tests/data/continental_plate.wb | 2 +- .../data/fault_constant_angles_cartesian.wb | 2 +- .../data/fault_constant_angles_cartesian_2.wb | 2 +- ...lt_constant_angles_cartesian_force_temp.wb | 2 +- .../data/fault_different_angles_cartesian.wb | 2 +- ...interpolation_monotone_spline_cartesian.wb | 2 +- .../tests/data/mantle_layer_cartesian.wb | 2 +- .../tests/data/oceanic_plate_cartesian.wb | 2 +- .../tests/data/oceanic_plate_spherical.wb | 2 +- .../world_builder/tests/data/simple_wb1.json | 2 +- .../world_builder/tests/data/simple_wb2.json | 2 +- .../world_builder/tests/data/simple_wb3.json | 2 +- .../spherical_depth_method_begin_segment.wb | 2 +- .../spherical_depth_method_starting_point.wb | 2 +- ...ducting_plate_composition_smooth_by_tag.wb | 2 +- ...cting_plate_composition_smooth_filtered.wb | 2 +- ...ducting_plate_constant_angles_cartesian.wb | 2 +- ...ucting_plate_different_angles_cartesian.wb | 2 +- ...ting_plate_different_angles_cartesian_2.wb | 2 +- ...ucting_plate_different_angles_spherical.wb | 2 +- .../gwb-dat/2d_cartesian_plume_points.wb | 2 +- .../tests/gwb-dat/app_continental_plate_2d.wb | 2 +- .../tests/gwb-dat/app_continental_plate_3d.wb | 2 +- .../app_continental_plate_cartesian.wb | 2 +- .../gwb-dat/app_oceanic_plate_cartesian.wb | 2 +- .../gwb-dat/app_oceanic_plate_constant_age.wb | 2 +- .../tests/gwb-dat/app_operations_add.wb | 2 +- .../tests/gwb-dat/app_operations_replace.wb | 2 +- .../tests/gwb-dat/app_operations_subtract.wb | 2 +- .../tests/gwb-dat/app_spherical_2d.wb | 2 +- .../tests/gwb-dat/app_spherical_3d.wb | 2 +- .../world_builder/tests/gwb-dat/app_wb1.wb | 2 +- .../world_builder/tests/gwb-dat/app_wb2.wb | 2 +- .../world_builder/tests/gwb-dat/app_wb3.wb | 2 +- .../cartesian_fault_x_and_y_direction.wb | 2 +- .../tests/gwb-dat/cartesian_multiridge.wb | 4 +- .../tests/gwb-dat/cartesian_no_ridge_drift.wb | 4 +- .../gwb-dat/cartesian_slab_linear_adiabat.wb | 2 +- .../gwb-dat/cartesian_slab_mass_conserving.wb | 5 +- .../gwb-dat/cartesian_slab_spline_complex.wb | 2 +- .../cartesian_slab_x_and_y_direction.wb | 2 +- .../cartesian_young_slab_mass_conserving.wb | 4 +- .../gwb-dat/chunk_slab_mass_conserving.wb | 4 +- .../gwb-dat/continental_min_max_surface.wb | 2 +- .../continental_min_max_surface_spherical.wb | 2 +- .../depth_method_slab_begin_at_end_segment.wb | 2 +- .../tests/gwb-dat/fault_complex_spherical.wb | 2 +- .../gwb-dat/geodynamic_world_builder_mar.json | 2 +- .../tests/gwb-dat/half_space_plate_model.wb | 2 +- .../gwb-dat/half_space_variable_spreading.wb | 2 +- .../gwb-dat/mantle_layer_min_max_surface.wb | 2 +- .../mantle_layer_min_max_surface_spherical.wb | 2 +- ...erving_slab_temperature_plate_model_old.wb | 5 +- ...ving_slab_temperature_plate_model_young.wb | 5 +- ...mass_conserving_slab_temperature_spline.wb | 5 +- ...conserving_slab_with_variable_spreading.wb | 5 +- .../tests/gwb-dat/oceanic_min_max_surface.wb | 2 +- .../oceanic_min_max_surface_spherical.wb | 2 +- .../gwb-dat/plate_model_variable_spreading.wb | 2 +- .../tests/gwb-dat/plume_gaussian.wb | 2 +- .../tests/gwb-dat/plume_gaussian_spherical.wb | 2 +- ...istribution_deflected_asrotation_seed1.dat | 14 + ...distribution_deflected_asrotation_seed1.wb | 80 + .../screen-output.log | 7 + ...ribution_deflected_asrotation_seed1000.dat | 14 + ...tribution_deflected_asrotation_seed1000.wb | 80 + .../screen-output.log | 7 + ...dom_uniform_texture_all_features_seed1.dat | 20 - ...ndom_uniform_texture_all_features_seed1.wb | 54 - .../screen-output.log | 13 - ..._uniform_texture_all_features_seed1000.dat | 20 - ...m_uniform_texture_all_features_seed1000.wb | 54 - .../screen-output.log | 13 - .../tests/gwb-dat/slab_complex_spherical.wb | 2 +- .../gwb-dat/slab_interpolation_180pm_CMS.wb | 2 +- .../gwb-dat/slab_interpolation_simple_CMS.wb | 2 +- .../slab_interpolation_simple_curved_CMS.wb | 2 +- .../slab_interpolation_simple_curved_none.wb | 2 +- .../gwb-dat/slab_interpolation_simple_none.wb | 2 +- .../slab_temperature_trench_advance.dat | 18 + .../slab_temperature_trench_advance.wb | 163 ++ .../screen-output.log | 13 + .../slab_temperature_trench_advance_1.dat | 18 + .../slab_temperature_trench_advance_1.wb | 163 ++ .../screen-output.log | 13 + .../slab_temperature_trench_retreat.dat | 18 + .../slab_temperature_trench_retreat.wb | 163 ++ .../screen-output.log | 13 + .../slab_temperature_trench_retreat_1.dat | 18 + .../slab_temperature_trench_retreat_1.wb | 163 ++ .../screen-output.log | 13 + .../slab_temperature_trench_static.dat | 18 + .../gwb-dat/slab_temperature_trench_static.wb | 163 ++ .../screen-output.log | 13 + .../tests/gwb-dat/smooth_composition_fault.wb | 2 +- ...herical_fault_interpolation_simple_none.wb | 2 +- .../spherical_half_space_model_ridge.wb | 2 +- ...ical_mc_slab_and_half_space_plate_model.wb | 4 +- .../spherical_plate_cooling_model_ridge.wb | 2 +- .../gwb-dat/spherical_ridge_distance_check.wb | 2 +- .../tests/gwb-dat/spherical_slab_A1.wb | 2 +- .../tests/gwb-dat/spherical_slab_A2.wb | 2 +- ...spherical_slab_interpolation_simple_CMS.wb | 2 +- ...pherical_slab_interpolation_simple_none.wb | 2 +- ...erical_slab_interpolation_simple_subdiv.wb | 2 +- .../gwb-dat/spherical_slab_plate_model.wb | 2 +- .../gwb-dat/spherical_variable_spreading.wb | 2 +- .../testing_continent_no_coordinates.wb | 2 +- .../gwb-dat/testing_fault_no_coordinates.wb | 2 +- .../testing_mantle_layer_no_coordinates.wb | 2 +- .../gwb-dat/testing_oceanic_no_coordinates.wb | 2 +- .../testing_subducting_no_coordinates.wb | 2 +- .../water_content_subducting_plate.dat | 29 + .../gwb-dat/water_content_subducting_plate.wb | 55 + .../screen-output.log | 24 + .../tests/gwb-grid/2d_cartesian_plume.wb | 2 +- .../tests/gwb-grid/3d_annulus_plume.wb | 2 +- .../world_builder/tests/gwb-grid/3d_plume.wb | 2 +- .../tests/gwb-grid/3d_plume_tip.wb | 2 +- .../tests/gwb-grid/3d_sphere_plume.wb | 2 +- .../tests/gwb-grid/3d_spherical_plume.wb | 2 +- .../tests/gwb-grid/composition_operations.wb | 2 +- .../continental_plate_composition_random.wb | 2 +- contrib/world_builder/tests/gwb-grid/fault.wb | 2 +- .../tests/gwb-grid/fault_edge_limits.wb | 2 +- .../tests/gwb-grid/spherical_grid_fault.json | 2 +- .../subducting_plate_composition_smooth.wb | 2 +- .../gwb-grid/subducting_plate_manual3.wb | 2 +- .../tests/python/run_python_tests.cmake | 4 +- ...culate_effective_trench_and_plate_ages.txt | 8 + .../unit_tests/unit_test_world_builder.cc | 2 +- .../tests/unit_tests/utilities.cc | 96 + 222 files changed, 8605 insertions(+), 1337 deletions(-) create mode 100644 contrib/world_builder/doc/JOSS/1.0/paper.bib create mode 100644 contrib/world_builder/doc/JOSS/1.0/paper.md create mode 100644 contrib/world_builder/doc/JOSS/1.0/workflow_diagram.png create mode 100644 contrib/world_builder/include/world_builder/features/oceanic_plate_models/composition/tian2019_water_content.h create mode 100644 contrib/world_builder/include/world_builder/features/plume_models/grains/random_uniform_distribution_deflected.h create mode 100644 contrib/world_builder/include/world_builder/features/subducting_plate_models/composition/tian2019_water_content.h create mode 100644 contrib/world_builder/source/world_builder/features/oceanic_plate_models/composition/tian2019_water_content.cc create mode 100644 contrib/world_builder/source/world_builder/features/plume_models/grains/random_uniform_distribution_deflected.cc create mode 100644 contrib/world_builder/source/world_builder/features/subducting_plate_models/composition/tian2019_water_content.cc create mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1.dat create mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1.wb create mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1/screen-output.log create mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000.dat create mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000.wb create mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000/screen-output.log delete mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1.dat delete mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1.wb delete mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1/screen-output.log delete mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000.dat delete mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000.wb delete mode 100644 contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000/screen-output.log create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance.dat create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance.wb create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance/screen-output.log create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1.dat create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1.wb create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1/screen-output.log create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat.dat create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat.wb create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat/screen-output.log create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1.dat create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1.wb create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1/screen-output.log create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static.dat create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static.wb create mode 100644 contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static/screen-output.log create mode 100644 contrib/world_builder/tests/gwb-dat/water_content_subducting_plate.dat create mode 100644 contrib/world_builder/tests/gwb-dat/water_content_subducting_plate.wb create mode 100644 contrib/world_builder/tests/gwb-dat/water_content_subducting_plate/screen-output.log create mode 100644 contrib/world_builder/tests/unit_tests/approval_tests/approved/unit_test_world_builder.WorldBuilder_Utilities_function__calculate_effective_trench_and_plate_ages.txt create mode 100644 contrib/world_builder/tests/unit_tests/utilities.cc diff --git a/contrib/world_builder/CHANGELOG.md b/contrib/world_builder/CHANGELOG.md index 78373f4ce14..1d39fa64517 100644 --- a/contrib/world_builder/CHANGELOG.md +++ b/contrib/world_builder/CHANGELOG.md @@ -9,6 +9,17 @@ Add new entries a the bottom of the current list in the subheading. Item format: This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.0] +### Added +- Added the ability to calculate the water content within the oceanic plate feature and the subducting plate feature. The implementation samples the temperature within the feature, calculates a lithostatic pressure, and determines the water content using parameterized phase diagrams for 4 different lithologies: sediment, mid ocean ridge basalt (MORB), gabbro, and peridotite from [Tian et al., 2019](https://doi.org/10.1029/2019GC008488). \[Daniel Douglas; 2024-08-20; [#661](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/661)\] +- Added a `random uniform distribution deflected` grains model for all features that allows an initial texture computed from a random uniform distribution of rotation matrices applied to a given orientation specified as a set of Euler angles or a rotation matrix. \[Yijun Wang; 2024-06-06; [#713](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/713)\] +### Changed +- In the "mass conserving" model, change the name of the entry "plate velocity" to "spreading velocity" \[Haoyuan Li; 2024-03-11; [#694](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/694)\] +- The Windows MinGW/CYGWIN install options are no longer supported. You are recommended to use Linux subsystems for Windows or the visual studio compiler instead on Windows. \[Menno Fraters; 2024-08-01; [#743](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/743), [#744](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/744)\] + +### Fixed + + ## [0.6.0] ### Added - Implemented the framework that will allow the mass conserving temperature model to account for the the movement of a spreading center through time. \[Daniel Douglas; Haoyuan Li; 2024-02-29; [#654](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/654)\] @@ -50,7 +61,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - A new input parameter and associated functions which define the maximum depth of a model. This allows the world builder to create a complete picture of the world. \[Menno Fraters; 2021-11-08; [#367](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/367) and [#331](https://github.com/GeodynamicWorldBuilder/WorldBuilder/issues/331)\] - A one of type which can create a JSON schema entry where one of several types can be chosen. \[Menno Fraters; 2022-03-26; [#396](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/396)\] - A value at points type which can read in an array containing a value and a list of points from the input. \[Menno Fraters; 2022-03-26; [#396](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/396)\] -- A surface object which can take an array of value at points and create an interpolation through delaunay triangulation (with the delaunator library which was added) and a KD-Tree and barycentric linear interplation. \[Menno Fraters, KD-Tree with help of Oliver Kreylos; 2022-03-26; [#396](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/396)\] +- A surface object which can take an array of value at points and create an interpolation through delaunay triangulation (with the delaunator library which was added) and a KD-Tree and barycentric linear interpolation. \[Menno Fraters, KD-Tree with help of Oliver Kreylos; 2022-03-26; [#396](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/396)\] - The option to make min and max depth into variable surfaces for all area features (continental plate, oceanic plate and mantle layer) and their temperature, composition and grain plugins. \[Menno Fraters; 2022-03-26; [#366](https://github.com/GeodynamicWorldBuilder/WorldBuilder/issues/366) and [#396](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/396)\] - The option to the WordBuilderApp to input 3D spherical coordinates \[Menno Fraters; 2022-03-26; [#396](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/396)\] - An equal operator (operator==) for the point class, which compares two points with an espilon. \[Menno Fraters; 2022-03-26; [#396](https://github.com/GeodynamicWorldBuilder/WorldBuilder/pull/396)\] diff --git a/contrib/world_builder/CITATION b/contrib/world_builder/CITATION index dd296051992..53080db61d8 100644 --- a/contrib/world_builder/CITATION +++ b/contrib/world_builder/CITATION @@ -1,3 +1,15 @@ + +@article{GWB_2024_JOSS, +title = {The Geodynamic World Builder: A planetary structure creator for the geosciences}, +author = {Fraters, M. and Billen, M., and Gassmöller, R. and Saxena, A. and Heister, T. and Li, H., and Douglas, D., and Dannberg J., and Bangerth W. and Wang, Y.}, +doi = {10.21105/joss.06671}, +url = {https://doi.org/10.21105/joss.06671}, +year = {2024}, +publisher = {The Open Journal}, +pages = {6671}, +journal = {Journal of Open Source Software} +} + @Article{se-10-1785-2019, AUTHOR = {Fraters, M. and Thieulot, C. and van den Berg, A. and Spakman, W.}, TITLE = {The Geodynamic World Builder: a solution for complex initial conditions in numerical modeling}, @@ -10,14 +22,24 @@ URL = {https://se.copernicus.org/articles/10/1785/2019/}, DOI = {10.5194/se-10-1785-2019} } -@misc{gwb-doi-v0.4.0, - title = {{The Geodynamic World Builder} v0.4.0 [software]}, +@misc{gwb-doi-v1.0.0, + title = {{The Geodynamic World Builder} v1.0.0 [software]}, author = {Menno Fraters and others}, - month = jun, - year = 2021, - DOI = {10.5281/zenodo.5014808}, - URL = {https://doi.org/10.5281/zenodo.5014808}, + month = aug, + year = 2024, + DOI = {10.5281/zenodo.13352667}, + URL = {https://doi.org/10.5281/zenodo.13352667}, +} + +@misc{gwb-doi-v0.6.0, + title = {{The Geodynamic World Builder} v0.6.0 [software]}, + author = {Menno Fraters and + others}, + month = mar, + year = 2024, + DOI = {10.5281/zenodo.10794862}, + URL = {https://doi.org/10.5281/zenodo.10794862}, } @misc{gwb-doi-v0.5.0, @@ -30,14 +52,12 @@ DOI = {10.5194/se-10-1785-2019} URL = {https://doi.org/10.5281/zenodo.7998525}, } -@misc{gwb-doi-v0.6.0, - title = {{The Geodynamic World Builder} v0.6.0 [software]}, +@misc{gwb-doi-v0.4.0, + title = {{The Geodynamic World Builder} v0.4.0 [software]}, author = {Menno Fraters and others}, - month = mar, - year = 2024, - DOI = {10.5281/zenodo.10794862}, - URL = {https://doi.org/10.5281/zenodo.10794862}, -} - - + month = jun, + year = 2021, + DOI = {10.5281/zenodo.5014808}, + URL = {https://doi.org/10.5281/zenodo.5014808}, +} \ No newline at end of file diff --git a/contrib/world_builder/CMakeLists.txt b/contrib/world_builder/CMakeLists.txt index 71bedeaac47..25a57c1a4fc 100644 --- a/contrib/world_builder/CMakeLists.txt +++ b/contrib/world_builder/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.13.4) +cmake_minimum_required(VERSION 2.8.12) project(WorldBuilder C CXX) @@ -107,7 +107,7 @@ else() endif() if(USE_MPI) - message(STATUS "Using MPI.") + message(STATUS "Using MPI found in: ${MPI_INCLUDE_PATH}") include_directories(${MPI_INCLUDE_PATH}) else() message(STATUS "Not using MPI.") @@ -371,7 +371,7 @@ if (NOT MSVC AND NOT APPLE) # cmake vesrion 3.12.0 introduces COMPILE_LANGUAGE:FORTRAN, otherwise this would be >=2.8.12 if(NOT ${CMAKE_VERSION} VERSION_LESS "3.9.0") SET(WB_COMPILER_OPTIONS_PRIVATE -pedantic -Wall -Wextra - $<$:-Wmost -Wconversion -Wunreachable-code -Wuninitialized -Wmissing-braces -Wunused-parameter -Wold-style-cast -Wshadow -Wfloat-equal -Wpointer-arith -Wwrite-strings + $<$:-Wmost -Wunreachable-code -Wuninitialized -Wmissing-braces -Wunused-parameter -Wold-style-cast -Wshadow -Wfloat-equal -Wpointer-arith -Wwrite-strings -Wsynth -Wsign-compare -Woverloaded-virtual -Wliteral-range -Wparentheses -Wunused-local-typedefs -Wcast-qual -fstrict-aliasing -Werror=uninitialized -Wundef -Wcast-align -Wmissing-declarations -Wredundant-decls -Wdiv-by-zero -Wdisabled-optimization -Wswitch-default -Wunused>) @@ -380,7 +380,7 @@ if (NOT MSVC AND NOT APPLE) endif () else() - SET(WB_COMPILER_OPTIONS_PRIVATE "-pedantic -Wall -Wextra -Wmost -Wconversion -Wunreachable-code -Wuninitialized -Wmissing-braces -Wunused-parameter -Wold-style-cast -Wshadow -Wfloat-equal -Wpointer-arith -Wwrite-strings -Wsynth -Wsign-compare -Woverloaded-virtual -Wliteral-range -Wparentheses -Wunused-local-typedefs -Wcast-qual -fstrict-aliasing -Werror=uninitialized -Wundef -Wcast-align -Wmissing-declarations -Wredundant-decls -Wdiv-by-zero -Wdisabled-optimization -Wswitch-default -Wunused") + SET(WB_COMPILER_OPTIONS_PRIVATE "-pedantic -Wall -Wextra -Wmost -Wunreachable-code -Wuninitialized -Wmissing-braces -Wunused-parameter -Wold-style-cast -Wshadow -Wfloat-equal -Wpointer-arith -Wwrite-strings -Wsynth -Wsign-compare -Woverloaded-virtual -Wliteral-range -Wparentheses -Wunused-local-typedefs -Wcast-qual -fstrict-aliasing -Werror=uninitialized -Wundef -Wcast-align -Wmissing-declarations -Wredundant-decls -Wdiv-by-zero -Wdisabled-optimization -Wswitch-default -Wunused") if (${FORCE_COLORED_OUTPUT}) SET(WB_COMPILER_OPTIONS_PRIVATE "-fcolor-diagnostics ${WB_COMPILER_OPTIONS_PRIVATE}") @@ -396,15 +396,16 @@ if (NOT MSVC AND NOT APPLE) # Preventing issues with older cmake compilers (<3.7) which do not support VERSION_GREATER_EQUAL # cmake vesrion 3.12.0 introduces COMPILE_LANGUAGE:FORTRAN, otherwise this would be >=2.8.12 + # -Warith-conversion was added in gcc 10, add back in when the minimum becomes gcc 10. if(NOT ${CMAKE_VERSION} VERSION_LESS "3.9.0") - SET(WB_COMPILER_OPTIONS_PRIVATE -pedantic -Wall -Wextra $<$:-Wunused-variable -Wmissing-braces -Wunused-parameter -Wpointer-arith -Wwrite-strings -Wsynth -Wsign-compare -Woverloaded-virtual -Wno-placement-new -Wno-literal-suffix -Wno-parentheses -Wno-unused-local-typedefs -Wcast-qual -fstrict-aliasing -Wmaybe-uninitialized -Werror=maybe-uninitialized -Wparentheses -Wfloat-equal -Wundef -Wcast-align -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wdiv-by-zero -Wdisabled-optimization -Wswitch-default -Wno-unused>) + SET(WB_COMPILER_OPTIONS_PRIVATE -pedantic -Wall -Wextra $<$:-Wunused-variable -Wold-style-cast -Wconversion -Wsign-conversion -Wmissing-braces -Wunused-parameter -Wpointer-arith -Wwrite-strings -Wsynth -Wsign-compare -Woverloaded-virtual -Wno-placement-new -Wno-literal-suffix -Wno-parentheses -Wno-unused-local-typedefs -Wcast-qual -fstrict-aliasing -Wmaybe-uninitialized -Werror=maybe-uninitialized -Wparentheses -Wfloat-equal -Wundef -Wcast-align -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wdiv-by-zero -Wdisabled-optimization -Wswitch-default -Wno-unused>) if (${FORCE_COLORED_OUTPUT}) - SET(WB_COMPILER_OPTIONS_PRIVATE $<$:-fdiagnostics-color=always> ${WB_COMPILER_OPTIONS_PRIVATE}) + SET(WB_COMPILER_OPTIONS_PRIVATE -fdiagnostics-color=always ${WB_COMPILER_OPTIONS_PRIVATE}) endif() else() - SET(WB_COMPILER_OPTIONS_PRIVATE "-pedantic -Wall -Wextra -Wunused-variable -Wmissing-braces -Wunused-parameter -Wpointer-arith -Wwrite-strings -Wsynth -Wsign-compare -Woverloaded-virtual -Wno-placement-new -Wno-literal-suffix -Wno-parentheses -Wno-unused-local-typedefs -Wcast-qual -fstrict-aliasing -Wmaybe-uninitialized -Werror=maybe-uninitialized -Wparentheses -Wfloat-equal -Wundef -Wcast-align -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wdiv-by-zero -Wdisabled-optimization -Wswitch-default -Wno-unused>") + SET(WB_COMPILER_OPTIONS_PRIVATE "-pedantic -Wall -Wextra -Wold-style-cast -Wconversion -Wsign-conversion -Wunused-variable -Wmissing-braces -Wunused-parameter -Wpointer-arith -Wwrite-strings -Wsynth -Wsign-compare -Woverloaded-virtual -Wno-placement-new -Wno-literal-suffix -Wno-parentheses -Wno-unused-local-typedefs -Wcast-qual -fstrict-aliasing -Wmaybe-uninitialized -Werror=maybe-uninitialized -Wparentheses -Wfloat-equal -Wundef -Wcast-align -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wdiv-by-zero -Wdisabled-optimization -Wswitch-default -Wno-unused>") if (${FORCE_COLORED_OUTPUT}) SET(WB_COMPILER_OPTIONS_PRIVATE "-fdiagnostics-color=always ${WB_COMPILER_OPTIONS_PRIVATE}") @@ -496,7 +497,7 @@ else() endif() if(${USE_MPI}) - target_link_libraries (${WB_TARGET} PUBLIC MPI::MPI_CXX) + target_link_libraries (${WB_TARGET} PUBLIC MPI::MPI_CXX MPI::MPI_C) endif() if(WB_ENABLE_APPS) @@ -506,7 +507,7 @@ if(WB_ENABLE_APPS) set(_libs ${_libs} ${ZLIB_LIBRARIES}) endif() if (USE_MPI) - set(_mpi_dep "PUBLIC MPI::MPI_CXX") + set(_mpi_dep "PUBLIC MPI::MPI_CXX MPI::MPI_C") else() set(_mpi_dep "") endif() diff --git a/contrib/world_builder/README.md b/contrib/world_builder/README.md index 85f07f3e992..57babd3db9d 100644 --- a/contrib/world_builder/README.md +++ b/contrib/world_builder/README.md @@ -21,7 +21,7 @@ For more information see the [GWB site](https://geodynamicworldbuilder.github.io ## Frequently Asked Questions (FAQ) ### What are the minimum requirements to compile the library and tools? -For GWB version 0.6.0 only a C++14 compiler and CMake version higher than 2.8.12 are required to compile the library tools. Note that for some optional features (such as certain wrappers and unity build) a higher version of CMake and other dependencies may be needed (e.g., a Fortran compiler to compile the Fortran wrapper). +Currently, GWB requires only a C++14 compiler and CMake version higher than 2.8.12 to compile the library tools. Note that for some optional features (such as certain wrappers and unity build) a higher version of CMake and other dependencies may be needed (e.g., a Fortran compiler to compile the Fortran wrapper). ### What do I do when I have a question or want to request a feature? If you have a question about the code and you can not find the answer easily in the documentation or the question is not already raised as an [issue](https://github.com/GeodynamicWorldBuilder/WorldBuilder/issues), please let us know by opening an [issue on github](https://github.com/GeodynamicWorldBuilder/WorldBuilder/issues/new). This is also the preferred method for asking for new features for GWB. @@ -36,11 +36,13 @@ Feel free to join! ### How to cite? The developers of the Geodynamic World Builder request that you cite the following publication: +Fraters, M., Billen, M., Gassmöller, R., Saxena, A., Heister, T., Li, H., Douglas, D., Dannberg J., Bangerth W. and Wang, Y.: The Geodynamic World Builder: A planetary structure creator for the geosciences, Journal of Open Source Software, [https://doi.org/10.21105/joss.06671](https://doi.org/10.21105/joss.06671), 2024. + Fraters, M., Thieulot, C., van den Berg, A., and Spakman, W.: The Geodynamic World Builder: a solution for complex initial conditions in numerical modelling, Solid Earth, [https://doi.org/10.5194/se-10-1785-2019](https://doi.org/10.5194/se-10-1785-2019), 2019. -And cite the specific version of the software used. Version 0.6.0 can be cited as: +And cite the specific version of the software used. The current release can be cited as: -Menno Fraters and others. 2024, March 8. The Geodynamic World Builder v0.6.0. Zenodo. [https://doi.org/10.5281/zenodo.10794862](https://doi.org/10.5281/zenodo.10794862). +Menno Fraters and others. August 2024. The Geodynamic World Builder v1.0.0. Zenodo. [https://doi.org/10.5281/zenodo.13352667](https://doi.org/10.5281/zenodo.13352667). ### How can I follow the progress of this project? There are multiple ways in which you can follow this project: diff --git a/contrib/world_builder/VERSION b/contrib/world_builder/VERSION index a918a2aa18d..3eefcb9dd5b 100644 --- a/contrib/world_builder/VERSION +++ b/contrib/world_builder/VERSION @@ -1 +1 @@ -0.6.0 +1.0.0 diff --git a/contrib/world_builder/appveyor.yml b/contrib/world_builder/appveyor.yml index b8e6f785cac..8f982c3e046 100644 --- a/contrib/world_builder/appveyor.yml +++ b/contrib/world_builder/appveyor.yml @@ -1,4 +1,4 @@ -version: '0.6.0.{build}' +version: '1.0.0.{build}' image: Visual Studio 2015 diff --git a/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift/2d_cartesian_subduction_rift.wb b/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift/2d_cartesian_subduction_rift.wb index 62373f679e0..12c13df859b 100644 --- a/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift/2d_cartesian_subduction_rift.wb +++ b/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift/2d_cartesian_subduction_rift.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section":[[0,0],[100,0]], "features": [ diff --git a/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift_adiabatic/2d_cartesian_subduction_rift_adiabatic.wb b/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift_adiabatic/2d_cartesian_subduction_rift_adiabatic.wb index 71376c298c7..5a6d2345579 100644 --- a/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift_adiabatic/2d_cartesian_subduction_rift_adiabatic.wb +++ b/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift_adiabatic/2d_cartesian_subduction_rift_adiabatic.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section":[[0,0],[100,0]], "features": [ diff --git a/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift_sepran_example/2d_cartesian_subduction_rift_sepran_example.wb b/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift_sepran_example/2d_cartesian_subduction_rift_sepran_example.wb index c1eb834ad68..6183d9560f9 100644 --- a/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift_sepran_example/2d_cartesian_subduction_rift_sepran_example.wb +++ b/contrib/world_builder/cookbooks/2d_cartesian_subduction_rift_sepran_example/2d_cartesian_subduction_rift_sepran_example.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section":[[0,0],[100,0]], "features": [ diff --git a/contrib/world_builder/cookbooks/2d_spherical_subduction_rift/2d_spherical_subduction_rift.wb b/contrib/world_builder/cookbooks/2d_spherical_subduction_rift/2d_spherical_subduction_rift.wb index a61def8d28a..4ce3a2f5823 100644 --- a/contrib/world_builder/cookbooks/2d_spherical_subduction_rift/2d_spherical_subduction_rift.wb +++ b/contrib/world_builder/cookbooks/2d_spherical_subduction_rift/2d_spherical_subduction_rift.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin segment"}, "cross section":[[0,0],[10,0]], "features": diff --git a/contrib/world_builder/cookbooks/2d_spherical_subduction_rift_adiabatic/2d_spherical_subduction_rift_adiabatic.wb b/contrib/world_builder/cookbooks/2d_spherical_subduction_rift_adiabatic/2d_spherical_subduction_rift_adiabatic.wb index 3790c7847ff..4b0aa534be7 100644 --- a/contrib/world_builder/cookbooks/2d_spherical_subduction_rift_adiabatic/2d_spherical_subduction_rift_adiabatic.wb +++ b/contrib/world_builder/cookbooks/2d_spherical_subduction_rift_adiabatic/2d_spherical_subduction_rift_adiabatic.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin segment"}, "cross section":[[0,0],[10,0]], "features": diff --git a/contrib/world_builder/cookbooks/3d_cartesian_curved_subduction/3d_cartesian_curved_subduction.wb b/contrib/world_builder/cookbooks/3d_cartesian_curved_subduction/3d_cartesian_curved_subduction.wb index ba2ebeaff71..21ab48905a5 100644 --- a/contrib/world_builder/cookbooks/3d_cartesian_curved_subduction/3d_cartesian_curved_subduction.wb +++ b/contrib/world_builder/cookbooks/3d_cartesian_curved_subduction/3d_cartesian_curved_subduction.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "potential mantle temperature":1500, "thermal expansion coefficient":2.0e-5, "maximum distance between coordinates":100000, diff --git a/contrib/world_builder/cookbooks/3d_cartesian_double_subduction/3d_cartesian_double_subduction.wb b/contrib/world_builder/cookbooks/3d_cartesian_double_subduction/3d_cartesian_double_subduction.wb index 1c510a310c6..e9564b546db 100644 --- a/contrib/world_builder/cookbooks/3d_cartesian_double_subduction/3d_cartesian_double_subduction.wb +++ b/contrib/world_builder/cookbooks/3d_cartesian_double_subduction/3d_cartesian_double_subduction.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/cookbooks/3d_cartesian_rift/3d_cartesian_rift.wb b/contrib/world_builder/cookbooks/3d_cartesian_rift/3d_cartesian_rift.wb index 88d50d4a614..439ad79be0a 100644 --- a/contrib/world_builder/cookbooks/3d_cartesian_rift/3d_cartesian_rift.wb +++ b/contrib/world_builder/cookbooks/3d_cartesian_rift/3d_cartesian_rift.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "features": [ {"model":"oceanic plate", "name":"oceanic plate A", "coordinates":[[-1e3,-1e3],[2001e3,-1e3],[2001e3,1000e3],[-1e3,1000e3]], diff --git a/contrib/world_builder/cookbooks/3d_cartesian_transform_fault/3d_cartesian_transform_fault.wb b/contrib/world_builder/cookbooks/3d_cartesian_transform_fault/3d_cartesian_transform_fault.wb index 2bbe9eaa662..2c78070af28 100644 --- a/contrib/world_builder/cookbooks/3d_cartesian_transform_fault/3d_cartesian_transform_fault.wb +++ b/contrib/world_builder/cookbooks/3d_cartesian_transform_fault/3d_cartesian_transform_fault.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "surface temperature":273.15, "potential mantle temperature":1573.15, "thermal expansion coefficient":0, diff --git a/contrib/world_builder/cookbooks/3d_spherical_subduction/3d_spherical_subduction.wb b/contrib/world_builder/cookbooks/3d_spherical_subduction/3d_spherical_subduction.wb index 854da8b9b84..59cd0e3a0d7 100644 --- a/contrib/world_builder/cookbooks/3d_spherical_subduction/3d_spherical_subduction.wb +++ b/contrib/world_builder/cookbooks/3d_spherical_subduction/3d_spherical_subduction.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin segment"}, "cross section":[[0,0],[10,0]], "maximum distance between coordinates":0.01, diff --git a/contrib/world_builder/cookbooks/index.md b/contrib/world_builder/cookbooks/index.md index 598348bb371..454a8cec464 100644 --- a/contrib/world_builder/cookbooks/index.md +++ b/contrib/world_builder/cookbooks/index.md @@ -6,11 +6,10 @@ This section contains self-contained cookbooks on how to design different geodyn ```{toctree} -: hidden: +:hidden: 3d_cartesian_rift/doc/README 3d_cartesian_transform_fault/doc/README simple_subduction_2d_cartesian/doc/README simple_subduction_2d_chunk/doc/README - ``` diff --git a/contrib/world_builder/cookbooks/simple_subduction_2d_cartesian/simple_subduction_2d_cartesian.wb b/contrib/world_builder/cookbooks/simple_subduction_2d_cartesian/simple_subduction_2d_cartesian.wb index 874184343b9..03c112a86ae 100644 --- a/contrib/world_builder/cookbooks/simple_subduction_2d_cartesian/simple_subduction_2d_cartesian.wb +++ b/contrib/world_builder/cookbooks/simple_subduction_2d_cartesian/simple_subduction_2d_cartesian.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[0,0],[8000e3,0]], "surface temperature":273, "potential mantle temperature":1573, @@ -32,22 +32,23 @@ {"model":"subducting plate", "name":"Slab", "coordinates":[[3500e3,-100e3],[3500e3,100e3]], "dip point":[0,0],"max depth":1000e3, - "segments":[{"length":200e3,"thickness":[300e3],"top truncation":[-50e3],"angle":[0,30]}, - {"length":100e3, "thickness":[300e3],"top truncation":[-50e3], "angle":[30,50]}, - {"length":500e3, "thickness":[300e3],"top truncation":[-50e3], "angle":[50,50]}, - {"length":300e3, "thickness":[300e3],"top truncation":[-50e3], "angle":[50,10]}, - {"length":300e3, "thickness":[300e3],"top truncation":[-50e3], "angle":[10,10]}], - "composition models":[ + "segments":[{"length":200e3,"thickness":[300e3],"top truncation":[-50e3],"angle":[0,30]}, + {"length":100e3, "thickness":[300e3],"top truncation":[-50e3], "angle":[30,50]}, + {"length":500e3, "thickness":[300e3],"top truncation":[-50e3], "angle":[50,50]}, + {"length":300e3, "thickness":[300e3],"top truncation":[-50e3], "angle":[50,10]}, + {"length":300e3, "thickness":[300e3],"top truncation":[-50e3], "angle":[10,10]}], + "composition models":[ {"model":"uniform", "compositions":[0], "max distance slab top":100e3}], - "temperature models":[{"model":"mass conserving", - "reference model name": "plate model", - "density":3300, "thermal conductivity":3.3,"adiabatic heating":false, - "plate velocity":0.03, - "ridge coordinates":[[[8000e3,-100e3],[8000e3,100e3]]], - "coupling depth":80e3, - "forearc cooling factor":20.0, - "taper distance":100e3, - "min distance slab top":-200e3, "max distance slab top":300e3}] - } + "temperature models":[{"model":"mass conserving", + "reference model name": "plate model", + "density":3300, "thermal conductivity":3.3,"adiabatic heating":false, + "spreading velocity":0.03, + "subducting velocity":0.03, + "ridge coordinates":[[[8000e3,-100e3],[8000e3,100e3]]], + "coupling depth":80e3, + "forearc cooling factor":20.0, + "taper distance":100e3, + "min distance slab top":-200e3, "max distance slab top":300e3}] + } ] } diff --git a/contrib/world_builder/cookbooks/simple_subduction_2d_chunk/simple_subduction_2d_chunk.wb b/contrib/world_builder/cookbooks/simple_subduction_2d_chunk/simple_subduction_2d_chunk.wb index 613fe017e1d..8a7dc200060 100644 --- a/contrib/world_builder/cookbooks/simple_subduction_2d_chunk/simple_subduction_2d_chunk.wb +++ b/contrib/world_builder/cookbooks/simple_subduction_2d_chunk/simple_subduction_2d_chunk.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"spherical", "depth method":"begin at end segment", "radius":6371000.0}, @@ -30,35 +30,36 @@ "spreading velocity":0.05, "ridge coordinates":[[[135,-5],[135,5]]] }], - "composition models":[ + "composition models":[ {"model":"uniform", "compositions":[1], "min depth":0, "max depth":100e3}] }, { "model":"subducting plate", "name":"Slab", "coordinates":[[90,-5],[90,5]], "dip point":[0,0], "max depth":1000e3, - "segments":[ - {"length":200e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[0,30]}, - {"length":100e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[30,50]}, - {"length":200e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[50,50]}, - {"length":300e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[50,10]}, - {"length":100e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[10,10]}, - {"length":300e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[10,150]}, - {"length":200e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[150,150]}, - {"length":200e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[150,90]}, - {"length":100e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[90,90]} - ], - "composition models":[ - {"model":"uniform", "compositions":[1], "max distance slab top":100e3}], - "temperature models":[ - {"model":"mass conserving", - "reference model name": "half space model", - "density":3300, "thermal conductivity":3.3,"adiabatic heating":true, - "plate velocity":0.05, - "ridge coordinates":[[[135,-5],[135,5]]], - "coupling depth":80e3, - "forearc cooling factor":10.0, - "taper distance":150e3, - "min distance slab top":-200e3, "max distance slab top":300e3}] - } + "segments":[ + {"length":200e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[0,30]}, + {"length":100e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[30,50]}, + {"length":200e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[50,50]}, + {"length":300e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[50,10]}, + {"length":100e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[10,10]}, + {"length":300e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[10,150]}, + {"length":200e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[150,150]}, + {"length":200e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[150,90]}, + {"length":100e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[90,90]} + ], + "composition models":[ + { "model":"uniform", "compositions":[1], "max distance slab top":100e3}], + "temperature models":[ + { "model":"mass conserving", + "reference model name": "half space model", + "density":3300, "thermal conductivity":3.3,"adiabatic heating":true, + "spreading velocity":0.05, + "subducting velocity":0.05, + "ridge coordinates":[[[135,-5],[135,5]]], + "coupling depth":80e3, + "forearc cooling factor":10.0, + "taper distance":150e3, + "min distance slab top":-200e3, "max distance slab top":300e3}] + } ] } diff --git a/contrib/world_builder/doc/JOSS/1.0/paper.bib b/contrib/world_builder/doc/JOSS/1.0/paper.bib new file mode 100644 index 00000000000..07572a04637 --- /dev/null +++ b/contrib/world_builder/doc/JOSS/1.0/paper.bib @@ -0,0 +1,207 @@ +@Article{Fraters_Thieulot_etal_2019, +AUTHOR = {Fraters, M. and Thieulot, C. and van den Berg, A. and Spakman, W.}, +TITLE = {{The Geodynamic World Builder: a solution for complex initial conditions in numerical modeling}}, +JOURNAL = {Solid Earth}, +VOLUME = {10}, +YEAR = {2019}, +NUMBER = {5}, +PAGES = {1785--1807}, +URL = {https://se.copernicus.org/articles/10/1785/2019/}, +DOI = {10.5194/se-10-1785-2019} +} + +@article{Bauville_Baumann_2019, +author = {Bauville, A. and Baumann, T. S.}, +title = {{geomIO: An Open-Source MATLAB Toolbox to Create the Initial Configuration of 2-D/3-D Thermo-Mechanical Simulations From 2-D Vector Drawings}}, +journal = {Geochemistry, Geophysics, Geosystems}, +volume = {20}, +number = {3}, +pages = {1665-1675}, +keywords = {3-D modeling, numerical simulation, MATLAB toolbox, 3-D temperature distribution}, +doi = {10.1029/2018GC008057}, +url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2018GC008057}, +eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2018GC008057}, +abstract = {Abstract Creating the initial geometry and temperature configuration of 3-D numerical simulations is a challenging task. Professional tools are expensive. They often have a steep learning curve and do mostly not interface with the numerical simulation software used by the geodynamics and tectonics academic community. There, we developed geometry Input/Output (geomIO), a MATLAB toolbox to create the initial configuration of geological models regarding model geometry and temperature structure. geomIO allows users to create a geo-referenced 3-D volume by drawing multiple 2-D cross sections in a standard vector graphics editor. The volume is then used to assign material properties and set up initial temperature distribution on a set of vertices. In 2-D mode, polygons can also be used to create a triangular mesh. In addition to the standard functionality, the gravity anomaly of any geometry created with geomIO can be calculated. In this paper, we give an overview of the basic functionalities of geomIO. We illustrate the strength of our software with advanced tectonic and geodynamic applications that could not have been performed with currently available free software. Applications include the Himalayan orogen, the Japanese subduction zones, present-day salt diapirs, and small-scale tectonic structures. We describe algorithms and file formats in the supporting information. The toolbox is user-friendly and flexible. Users can use custom pipelines or preset data processing pipelines, so most applications require only a few lines of code. geomIO is distributed under the GNU General Public License and includes an online wiki with tutorials and additional examples.}, +year = {2019} +} + +@article{Spang_Baumann_2022, +author = {Spang, A. and Baumann, T. S. and Kaus, B. J. P.}, +title = {{Geodynamic Modeling With Uncertain Initial Geometries}}, +journal = {Geochemistry, Geophysics, Geosystems}, +volume = {23}, +number = {6}, +pages = {e2021GC010265}, +keywords = {geometry parameterization, variable geometry, salt tectonics, subduction velocity, inversion, subduction angle}, +doi = {10.1029/2021GC010265}, +url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2021GC010265}, +eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2021GC010265}, +note = {e2021GC010265 2021GC010265}, +abstract = {Abstract Geodynamic codes have become fast and efficient enough to facilitate sensitivity analysis of rheological parameters. With sufficient data, they can even be inverted for. Yet, the geodynamic inverse problem is often regularized by assuming a constant geometry of the geological setting (e.g., shape, location and size of salt diapirs or magma bodies) or approximating irregular bodies with simple shapes like boxes, spheres or ellipsoids to reduce the parameter space. Here, we present a simple and intuitive method to parameterize complex 3D bodies and incorporate them into geodynamic inverse problems. The approach can automatically create an entire ensemble of initial geometries, enabling us to account for uncertainties in imaging data. Furthermore, it allows us to investigate the sensitivity of the model results to geometrical properties and facilitates inverting for them. We demonstrate the method with two examples. A salt diapir in an extending regime and free subduction of an oceanic plate under a continent. In both cases, small differences in the model's initial geometry lead to vastly different results. Be it the formation of faults or the velocity of plates. Using the salt diapir example, we demonstrate that, given an additional geophysical observation, we are able to invert for uncertain geometric properties. This highlights that geodynamic studies should investigate the sensitivity of their models to the initial geometry and include it in their inversion framework. We make our method available as part of the open-source software geomIO.}, +year = {2022} +} + +@article{Beucher_Moresi_etal_2019, +doi = {10.21105/joss.01136}, +url = {https://doi.org/10.21105/joss.01136}, +year = {2019}, +publisher = {The Open Journal}, +volume = {4}, +number = {36}, +pages = {1136}, +author = {Romain Beucher and Louis Moresi and Julian Giordani and John Mansour and Dan Sandiford and Rebecca Farrington and Luke Mondy and Claire Mallard and Patrice Rey and Guillaume Duclaux and Owen Kaluza and Arijit Laik and Sara Morón}, +title = {{UWGeodynamics: A teaching and research tool for numerical geodynamic modelling}}, +journal = {Journal of Open Source Software} +} + +@article{Moresi_Dufour_2002, +author = {Moresi, L. and Dufour, F. and Mühlhaus, HB.}, +title = {{Mantle Convection Modeling with Viscoelastic/Brittle Lithosphere: Numerical Methodology and Plate Tectonic Modeling.}}, +journal = {Pure appl. geophys.}, +volume = {159}, +pages = {2335-2356}, +year = {2002}, +doi = {10.1007/s00024-002-8738-3}, +url = {https://doi.org/10.1007/s00024-002-8738-3} +} + +@article{Varga_Schaaf_2019, +AUTHOR = {de la Varga, M. and Schaaf, A. and Wellmann, F.}, +TITLE = {{GemPy 1.0: open-source stochastic geological modeling and inversion}}, +JOURNAL = {Geoscientific Model Development}, +VOLUME = {12}, +YEAR = {2019}, +NUMBER = {1}, +PAGES = {1--32}, +URL = {https://gmd.copernicus.org/articles/12/1/2019/}, +DOI = {10.5194/gmd-12-1-2019} +} + +@article{Schaaf_Varga_2021, +AUTHOR = {Schaaf, A. and de la Varga, M. and Wellmann, F. and Bond, C. E.}, +TITLE = {{Constraining stochastic 3-D structural geological models with topology information using approximate Bayesian computation in GemPy 2.1}}, +JOURNAL = {Geoscientific Model Development}, +VOLUME = {14}, +YEAR = {2021}, +NUMBER = {6}, +PAGES = {3899--3913}, +URL = {https://gmd.copernicus.org/articles/14/3899/2021/}, +DOI = {10.5194/gmd-14-3899-2021} +} + +@article{McKenzie_1970, + title = {{Temperature and potential temperature beneath island arcs}}, + journal = "Tectonophysics", + volume = "10", + number = "1", + pages = "357 - 366", + year = "1970", + note = "Geothermal Problems", + issn = "0040-1951", + doi = "10.1016/0040-1951(70)90115-0", + url = "http://www.sciencedirect.com/science/article/pii/0040195170901150", + author = "D.P. McKenzie" +} +@software{sebastien_jourdain_2024, + author = {Sebastien Jourdain (Kitware) and + Forrest Li and + Julien Finet and + Sankhesh Jhaveri and + Laurenn Lam and + Adnane Belmadiaf and + Matt McCormick and + Scott Wittenburg and + Alireza and + Thibault Bruyère and + Tom Birdsong and + Lucie Macron and + Shreeraj Jadhav and + JiayiXuu and + Patrick Avery and + rodrigobasilio2022 and + Jules BOURDAIS and + gandis and + Erik Ziegler and + RemiCecchinato and + Anne Haley and + Tom Suchel and + TristanWright and + David Thompson and + Mayeul Chassagnard and + Madison Dickson and + Aron Helser and + Paul Elliott and + ocrossi}, + title = {{Kitware/vtk-js: v29.7.2}}, + month = feb, + year = 2024, + publisher = {Zenodo}, + version = {v29.7.2}, + doi = {10.5281/zenodo.10680530}, + url = {https://doi.org/10.5281/zenodo.10680530} +} + +@article{Billen_Fraters_AGU_2023, + title={{A New Method for Assigning Thermal Structure to 2D and 3D Present-day Geodynamic and Seismological Models of Subduction Zones}}, + author={Billen, Magali I and Fraters, Menno}, + journal={AGU23}, + year={2023}, + url={https://agu.confex.com/agu/fm23/meetingapp.cgi/Paper/1363473}, + publisher={AGU} +} + +@article{vanderWiel_Hinsbergen_etal_2024, + title = {{Linking rates of slab sinking to long-term lower mantle flow and mixing}}, + journal = {Earth and Planetary Science Letters}, + volume = {625}, + pages = {118471}, + year = {2024}, + issn = {0012-821X}, + doi = {10.1016/j.epsl.2023.118471}, + url = {https://www.sciencedirect.com/science/article/pii/S0012821X23004843}, + author = {Erik {van der Wiel} and Douwe J.J. {van Hinsbergen} and Cedric Thieulot and Wim Spakman}, + keywords = {Mantle convection, Slab sinking rates, Mantle mixing, Modelling constraints}, +} + +@article{Sandiford_Craig_timothy_2023, + author = {Sandiford, Dan and Craig, Timothy J}, + title = {{Plate bending earthquakes and the strength distribution of the lithosphere}}, + journal = {Geophysical Journal International}, + volume = {235}, + number = {1}, + pages = {488-508}, + year = {2023}, + month = {06}, + issn = {0956-540X}, + doi = {10.1093/gji/ggad230}, + url = {https://doi.org/10.1093/gji/ggad230}, + eprint = {https://academic.oup.com/gji/article-pdf/235/1/488/50659012/ggad230.pdf}, +} + +@ARTICLE{Gea_Negredo_etal_2023, + AUTHOR={Gea, Pedro J. and Negredo, Ana M. and Mancilla, Flor de Lis}, + TITLE={{The Gibraltar slab dynamics and its influence on past and present-day Alboran domain deformation: Insights from thermo-mechanical numerical modelling}}, + JOURNAL={Frontiers in Earth Science}, + VOLUME={11}, + YEAR={2023}, + URL={https://www.frontiersin.org/articles/10.3389/feart.2023.995041}, + DOI={10.3389/feart.2023.995041}, + ISSN={2296-6463}, + ABSTRACT={The origin and tectonic evolution of the Gibraltar Arc system is the result of a complex geodynamic evolution involving the convergence of the Eurasian and African plates and the dynamic impact of the Gibraltar slab. Although geologic and geophysical data collected in the last few years have increased our knowledge of the Gibraltar Arc region, it is still unclear which are the mechanical links between the Gibraltar slab and the past deformation of the overriding Alboran lithosphere, as well as to which degree this subduction system is presently active. In this study, we use 2D numerical modelling to investigate the impact of the Gibraltar slab dynamics on the deformation of the overriding Alboran lithosphere. Our model simulates a WE generic vertical section at an approximate latitude of 36°N and considers an initial setup at about Burdigalian times (∼20 Ma), when the subduction front position is relatively well constrained by recent tectonic reconstructions. Our modelling shows a switch in the overriding plate (OP) stress state from extensional stresses during the slab rollback to compressional stresses near the trench when the rollback velocity decreases, caused by the change in slab-induced mantle flow. We also find that much of the crustal and lithospheric deformation occur during fast slab rollback and OP extension in the first 10 Myr of evolution, while after that only moderate deformation associated with subduction is predicted. Finally, we find that despite the subduction rollback ceases, the ongoing motion of the deeper portion of the slab induces a mantle flow that causes some amount of west-directed basal drag of the Alboran lithosphere. This basal drag generates interplate compresional stresses compatible with the distribution of intermediate-depth earthquakes in western Alboran.} +} + +@article{Saxena_Dannberg_etal_2023, + author = {Saxena, Arushi and Dannberg, Juliane and Gassmöller, Rene and Fraters, Menno and Heister, Timo and Styron, Richard}, + title = {{High-Resolution Mantle Flow Models Reveal Importance of Plate Boundary Geometry and Slab Pull Forces on Generating Tectonic Plate Motions}}, + journal = {Journal of Geophysical Research: Solid Earth}, + volume = {128}, + number = {8}, + pages = {e2022JB025877}, + keywords = {global mantle flow models, plate driving forces, plate tectonics}, + doi = {10.1029/2022JB025877}, + url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2022JB025877}, + eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2022JB025877}, + note = {e2022JB025877 2022JB025877}, + abstract = {Abstract Mantle convection models based on geophysical constraints have provided us with a basic understanding of the forces driving and resisting plate motions on Earth. However, existing studies computing the balance of underlying forces are contradicting, and the impact of plate boundary geometry on surface deformation remains unknown. We address these issues by developing global instantaneous 3-D mantle convection models with a heterogeneous density and viscosity distribution and weak plate boundaries prescribed using different geometries. We find that the plate boundary geometry of the Global Earthquake Model (GEM, Pagani et al., 2018, https://doi.org/10.1177/8755293020931866), featuring open plate boundaries with discrete lithospheric-depth weak zones in the oceans and distributed crustal faults within continents, achieves the best fit to the observed GPS data with a directional correlation of 95.1\% and a global point-wise velocity residual of 1.87 cm/year. A good fit also requires plate boundaries being 3 to 4 orders of magnitude weaker than the surrounding lithosphere and low asthenospheric viscosities between 5 × 1017 and 5 × 1018 Pa s. Models without asthenospheric and lower mantle heterogeneities retain on average 30\% and 70\% of the plate speeds, respectively. Our results show that Earth's plate boundaries are not uniform and better described by more discrete plate boundaries within the oceans and distributed faults within continents. Furthermore, they emphasize the impact of plate boundary geometry on the direction and speed of plate motions and reaffirm the importance of slab pull in the uppermost mantle as a major plate driving force.}, + year = {2023} +} diff --git a/contrib/world_builder/doc/JOSS/1.0/paper.md b/contrib/world_builder/doc/JOSS/1.0/paper.md new file mode 100644 index 00000000000..a534605dc6d --- /dev/null +++ b/contrib/world_builder/doc/JOSS/1.0/paper.md @@ -0,0 +1,141 @@ +--- +title: 'The Geodynamic World Builder: A planetary structure creator for the geosciences' +tags: + - C++ + - CPP + - C + - Fortran + - Python + - Geodynamics + - Earth science + - Tectonics + - Seismology +authors: + - name: Menno R. T. Fraters + orcid: 0000-0003-0035-7723 + affiliation: "1" # (Multiple affiliations must be quoted) + - name: Magali I. Billen + orcid: 0000-0002-7316-1791 + affiliation: "2" + - name: Rene Gassmöller + orcid: 0000-0001-7098-8198 + affiliation: "3,4" + - name: Arushi Saxena + orcid: 0000-0003-2930-3497 + affiliation: "2,5" + - name: Timo Heister + orcid: 0000-0002-8137-3903 + affiliation: "5" + - name: Haoyuan Li + orcid: 0000-0003-0676-9884 + affiliation: "2" + - name: Daniel Douglas + orcid: 0000-0002-7871-018X + affiliation: "6" + - name: Juliane Dannberg + orcid: 0000-0003-0357-7115 + affiliation: "3,4" + - name: Wolfgang Bangerth + orcid: 0000-0003-2311-9402 + affiliation: "7" + - name: Yijun Wang + orcid: 0000-0002-7637-3239 + affiliation: "8" +affiliations: + - name: GFZ German Research Centre for Geosciences, Potsdam, Germany + index: 1 + - name: UC Davis, USA + index: 2 + - name: GEOMAR Helmholtz-Zentrum für Ozeanforschung, Kiel, Germany + index: 3 + - name: Universiy of Florida, USA + index: 4 + - name: Clemson University, USA + index: 5 + - name: New Mexico Tech, USA + index: 6 + - name: Colorado State University, USA + index: 7 + - name: University of Oslo, Norway + index: 8 +date: 11 March 2024 +bibliography: paper.bib +--- + +# Summary + +Many Earth science applications require the discretization, parameterization, and/or visualization of complex geological features in a 3D geometry in global or regional settings. A prime example are geodynamic models that have to make assumptions about the Earth's thermal and chemical structure and the geometry of different features such as plates, subducted slabs, or mantle plumes. This structure is needed in instantaneous models, as model initial conditions, or to test different hypotheses and compare model predictions to observations. Other examples are the creation of an Earth velocity structure for seismic forward modeling and hypothesis-testing, or the visualization of tectonic features in structural geology. + +The Geodynamic World Builder (GWB) has been designed to make the creation of complex parameterized models significantly easier. It can also be used to design simple synthetic models and it supports the use of several types of datasets to set up models. Besides setting up initial conditions for geodynamic models, the GWB can also visualize complex 3D geologic, tectonic, and geodynamic settings. + +# Statement of need + +Today's computational resources, infrastructure, and numerical methods allow for the creation of complex numerical models that closely resemble specific locations on the Earth, using 3D geometries and high resolutions. However, the related increase in complexity has also made setting up these more detailed regional or global models exceedingly difficult, especially in three dimensions. Furthermore, investigating the model dynamics often requires testing different scenarios involving variations in model geometry, thermal, or chemical structure, or other model assumptions. Although studies with such complex models have been published, the practical realization of these model setups often have one or many of the following disadvantages: + +1. The configuration is not human-readable. +2. The software is not easily modifiable and extendable. +3. The model setup is not portable to other computing systems or reproducible in other software frameworks. +4. The model setup is not shareable with other users. + +These issues lead to a number of problems with the reproducibility and reliability of modeling studies, which threaten to undermine the predictive power and usefulness of modeling results, and highlight the need for an easy, efficient, and robust way to describe model setups. The GWB has been designed to address these challenges, by creating human readable, parameterized, portable, reproducible, and shareable geodynamic model setups. Critically, the GWB comes with its own programs to visualize the constructed model through applications like Paraview. Creating the models requires no programming knowledge. Therefore, the GWB can be easily used to visualize tectonic and geodynamic settings for publications, teaching, and public outreach. + +![A workflow diagram for how a world builder file can be used to create and visualize a geodynamic model.](workflow_diagram.png) + +The GWB has been used in several published studies to model global fault patterns, plumes, and plate dynamics [@Saxena_Dannberg_etal_2023; @Gea_Negredo_etal_2023; @Sandiford_Craig_timothy_2023; and @vanderWiel_Hinsbergen_etal_2024]. Other tools to solve this problem have emerged at around the same time as the first GWB release [@Fraters_Thieulot_etal_2019]. Examples include GeomIO [@Bauville_Baumann_2019; @Spang_Baumann_2022], which uses an approach based on vector graphics; Easy (https://easyinit.readthedocs.io/), which uses a more generic function-based approach; UWGeodynamics [@Beucher_Moresi_etal_2019], which is specifically designed for Underworld [@Moresi_Dufour_2002]; and GemPy [@Varga_Schaaf_2019; @Schaaf_Varga_2021], which is designed for structural modeling. The GWB was designed to be a more general planetary structure creator, using the methods shown below. + +# Methods + +To address the challenges outlined in the previous section, the Geodynamic World Builder implements specific code and world parameterization principles. + +## GWB Code Principles +The GWB's software architecture is built around the following principles: + +1. A single text-based input file. +2. Code, language and platform independence: + 1. Support for **Linux**, **macOS** and **Windows**; + 2. Official interfaces for **C++**, **C**, **FORTRAN** and **Python**. +3. Safe parallel execution. +4. Readable and extensible software modules. +5. Strict version numbering to ensure reproducible results. + +These principles are implemented in an object-oriented C++ code with interfaces to other programming languages. All parts a user might want to modify are implemented as plugin systems using interface classes that decouple individual modules and allow the user to easily extend the code with new features. In addition, the GWB includes an extensive automated test suite with benchmarks, integration, and unit tests with high code coverage, memory checking, automatic code indentation, and a spell checker to keep the GWB in a healthy state. + +## GWB World Parameterization Principles + +The GWB's world parameterization principles are built around the idea that a complex model region can be split into individual tectonic features. These tectonic features can be parameterized by defining their location and geometry in terms of points, lines, or areas in a map view. For example, a continental plate can be represented as an area on a map, and the GWB user defines this area. A fault is a linear feature on a map, so the user can define the fault trace as a line at the surface. Users can also provide additional information for a feature, such as a spatially variable thickness or dip angle. The GWB then uses these parameters to create the 3D geometry of the feature, defining its volume. Furthermore, users can attach one or many models to those volumes to define additional properties such as thermal or chemical structure. These can be very simple models, such as a uniform temperature distribution; or follow a more complex distribution, such as a half space cooling model, or a McKenzie model [@McKenzie_1970], or a mass conserving slab temperature model [@Billen_Fraters_AGU_2023]. + +All these tectonic features are bundled in a single input file in standard JSON format, which is human readable, writeable, and editable. The main idea behind this design of the GWB is that users can easily create, modify, and visualize complex parameterized geodynamic or tectonic settings. + +## Example +Below we show an example input file for a Cartesian model that contains a single feature, namely a subducting plate. + +```json +{ + "version": "1.0", + "coordinate system": {"model":"cartesian"}, + "features": + [ + { + "model": "subducting plate", "name": "Slab", "dip point": [0,0], + "coordinates": [[1500e3,1000e3],[1600e3,350e3],[1500e3,0]], + "segments": [{"length":300e3, "thickness": [100e3], "angle": [0,60]}], + "temperature models": [{"model": "plate model", "plate velocity": 0.02}], + } + ] +} +``` + +A more complicated example (only requiring 85 lines, and can be found [here](https://github.com/GeodynamicWorldBuilder/WorldBuilder/blob/GWB-v1.0.0/doc/sphinx/_static/gwb_input_files/BST_19_spherical_models.wb)) featuring a spherical geometry, a spatially variable subducting plate, continental plate, oceanic plate and plume can be seen in Fig 2. + +![A schematic example of what can be built with 85 lines of a GWB input file formatted in the same way as in the example input file shown above. This includes a slab with variable dip and thickness along strike and down dip, subducting under an oceanic plate on the right side of the ridge, as well as a passive continental margin with variable thickness, and a mantle plume beneath the ridge. The temperature profile of the continent is linear, the oceanic plates are defined by a half-space cooling model, the slab temperature is defined by a mass conserving temperature model and the plume adds heat based on a Gaussian around the center.\label{fig:example}](../../sphinx/_static/images/user_manual/basic_starter_tutorial/BST_19.png) + + +# Acknowledgements + +We would like to acknowledge all other contributors to the project, especially Lorraine Hwang, Rebecca Fildes, and John Naliboff for their advice and support for this project throughout the years. We would also like to acknowledge NSF for their funding and support through grants EAR-1620618, OCE-1948902, EAR-0949446, EAR-1550901, EAR-1925677, and EAR-2149126. + +M. Fraters also acknowledges the support of the Department of Earth and Planetary Sciences at UC Davis and the Department of Geological Sciences at the University of Florida, where much of the research presented was completed while he was a postdoctoral scholar. + +# References + + diff --git a/contrib/world_builder/doc/JOSS/1.0/workflow_diagram.png b/contrib/world_builder/doc/JOSS/1.0/workflow_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..7762c0e26b19dc8529ce815997895c1c97eff87f GIT binary patch literal 268473 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 wybTZ#)ZbKgHZ=)>p#4?=Mqd;kCd literal 0 HcmV?d00001 diff --git a/contrib/world_builder/doc/doxygen_config.dox b/contrib/world_builder/doc/doxygen_config.dox index 45627a3e466..2e450f74ba2 100644 --- a/contrib/world_builder/doc/doxygen_config.dox +++ b/contrib/world_builder/doc/doxygen_config.dox @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "World Builder" -PROJECT_NUMBER = 0.6.0 +PROJECT_NUMBER = 1.0.0 PROJECT_BRIEF = "A geodynamic initial conditions generator" PROJECT_LOGO = OUTPUT_DIRECTORY = doc/doxygen/ diff --git a/contrib/world_builder/doc/generate_decl_schema.wb b/contrib/world_builder/doc/generate_decl_schema.wb index e5d14986ad0..02b5b3dc9ab 100644 --- a/contrib/world_builder/doc/generate_decl_schema.wb +++ b/contrib/world_builder/doc/generate_decl_schema.wb @@ -1,4 +1,4 @@ { - "version": "0.6", + "version": "1.0", "features": [] } \ No newline at end of file diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_02_minimal_box.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_02_minimal_box.wb index 54c8d660d5c..aa676e0e603 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_02_minimal_box.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_02_minimal_box.wb @@ -1,4 +1,4 @@ { - "version": "0.6", + "version": "1.0", "features":[] } \ No newline at end of file diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_04_overriding_plate.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_04_overriding_plate.wb index 47ec2d89d8a..5b4bd355c28 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_04_overriding_plate.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_04_overriding_plate.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_05_limit_depth.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_05_limit_depth.wb index 6d3f60706c6..e6dc8a0b12f 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_05_limit_depth.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_05_limit_depth.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_06_oceanic_plate_temperature.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_06_oceanic_plate_temperature.wb index 4e6fee7383a..e13e09b0b0d 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_06_oceanic_plate_temperature.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_06_oceanic_plate_temperature.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_07_subducting_plate_oceanic_part.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_07_subducting_plate_oceanic_part.wb index 2df3d4a1aea..54f2341b434 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_07_subducting_plate_oceanic_part.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_07_subducting_plate_oceanic_part.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_08_passive_margin_variable_depth.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_08_passive_margin_variable_depth.wb index 4e6d2e8deb2..ec3dd046d45 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_08_passive_margin_variable_depth.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_08_passive_margin_variable_depth.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_09_adding_mantle_layer.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_09_adding_mantle_layer.wb index 6bf1ce26f54..570c64d9b2c 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_09_adding_mantle_layer.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_09_adding_mantle_layer.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_10_adding_basic_subducting_plate.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_10_adding_basic_subducting_plate.wb index 860d997ebe5..f342daef08f 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_10_adding_basic_subducting_plate.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_10_adding_basic_subducting_plate.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_11_dip_change_in_segment.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_11_dip_change_in_segment.wb index 0c085797405..37a62e05f3e 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_11_dip_change_in_segment.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_11_dip_change_in_segment.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_12_sections.wb_bak b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_12_sections.wb_bak index cd96d17d5d4..a279a3e3b01 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_12_sections.wb_bak +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_12_sections.wb_bak @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[0,200e3],[100e3,200e3]], "features": diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_12_subducting_plate_temperatures.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_12_subducting_plate_temperatures.wb index f297205e82e..c491adcabaa 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_12_subducting_plate_temperatures.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_12_subducting_plate_temperatures.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_13_subducting_slab_adding_a_segment.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_13_subducting_slab_adding_a_segment.wb index dddc12533db..fcdcaa9094c 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_13_subducting_slab_adding_a_segment.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_13_subducting_slab_adding_a_segment.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_14_different_models_in_segments.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_14_different_models_in_segments.wb index 7f3c08b7861..5ce990791d4 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_14_different_models_in_segments.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_14_different_models_in_segments.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_15_different_segments_in_sections.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_15_different_segments_in_sections.wb index c2814e8e9db..82c35de72b2 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_15_different_segments_in_sections.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_15_different_segments_in_sections.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_16_mass_conserving.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_16_mass_conserving.wb index 7924d7dc1ef..27e3a69401f 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_16_mass_conserving.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_16_mass_conserving.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ @@ -60,7 +60,7 @@ "composition models":[{"model":"uniform", "compositions":[1],"max distance slab top":100e3}]} ], "temperature models":[ - {"model":"mass conserving", "density":3300, "plate velocity":0.02, + {"model":"mass conserving", "density":3300, "spreading velocity":0.02, "subducting velocity":0.02, "ridge coordinates":[[[5e6,-1],[5e6,2000e3]]],"coupling depth":50e3, "min distance slab top":-200e3, "max distance slab top":300e3}], "composition models":[{"model":"uniform", "compositions":[2], "max distance slab top":100e3}] diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_17_plume.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_17_plume.wb index e93a268f1e1..0607eeb283a 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_17_plume.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_17_plume.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features": [ @@ -60,7 +60,7 @@ "composition models":[{"model":"uniform", "compositions":[1],"max distance slab top":100e3}]} ], "temperature models":[ - {"model":"mass conserving", "density":3300, "plate velocity":0.02, + {"model":"mass conserving", "density":3300, "spreading velocity":0.02, "subducting velocity":0.02, "ridge coordinates":[[[5e6,-1],[5e6,2000e3]]],"coupling depth":50e3, "min distance slab top":-200e3, "max distance slab top":300e3}], "composition models":[{"model":"uniform", "compositions":[2], "max distance slab top":100e3}] diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_18_2D_models.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_18_2D_models.wb index 32010cccd78..88ad60bcd10 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_18_2D_models.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_18_2D_models.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[0,450e3],[10e3,450e3]], "features": @@ -60,7 +60,7 @@ {"length":400e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[60]}], "composition models":[{"model":"uniform", "compositions":[1],"max distance slab top":100e3}]} ], - "temperature models":[{"model":"mass conserving", "density":3300, "plate velocity":0.02, + "temperature models":[{"model":"mass conserving", "density":3300, "spreading velocity":0.02, "subducting velocity":0.02, "ridge coordinates":[[[5e6,-1],[5e6,2000e3]]],"coupling depth":50e3, "min distance slab top":-200e3, "max distance slab top":300e3}], "composition models":[{"model":"uniform", "compositions":[2], "max distance slab top":100e3}] diff --git a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_19_spherical_models.wb b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_19_spherical_models.wb index 3b50d99959f..5ed4e34baf5 100644 --- a/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_19_spherical_models.wb +++ b/contrib/world_builder/doc/sphinx/_static/gwb_input_files/BST_19_spherical_models.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin segment"}, "cross section":[[0,0.5],[1,-0.5]], "features": @@ -60,7 +60,7 @@ {"length":400e3, "thickness":[300e3], "top truncation":[-100e3], "angle":[60]}], "composition models":[{"model":"uniform", "compositions":[1], "max distance slab top":100e3}]} ], - "temperature models":[{"model":"mass conserving", "density":3300, "plate velocity":0.02, + "temperature models":[{"model":"mass conserving", "density":3300, "spreading velocity":0.02, "subducting velocity":0.02, "ridge coordinates":[[[30,0],[30,10]]],"coupling depth":50e3, "min distance slab top":-200e3, "max distance slab top":300e3}], "composition models":[{"model":"uniform", "compositions":[2], "max distance slab top":100e3}] diff --git a/contrib/world_builder/doc/sphinx/conf.py b/contrib/world_builder/doc/sphinx/conf.py index 885a3b495d5..e607aebdba9 100644 --- a/contrib/world_builder/doc/sphinx/conf.py +++ b/contrib/world_builder/doc/sphinx/conf.py @@ -20,8 +20,8 @@ project = 'Geodynamic World Builder' copyright = '2024, The authors of the Geodynamic World Builder' # The full version, including alpha/beta/rc tags -release = '0.6.0' -html_title = "Manual GWB 0.6.0" +release = '1.0.0' +html_title = "Manual GWB 1.0.0" # -- General configuration --------------------------------------------------- diff --git a/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/building_documentation.md b/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/building_documentation.md index da945df8395..e3ca61c0a14 100644 --- a/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/building_documentation.md +++ b/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/building_documentation.md @@ -2,7 +2,7 @@ Building documentation ========================= -To build the documentation locally, you first need to ensure you have the right Python packages installed. The list of packages required to build the documentation is located in `$WORLD_BUILDER_SOURCE_DIR/doc/requirements.txt`, and can be installed using +To build the documentation locally, you first need to ensure you have the right Python packages installed. The list of packages required to build the documentation is located in `$WORLD_BUILDER_SOURCE_DIR/doc/requirements.txt`, and can be installed using: :::{code-block} pip install -r $WORLD_BUILDER_SOURCE_DIR/doc/requirements.txt @@ -15,7 +15,9 @@ cd $WORLD_BUILDER_SOURCE_DIR/build \\ cmake -D WB_BUILD_DOCUMENTATION=ON . ::: -This adds the target for the documentation in `$WORLD_BUILDER_SOURCE_DIR/build/doc`, to finish building the documentation run the final commands: +This adds the target for the documentation in `$WORLD_BUILDER_SOURCE_DIR/build/doc`. + +To finish building the documentation run the final commands: :::{code-block} cd $WORLD_BUILDER_SOURCE_DIR/build/doc \\ diff --git a/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/documentation_style_guide.md b/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/documentation_style_guide.md index 1af6c1c264f..8ff0a6cb285 100644 --- a/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/documentation_style_guide.md +++ b/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/documentation_style_guide.md @@ -2,7 +2,7 @@ Documentation style guide ========================= -Not only are there many ways to style the documents, there are also many ways with sphinx to reach the same output. To attempt to unify the style of the documentation and the documentation code, this page contains some general styling recommendations. +Not only are there many ways to style the documents, there are also many ways with Sphinx to reach the same output. To attempt to unify the style of the documentation and the documentation code, this page contains some general styling recommendations. # Page titles @@ -14,7 +14,7 @@ The page label should always be a path, separated by colons (`:`) in the followi # Including advanced elements -When possible, the use of colons (`:`) should be preferred over the use of grave accents (\`) when creating advanced elements such as todo notes, figures, code blocks, or tables. This means that: +When possible, the use of colons (`:`) should be preferred over the use of grave accents (\`) when creating advanced elements such as todo notes, figures, code blocks or tables. This means that: ::::{code-block} md :::{note} @@ -32,11 +32,11 @@ My Note # Including World Builder files -When including a world builder file, it is important to be able to focus on the parts which are important, while also enabling the reader to see the surrounding context and the whole file. Furthermore, the user should have the capability to run the models themselves and get the same output as shown. To standardize this the following structure is strongly encouraged. +When including a World Builder file, it is important to be able to focus on the parts which are important, while also enabling the reader to see the surrounding context and the whole file. Furthermore, the user should have the capability to run the models themselves and get the same output as shown. To standardize this the following structure is strongly encouraged. -1. The world builder file and a corresponding grid file need to be stored separately, either in the cookbook, or in the _static directory. -2. The use of a tab-set with a tab with important lines and a tab with the full world builder file, highlighting important lines. -3. Adding at least a link to the world builder file and a grid file to visualize it, preferably also a link to a `.pvtu` file which allows to get the same output as the figure, if present. +1. The World Builder file and a corresponding grid file need to be stored separately, either in the cookbook, or in the _static directory. +2. The use of a tab-set with a tab with important lines and a tab with the full World Builder file, highlighting important lines. +3. Adding at least a link to the World Builder file and a grid file to visualize it, preferably also a link to a `.pvtu` file which allows to get the same output as the figure, if present. 4. Add a figure of the output. Below is an example code block. diff --git a/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/important_syntax.md b/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/important_syntax.md index ce87083c111..3f7d6cf7293 100644 --- a/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/important_syntax.md +++ b/contrib/world_builder/doc/sphinx/developer_manual/contributing_to_the_documentation/important_syntax.md @@ -2,10 +2,10 @@ Important syntax =============== -The world builder is using [sphinx](https://www.sphinx-doc.org) to generate the documentation. Sphinx accepts multiple variants of extended markdown, but in this project we are using [myst](https://myst-parser.readthedocs.io). Below we list some common commands to use. +The World Builder is using [sphinx](https://www.sphinx-doc.org) to generate the documentation. Sphinx accepts multiple variants of extended markdown, but in this project we are using [myst](https://myst-parser.readthedocs.io). Below we list some common commands to use. :::{note} -Everything in this file will look like garbage in a regular markdown viewer, like if you’re viewing this on github. Viewing it on readthedocs will render everything properly. +Everything in this file will look like garbage in a regular markdown viewer, like if you’re viewing this on GitHub. Viewing it on readthedocs will render everything properly. ::: (title)= @@ -75,7 +75,7 @@ Links are written in the following way: # Admonitions -Adding notes, warnings or and todos which stand out can be done with the following syntax: +Adding notes, warnings or todos boxes can be done with the following syntax: ::::{code-block} md :::{todo} @@ -164,7 +164,7 @@ Adding figures looks similar to notes and todo's: ::::{code-block} md :::{figure} ../../../../doc/sphinx/_static/images/user_manual/basic_starter_tutorial/BST_19.png -:name: BST_19_synatx +:name: BST_19_syntax :alt: Basic Starter Tutorial section 19 highres result. :align: center @@ -173,7 +173,7 @@ Basic Starter Tutorial section 19 high resolution result. This has 8 times the r :::: :::{figure} ../../../../doc/sphinx/_static/images/user_manual/basic_starter_tutorial/BST_19.png -:name: BST_19_synatx +:name: BST_19_syntax :alt: Basic Starter Tutorial section 19 highres result. :align: center @@ -189,7 +189,7 @@ Creating code blocks is similar to making notes or todos. Instead of `{note}` yo :lineno-start: 1 :emphasize-lines: 3,4 { - "version":0.6.0, + "version":1.0, "coordinate system": {"model":"cartesian"}, } ::: @@ -201,7 +201,7 @@ The lines starting with a colon (:) specify certain parameters which can be set, :lineno-start: 1 :emphasize-lines: 3,4 { - "version":0.6.0, + "version":1.0, "coordinate system": {"model":"cartesian"}, "Features":[] } @@ -215,7 +215,7 @@ If you need to wrap a code block in a code block, you just use more : on the out :lineno-start: 1 :emphasize-lines: 3,4 { - "version":0.6.0, + "version":1.0, "coordinate system": {"model":"cartesian"}, } ::: diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/03_optional_coordinate_system.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/03_optional_coordinate_system.md index 285759dfdcb..9d54c58a11d 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/03_optional_coordinate_system.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/03_optional_coordinate_system.md @@ -54,7 +54,7 @@ Our previous minimal example looks like this: lineno-start: 1 --- { - "version": "0.6", + "version": "1.0", "features":[ ] } ``` @@ -66,7 +66,7 @@ We can be more explicit and add one line setting it to the default value. Howeve lineno-start: 1 --- { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "features":[ ] } @@ -80,7 +80,7 @@ If you want to have a spherical model, please see {ref}`part:user_manual:chap:co lineno-start: 1 --- { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin segment"}, "features":[ ] } diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/06_oceanic_plate_temperature.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/06_oceanic_plate_temperature.md index c3b61ae13ee..c02b865088f 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/06_oceanic_plate_temperature.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/06_oceanic_plate_temperature.md @@ -66,5 +66,5 @@ If you are familiar with the half space cooling model, you would also think some :alt: Basic Starter Tutorial section 6. :align: center -Basic Starter Tutorial section 6. The top part of the figure shows where the composition as been assigned as an object. Currently it only shows composition 0 as green and is now limited to 100km depth. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. This allows to better view the ridge. -``` \ No newline at end of file +Basic Starter Tutorial section 6. The top part of the figure shows where the composition has been assigned as an object. Currently it only shows composition 0 as green and is now limited to 100km depth. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. This allows a better view of the ridge. +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/07_subducting_plate_oceanic_part.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/07_subducting_plate_oceanic_part.md index d3cee82ead7..5b21c56bf0d 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/07_subducting_plate_oceanic_part.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/07_subducting_plate_oceanic_part.md @@ -2,7 +2,7 @@ Subducting plate oceanic part ======================== -Now that we have made the overriding (Caribbean) plate, it is time to add the oceanic part of the subducting plate (the Atlantic). To do this, we just need to add another object to the feature list. For this plate we will assume the oceanic lithosphere is really old, and the temperature gradient in the lithosphere is therefore linear between a top temperature of 293.15K and the adiabatic temperature at the max depth of the plate. Luckily for us, this is the default in the world builder, so we will only need to provide the `model` (`linear`) and the `max depth`, which we will set to 100km. +Now that we have made the overriding (Caribbean) plate, it is time to add the oceanic part of the subducting plate (the Atlantic). To do this, we just need to add another object to the feature list. For this plate we will assume the oceanic lithosphere is really old, and the temperature gradient in the lithosphere is therefore linear between a top temperature of 293.15K and the adiabatic temperature at the max depth of the plate. Luckily for us, this is the default in the World Builder, so we will only need to provide the `model` (`linear`) and the `max depth`, which we will set to 100km. For the composition, we are going to do something a bit more special. A common thing you will probably want to do with compositional fields is have multiple layers of them within a feature. This is very easy to do in the GWB. If you remember from the last section, both the `temperature models` and `compositional models` are a list of objects. Making layers is thus as easy as adding multiple compositional models with each their own `min depth` and `max depth`. @@ -66,4 +66,4 @@ If you provide a `min depth` or `max depth` outside the min and max depth range :align: center Basic Starter Tutorial section 7. The top part of the figure shows where the composition as been assigned as an object. Currently is shows composition 0 as green, composition 1 as yellow and composition 3 as blue. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. Both the oceanic plate with the ridge and the oceanic plate with a linear temperature profile are visible. -``` \ No newline at end of file +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/08_passive_margin_variable_depth.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/08_passive_margin_variable_depth.md index e2342d10d3e..2964fea0f94 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/08_passive_margin_variable_depth.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/08_passive_margin_variable_depth.md @@ -2,7 +2,7 @@ Adding a passive margin with variable depth ============================ -Although we have hinted towards it before, there is also an [area feature](part:user_manual:chap:concepts:sec:area_features) called `continental plate`. It works as you would expect based on what you have seen with the oceanic plate, but we are going to use it to do something very cool in our model: have variable depths of a feature or even of layers within a given feature! +Although we have hinted towards it before, there is also an [area feature](part:user_manual:chap:concepts:sec:area_features) called `continental plate`. It works as you would expect based on what you have seen with the oceanic plate. Here we are going to use it to do something very cool in our model - specify a feature with variable depths for the whole feature and also layers within the given feature! To showcase this, we will be adding a passive margin to our model at the overriding plate side of our model. To start out, we need to know that both the `min depth` and `max depth` accept two types of values: a number and an array of values at points. @@ -10,9 +10,9 @@ To showcase this, we will be adding a passive margin to our model at the overrid For an example of what this looks like in technical terms, see {ref}`open_features_items_oneOf_1_max-depth`. ``` -The number input we have seen before, and just sets the maximum depth to a single value. The value at points system works a bit differently, but can be used to achieve the same result. To start out easy, this is exactly what we are going to to for the `max depth` of the continental feature. +The number input we have seen before and it sets the maximum depth of the feature to a single value. The value at points system works a bit differently and can be used to achieve the same result. To start, this is exactly what we are going to do for the `max depth` of the continental feature. -The value at points system creates a list of points, which at least include all the edge points of an object and assigns a value to them. Then to get the actual value at the rest of the points, `max depth` in our case, an interpolation between some close points is performed to get the value at that point. +The value at points system creates a list of points that includes all the initial edge points of an object and assigns a value to them. We then interpolate between close points to obtain the actual values at the remaining points according to the model type, e.g., linearly to the points set in `max depth` below. Below are two examples of how to first set the depth of two points to 200 km, and then an example of how to also set a third point to a value of 100 km. @@ -86,5 +86,5 @@ If you provide a point twice, explicitly, or implicitly through the use of the c :alt: Basic Starter Tutorial section 8. :align: center -Basic Starter Tutorial section 8. The top part of the figure shows where the composition as been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow and composition 3 as blue. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. The added continental plate with variable thickness of it's two layers is now visible on the left side of the image. -``` \ No newline at end of file +Basic Starter Tutorial section 8. The top part of the figure shows where the composition has been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow and composition 3 as blue. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. The added continental plate with variable thickness of its two layers is now visible on the left side of the image. +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/09_optional_adding_mantle_layer.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/09_optional_adding_mantle_layer.md index 3acbfad3b2d..66bc60fc865 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/09_optional_adding_mantle_layer.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/09_optional_adding_mantle_layer.md @@ -2,13 +2,13 @@ Optional adding mantle layer ============================ -Sometimes you want precise control over what is happening in the mantle. In this case we want to have a specific composition for the mantle. +Sometimes you want precise control over what is happening in the mantle. In this case, we would want to have a specific composition for the mantle. ```{note} -This is not always needed. For example in the visco-plastic material model in the FEM ASPECT, if no composition is defined, it is assumed to be a background composition. If you don't define a composition in an area in the world builder, the world builder will tell anyone who wants to know the composition at that location that the fraction of every composition is zero there. +This is not always needed. For example in the visco-plastic material model in the FEM ASPECT, if no composition is defined, it is assumed to be a background composition. If you don't define a composition in an area in the World Builder, the World Builder will tell anyone who wants to know the composition at that location that the fraction of every composition is zero. ``` -We are going to add the mantle layer as the first object in the feature list, so that other features can override it if necessary. The model name for a mantle layer is `mantle layer`, and we will name it "upper mantle". Because we already have used compositions 0,1 and 3, and will use 2 later, we are going to set this to composition 4. We could also specify a different temperature model for this. The default is `adiabatic`, but you can easily set it to something else, or change the parameters of the adiabatic gradient. +We are going to add the mantle layer as the first object in the feature list so that subsequent features can override it if desired. The model name for a mantle layer is `mantle layer`, and we will name it "upper mantle". Because we already have used compositions 0, 1 and 3 and will use 2 later, we will set this object to composition 4. We could also specify a different temperature model. The default is `adiabatic` but you can easily set it to something else or change the parameters of the adiabatic gradient. ```{note} The [potential mantle temperature](open_features_items_oneOf_3_temperature-models_items_oneOf_1_potential-mantle-temperature), the [thermal expansion coefficient](open_features_items_oneOf_3_temperature-models_items_oneOf_1_thermal-expansion-coefficient) and the [specific heat](open_features_items_oneOf_3_temperature-models_items_oneOf_1_specific-heat) here have a default value of -1. This is, like we have seen before, a special value. In this case it means that the global value is used (as you can read in the documentation of the value). It is **strongly recommended to only set the global values** so that the whole setup remains self-consistent, but if you do want to change it in individual locations, you can! @@ -68,5 +68,5 @@ The [potential mantle temperature](open_features_items_oneOf_3_temperature-model :alt: Basic Starter Tutorial section 9. :align: center -Basic Starter Tutorial section 9. The top part of the figure shows where the composition as been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow, composition 3 as blue and composition 4 is shown as red. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. We will not show composition 4 in future figures anymore to be able to show other features more clearly. -``` \ No newline at end of file +Basic Starter Tutorial section 9. The top part of the figure shows where the composition has been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow, composition 3 as blue and composition 4 is shown as red. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. We will not show composition 4 in future figures anymore to be able to show other features more clearly. +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/10_adding_basic_subducting_plate.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/10_adding_basic_subducting_plate.md index a6139947f53..140c2e2bc3e 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/10_adding_basic_subducting_plate.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/10_adding_basic_subducting_plate.md @@ -1,18 +1,18 @@ (part:user_manual:chap:basic_starter_tutorial:sec:BST_10_adding_basic_subducting_plate)= -Adding basic subducting plate +Adding a basic subducting plate ============================ -Now that we have a solid understanding of how area features like `oceanic plate`, `continental plate` and `mantle layer` work, we can start to take a look at [line features](part:user_manual:chap:concepts:sec:line_features). In this case we are going to take a look at the `subducting plate`, but note that there is also the `fault`. On a fundamental level, they both function in a very similar way, with the main difference being that the slab has a slab surface and a up and down direction from that surface, while the fault has a center surface and is symmetric on both sides. The temperature and compositional models available for each may also differ. +Now that we have a solid understanding of how area features like `oceanic plate`, `continental plate` and `mantle layer` work, we can start to take a look at [line features](part:user_manual:chap:concepts:sec:line_features). In this case we are going to take a look at the `subducting plate`, but note that there is also the `fault` feature. On a fundamental level, they both function in a very similar way. The main difference is that the slab has a slab surface and a up and down direction from that surface while the fault has a center surface and is symmetric on both sides. The temperature and compositional models available for each may also differ. There are five properties these line features objects require: -1. `model`: The name of the model, e.g. `subducting plate` or `fault` +1. `model`: The name of the model, e.g., `subducting plate` or `fault` 2. `name`: Like with area features, a descriptive name to improve readability of the file. -3. `coordinates`: The location of where the feature intersects with the surface. For a subducting plate, this would be the location of the trench. This is what the line in line feature refers to, these coordinates represent a line on a map view. -4. `dip point`: This is often most confusing to new users, but the concept is really simple. If the slab or fault makes an angle, we need to decide what side of the line (trench for a slab) the slab or fault is dipping. There are many ways of doing this, but in GWB it is done through simply defining a point on one side of the line. The slab or fault will then dip in that direction. It is often good to choose a point far away from the trench, especially if the trench makes a lot of curves. -5. `segments`: Defines the downwards part of the subducting plate (i.e. the slab) or fault. Each segment requires at least a `length` as a number, a `thickness`, which is an array of one or two numbers and an `angle`, which is also an array of one or two numbers. We will first show an example to get our first slab in the model before explaining further. It will hopefully be easier to understand when you see it in action in this and the next few sections. +3. `coordinates`: The location of where the feature intersects with the surface. For a subducting plate, this would be the location of the trench. This is what the line in line feature refers. These coordinates represent a line in a map view. +4. `dip point`: This is often the most confusing concept to new users but it is really quite simple. If the slab or fault makes an angle, we need to decide which side of the line (or trench for a slab) the slab or fault is dipping. There are many ways of doing this but in GWB it is done through simply defining a point on one side of the line. The slab or fault will then dip in that direction. It is often good to choose a point far away from the trench especially if the trench makes a lot of curves. +5. `segments`: Defines the downwards part of the subducting plate (i.e., the slab) or fault. Each segment requires at least a `length` as a number, a `thickness` which is an array of one or two numbers and an `angle` which is also an array of one or two numbers. We will first show an example to get our first slab in the model before explaining further. It will hopefully be easier to understand when you see it in action in this and the next few sections. -For the example in this section, we will make a trench at the interface of two area features, where the slab is dipping with a constant angle of 60 degrees in the direction of the overriding plate. We make this slab (segment) 300 km long and give it a constant thickness of 100 km. So we set a dip point at a location on the side of the overriding plate with respect to the trench. In this case the origin (0,0) will work fine and the location is shown as the turquoise sphere in the figure below. +For the example in this section, we will make a trench at the interface of two area features where the slab is dipping with a constant angle of 60 degrees in the direction of the overriding plate. We make this slab (segment) 300 km long and give it a constant thickness of 100 km. We set a dip point at a location on the side of the overriding plate with respect to the trench. In this case the origin (0,0) will work fine and the location is shown as the turquoise sphere in the figure below. ```{note} The result will not change based on the exact location of the dip point, as long as it is on one side of all the lines formed by connecting the line features coordinate points. @@ -76,5 +76,5 @@ The explanation can be significantly improved by adding conceptual figures :alt: Basic Starter Tutorial section 10. :align: center -Basic Starter Tutorial section 10. The top part of the figure shows where the composition as been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The turquoise sphere is the location of the dip point. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. +Basic Starter Tutorial section 10. The top part of the figure shows where the composition has been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The turquoise sphere is the location of the dip point. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. ``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/11_dip_change_in_segment.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/11_dip_change_in_segment.md index 0952caadd50..0c983761700 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/11_dip_change_in_segment.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/11_dip_change_in_segment.md @@ -2,9 +2,9 @@ Dip change in segment ===================== -What we have achieved in the last section was already great, but slabs in the Earth are usually not thought of as straight lines. For example, near the surface they start with a dip angle of zero and then increase their dip with depth to maybe 60 degrees. So, how do we do that in the world builder? +What we have achieved in the last section was already great but slabs in the Earth are usually not thought of as straight lines. For example, near the surface they start with a dip angle of zero and then may increase their dip with depth to maybe 60 degrees. So, how do we do this in the World Builder? -This is where the array for the `angle` comes in. Last time we provided just one value, but we are also allowed to provide two values. If you provide two values, the first value is the dip angle at the top of the segment and the second value is the dip angle at the bottom of the segment. So to achieve this we only need to add a zero before the 60 in the `angle` array. +This is where the array for the `angle` comes in. Last time we provided just one value but we are also allowed to provide two values. If you provide two values, the first value is the dip angle at the top of the segment and the second value is the dip angle at the bottom of the segment. To achieve this we only need to add a zero before the 60 in the `angle` array. ::::::{tab-set} @@ -69,5 +69,5 @@ The explanation can be significantly improved by adding conceptual figures :alt: Basic Starter Tutorial section 11. :align: center -Basic Starter Tutorial section 11. The top part of the figure shows where the composition as been assigned as an object. Currently is shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. -``` \ No newline at end of file +Basic Starter Tutorial section 11. The top part of the figure shows where the composition has been assigned as an object. Currently is shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/12_subducting_plate_temperatures.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/12_subducting_plate_temperatures.md index 6a99a102fa3..a865fc9aa54 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/12_subducting_plate_temperatures.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/12_subducting_plate_temperatures.md @@ -2,9 +2,9 @@ Subducting plate temperatures ============================= -Before exploring the segments more, let's briefly discuss temperature model for the subducting plates. The temperature structure of a slab can be quite complicated. +Before exploring the segments more, let's briefly discuss temperature models for the subducting plates. The temperature structure of a slab can be quite complicated. -A model which was often used is a temperature structure from or based on the McKenzie temperature structure {cite:p}`McKenzie_1970`. In the world builder this is implemented as the subducting plate temperature model called the `plate model` {cite:t}`turcotte_schubert_2014`. If you want to use this, you will need to provide a reference density and a plate velocity like so: +A model which was often used as a temperature structure is from or based on the McKenzie temperature structure {cite:p}`McKenzie_1970`. In the World Builder this is implemented as the subducting plate temperature model called the `plate model` ({cite:t}`turcotte_schubert_2014`). If you want to use this, you will need to provide a reference density and a plate velocity like: ```{code-block} json --- lineno-start: 1 @@ -14,7 +14,7 @@ lineno-start: 1 ] ``` -This is still perfectly valid and usable, but the approach has some fundamental issues, including that the way the temperature structure is set up is not mass conservative. This is why the `mass conserving` slab temperature model was developed (Todo: insert reference when paper is done). This temperature model also brings a lot of other large and small improvements, which we can't go over in this starter tutorial. Although this temperature is generally recommended over the older McKenzie model, it is also is a bit more complicated in usage. So to keep this tutorial simple, we will use the `plate model` here, but we strongly recommend looking into the `mass conserving` temperature model for subduction models. +This is still perfectly valid and usable but the approach has some fundamental issues including that the temperature structure set-up is not mass conservative. This is why the `mass conserving` slab temperature model was developed (Todo: insert reference when paper is done). This temperature model also brings a lot of other large and small improvements which we can't go over in this starter tutorial. Although this temperature is generally recommended over the older McKenzie model, it is also is a bit more complicated in usage. So to keep this tutorial simple, we will use the `plate model` here, but we strongly recommend looking into the `mass conserving` temperature model for subduction models. ```{todo} Create a cookbook for the mass conserving temperature structure and point to it from here. @@ -76,5 +76,5 @@ Create a cookbook for the mass conserving temperature structure and point to it :alt: Basic Starter Tutorial section 12. :align: center -Basic Starter Tutorial section 12. The top part of the figure shows where the composition as been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. -``` \ No newline at end of file +Basic Starter Tutorial section 12. The top part of the figure shows where the composition has been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/13_subducting_slab_adding_a_segment.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/13_subducting_slab_adding_a_segment.md index 0999b923442..5dcda97ee4b 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/13_subducting_slab_adding_a_segment.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/13_subducting_slab_adding_a_segment.md @@ -1,8 +1,8 @@ (part:user_manual:chap:basic_starter_tutorial:sec:13_subducting_slab_adding_a_segment)= -Subducting slab adding a segment +Subducting slab: adding a segment ================================ -Although our slabs can now bend, real slabs actually can bend many times in many different ways. The way this is parameterized for faults and slab in the world builder is through dividing the slab into in multiple segments. In other words, a segment is a downwards section of a slab or a fault. Each segment can have their own parameters and models attached to it. +Although our slabs can now bend, real slabs actually can bend many times in many different ways. The way this is parameterized for faults and slab in the World Builder is through dividing the slab into multiple segments. A segment is a downwards section of a slab or a fault. Each segment can have their own parameters and models attached to it. So how do we achieve this? We just add a second object to the segments line. Usually you will want to make sure that the end of one segment has the same angle and thickness as the beginning of the next segment. So in this case we end the first segment with an angle of 60 degrees and begin the second segment also with an angle of 60 degrees. @@ -60,5 +60,5 @@ So how do we achieve this? We just add a second object to the segments line. Usu :alt: Basic Starter Tutorial section 13. :align: center -Basic Starter Tutorial section 13. The top part of the figure shows where the composition as been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. -``` \ No newline at end of file +Basic Starter Tutorial section 13. The top part of the figure shows where the composition has been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/14_different_models_in_segments.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/14_different_models_in_segments.md index bdfb61c761f..6dc0d1a08b3 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/14_different_models_in_segments.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/14_different_models_in_segments.md @@ -2,9 +2,9 @@ Different models in segments ============================ -Slabs and faults can be heterogeneous in depth, and this is very easy to represent in the world builder. The segments we just added allow for defining temperature and compositional models, which overwrite the temperature and compositional models for the whole feature. You can think of it this way: you set the feature models for each segment in the feature (line 54 and 55) and then you overwrite that feature model in the segments where you want something else. +Slabs and faults can be heterogeneous in depth. This is very easy to represent in the World Builder. The segments we just added allow for defining temperature and compositional models that overwrite the temperature and compositional models for the whole feature. You can think of it this way (remember the painting analogy!): you set the feature models for each segment in the feature (line 54 and 55) and then you overwrite that feature model in the segments where you want something else. -In this case we want to have two layers in the first segment, where the upper layer is the same as the upper layer of the oceanic plate and the lower layer is the same as the rest of the subducting plate. This layout is mainly chosen to highlight how the transition between the oceanic plate can both be seamless and sharp. +In this case we want to have two layers in the first segment where the upper layer is the same as the upper layer of the oceanic plate and the lower layer is the same as the rest of the subducting plate. This layout is mainly chosen to highlight how the transition between the oceanic plate can both be seamless and sharp. ::::::{tab-set} @@ -61,5 +61,5 @@ In this case we want to have two layers in the first segment, where the upper la :alt: Basic Starter Tutorial section 14. :align: center -Basic Starter Tutorial section 14. The top part of the figure shows where the composition as been assigned as an object. Currently is shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. -``` \ No newline at end of file +Basic Starter Tutorial section 14. The top part of the figure shows where the composition has been assigned as an object. Currently it shows composition 0 as green, composition 1 as yellow, composition 2 as purple and composition 3 as blue. Composition 4 is not shown to be able to see the slab. The front half of the overriding plate (composition 1) has also been removed to be able to better view the slab. The bottom part shows the temperature as seen slightly from below where only temperatures between 300K and 1600K are shown. +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/15_different_segments_in_sections.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/15_different_segments_in_sections.md index 59bfb3f683e..52046a25871 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/15_different_segments_in_sections.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/15_different_segments_in_sections.md @@ -2,15 +2,15 @@ Different segments in sections =============================== -Slabs and faults may not only vary in depth, but may also vary a lot laterally. To accomplish this in the world builder, we will need to introduce the term "sections". Sections are a way to overwrite the segments at a specified coordinate. +Slabs and faults may vary in depth as well as laterally. To accomplish this in the World Builder, we will need to introduce the term "sections". Sections are a way to overwrite the segments at a specified coordinate. ```{note} One way of thinking about segments and sections is that together they form a 2D grid. The segments form one axis (down dip) and the sections form the other axis (along strike). ``` -**Sections replace all the segments at that coordinate, and it is required that all sections have the same number of segments**. +**Sections replace all the segments at that coordinate. It is required that all sections have the same number of segments**. -In this case we are going to change the values for the first coordinate, which is coordinate 0. We keep the length the same as the default first segment (compare lines 48 and 75), but we make the second segment a bit shorter (compare lines 52 and 58). We also do not change the feature composition model in the first segment, but we do change it in the second segment, where we set it equal to composition of the lower part of the oceanic plate for the whole thickness of the segment (line 59). +In this case we are going to change the values for the first coordinate, which is coordinate 0. We keep the length the same as the default first segment (compare lines 48 and 75), but we make the second segment a bit shorter (compare lines 52 and 58). We also do not change the feature composition model in the first segment, but we do change it in the second segment where we set it equal to composition of the lower part of the oceanic plate for the whole thickness of the segment (line 59). ::::::{tab-set} diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/16_mass_conserving.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/16_mass_conserving.md index edc04db6ad6..968397bc597 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/16_mass_conserving.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/16_mass_conserving.md @@ -2,10 +2,10 @@ Changing to a mass conserving slab temperature =============================== -In [the section on slab temperature](part:user_manual:chap:basic_starter_tutorial:sec:12_subducting_plate_temp), we added the {cite:t}`McKenzie_1970` (that is the plate model) slab temperature structure. Although this is a good first order approximation of a slab temperature, the recently develop {cite:t}`Billen_Fraters_AGU_2023` temperature model has many advantages over it, with the downside that is it a bit more involved to use. In this chapter we will just switch out the plate model with mass conserving, without going too much into the detail of how to actually use it in practice. If you plan to use the mass conserving temperature model, please first read through both the [Simple Subduction Model: 2D Cartesian](part:user_manual:chap:cookbooks:sec:simple_subduction_2d_cartesian)and [Simple Subduction Model: 2D Chunk](part:user_manual:chap:cookbooks:sec:simple_subduction_2d_chunk) cookbooks. +In the section on [slab temperature](part:user_manual:chap:basic_starter_tutorial:sec:12_subducting_plate_temp), we added the {cite:t}`McKenzie_1970` (that is the plate model) slab temperature structure. Although this is a good first order approximation of a slab temperature, the recently develop {cite:t}`Billen_Fraters_AGU_2023` temperature model has many advantages over it, with the downside that is it a bit more involved to use. In this chapter we will just switch out the plate model with mass conserving without going too much into the detail of how to actually use it in practice. If you plan to use the mass conserving temperature model, please first read through both the [Simple Subduction Model: 2D Cartesian](part:user_manual:chap:cookbooks:sec:simple_subduction_2d_cartesian)and [Simple Subduction Model: 2D Chunk](part:user_manual:chap:cookbooks:sec:simple_subduction_2d_chunk) cookbooks. ## Changing the Subducting oceanic plate temperature -One of the advantages of using the mass conserving slab temperature model is that it doesn't assume a linear temperature structure at the trench. This means we can seamlessly connect a half space cooling model or a plate model to the mass conseving slab. But for that to make sense, we need to change the subucting oceanic plate to a half space cooling model (the default for the mass conserving temperature model). In this case we will put the ridge far away. Because the half space model can affect the temperature at much deeper depths, we also need to change the max depth for the feature and models. Note that we will want to keep the max depth of the composition 100km, so we now need to set a max depth in the lowest layer of the composition model. +One of the advantages of using the mass conserving slab temperature model is that it doesn't assume a linear temperature structure at the trench. This means we can seamlessly connect a half space cooling model or a plate model to the mass conserving slab. But for that to make sense, we need to change the subucting oceanic plate to a half space cooling model (the default for the mass conserving temperature model). In this case we will put the ridge far away. Because the half space model can affect the temperature at much deeper depths, we also need to change the max depth for the feature and models. Note that we will want to keep the max depth of the composition at 100km, so we now need to set a max depth in the lowest layer of the composition model. ::::::{tab-set} @@ -59,9 +59,9 @@ One of the advantages of using the mass conserving slab temperature model is tha ## Changing to a mass conserving temperature model -One of the main idea's behind the mass consering model is that the the slab not just warms up, but that the surrounding material cools down as well, thus conserving energy/mass. This means that the subducting plate feature needs to be able to change the temperature outside the slab. Given that a feature can only change the temperature inside it's defined area we need to expand that area. This means we need to increase the thickness, which we set to 300 km. But this only extends the slab feature downwards, while we also want to cool down the material above the slab. For this we can use the `top truncation` parameter. The `top truncation` parameter is designed to make the slab thinner from above, but when set to a negative value we can actually make it thicker! In this case we will set it to -100 km. +One of the main ideas behind the mass conserving model is that the the slab not just warms up, but that the surrounding material cools down as well, thus conserving energy/mass. This means that the subducting plate feature needs to be able to change the temperature outside the slab. Given that a feature can only change the temperature inside it's defined area we need to expand that area. Hence, we need to increase the thickness which we originally set to 300 km. But this only extends the slab feature downwards, while we also want to cool down the material above the slab. For this we can use the `top truncation` parameter. The `top truncation` parameter is designed to make the slab thinner from above but when set to a negative value we can actually make it thicker! In this case we will set it to -100 km. -Now that all the preparatory work is done, we can finally add the mass conserving model itself. The two most important new parameter are the `ridge coordinates`, which should be the same as the subducting oceanic plate ridge coordinates in this case and a parameter called `coupling depth`. The `coupling depth` defines the depth at which the slab surface first comes in contact with the hot mantle wedge. +Now that all the preparatory work is done, we can finally add the mass conserving model itself. The two most important new parameter are the `ridge coordinates` which should be the same as the subducting oceanic plate ridge coordinates in this case, and a parameter called `coupling depth`. The `coupling depth` defines the depth at which the slab surface first comes in contact with the hot mantle wedge. ::::::{tab-set} @@ -119,7 +119,7 @@ Now that all the preparatory work is done, we can finally add the mass conservin :alt: Basic Starter Tutorial section 18 highres result. :align: center -Basic Starter Tutorial section 16 high resolution result, were a mass conserving slab temperature is used. This has 8 times the resolution then the grid file above. +Basic Starter Tutorial section 16 high resolution result, where a mass conserving slab temperature is used. This has 8 times the resolution than the grid file above. ``` -These are only the very basics of what the mass conserving temperature model can do. If you are interested in using this temperature model, please read the [Simple Subduction Model: 2D Cartesian](part:user_manual:chap:cookbooks:sec:simple_subduction_2d_cartesian)and [Simple Subduction Model: 2D Chunk](part:user_manual:chap:cookbooks:sec:simple_subduction_2d_chunk) cookbooks. \ No newline at end of file +These are only the very basics of what the mass conserving temperature model can do. If you are interested in using this temperature model, please read the [Simple Subduction Model: 2D Cartesian](part:user_manual:chap:cookbooks:sec:simple_subduction_2d_cartesian)and [Simple Subduction Model: 2D Chunk](part:user_manual:chap:cookbooks:sec:simple_subduction_2d_chunk) cookbooks. diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/17_plume.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/17_plume.md index fd2220eab10..dba66bc9a0b 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/17_plume.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/17_plume.md @@ -2,7 +2,7 @@ Adding a mantle plume =============================== -The last feature we will be adding in this tutorial is the `plume`. The plume is defined by a set of coordinates which represent where the plume is at different depths. The depth are set through the `cross section depths` parameter, hich requires as many depths as there are coordinates. Each cross-section is an ellipse, for which the parameters can be set individually. Please see [the plume feature description](part:user_manual:chap:parameter_documentation:sec:features:subsec:plume) for more information on what each of the parameters do. In this case we will increase the eccentricity of the plume at the top. +The last feature we will be adding in this tutorial is the `plume`. The plume is defined by a set of coordinates which represent where the plume is at different depths. The depths are set through the `cross section depths` parameter which requires as many depths as there are coordinates. Each cross-section is an ellipse for which the parameters can be set individually. Please see [the plume feature description](part:user_manual:chap:parameter_documentation:sec:features:subsec:plume) for more information on what each of the parameters do. In this case we will increase the eccentricity of the plume at the top. With the definition of the area the feature plume contains completed, we can now add a temperature and compositional structure. A gaussian is a good first order approximation of the temperature, so we will add that as the temperature model. This temperature model allows you to set change the gaussian distribution parameters for each depth segment. Note that in this case we are not replacing the temperature, but adding to the temperature which was already there. @@ -62,8 +62,8 @@ With the definition of the area the feature plume contains completed, we can now :alt: Basic Starter Tutorial section 17 highres result. :align: center -Basic Starter Tutorial section 17 high resolution result, were the plume feature is used. In both the top and bottom figure, but area where the plume feature is present is shown. On the top this area is colored red, and on the bottom figure it is colored by temperature. This has 8 times the resolution then the grid file above. +Basic Starter Tutorial section 17 high resolution result, where the plume feature is used. In both the top and bottom figure, the area where the plume feature is present is shown. On the top this area is colored red, and on the bottom figure it is colored by temperature. This has 8 times the resolution then the grid file above. ``` -This covers the full complexity of the world builder model we are building for this tutorial. Well done for making it this far! You should now be able to start building your own models in the world builder. In the next two tutorials, we are going to take a look at how to create a 2D model from this 3D model and how to make this into a spherical model. \ No newline at end of file +This covers the full complexity of the World Builder model we are building for this tutorial. Well done for making it this far! You should now be able to start building your own models in the World Builder. In the next two tutorials, we are going to take a look at how to create a 2D model from this 3D model and how to make this into a spherical model. diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/18_2D_models.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/18_2D_models.md index 68d0ab68efa..30c3afa2212 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/18_2D_models.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/18_2D_models.md @@ -2,14 +2,14 @@ 2D models ========= -2D models in the world builder are nothing more than a cross section through a 3D model. This means that what you need to do to be able to create a 2D model is to state in the world builder file the origin of the cross section (where x=0 and depth=0) and in what direction the cross section should go (the positive x direction). You can set this with the global parameter `cross section`. It takes two points. The first point is the origin, and the second point is the direction of the cross section. +2D models in the World Builder are nothing more than a cross section through a 3D model. To create a 2D model, you must state in the World Builder file the origin of the cross section (where x=0 and depth=0) and in what direction the cross section should go (the positive x direction). You can set this with the global parameter `cross section`. It takes two points. The first point is the origin, and the second point is the direction of the cross section. ```{note} -The origin of the 3D model doesn't have to be the same as the origin of the 2D cross section. In the model below the origin of the 2D cross section is located at [0,200e3] (plane view, depth=0). +The origin of the 3D model doesn't have to be the same as the origin of the 2D cross section. In the model below, the origin of the 2D cross section is located at [0,450e3] (plane view, depth=0). ``` ```{note} -Even if you have a `cross section` defined in your world builder file, you can still use it for 3D models. If you want to use 2D models, you will need to have a cross section defined. +Even if you have a `cross section` defined in your World Builder file, you can still use it for 3D models. If you want to use 2D models, you will need to have a cross section defined. ``` Now, let's add a cross section through the slab in our model. @@ -73,7 +73,7 @@ You need to change the gridfile to a 2D grid to be able to see the difference. :alt: Basic Starter Tutorial section 18 highres result. :align: center -The location of the 2D cross-section in the 3D model. The turquoise arrow show at the dot `[0,450e3]` and at the arrow head `[100e3,450e3]`, where `[0,450e3]` is the origin of the 2D plane. The semi-transparent turquoise plane show the full cross section location. +The location of the 2D cross-section in the 3D model. The turquoise arrow shows the cross section origin, the dot at `[0,450e3]`, and direction, arrow head at `[100e3,450e3]` of the 2D plane. The semi-transparent turquoise plane show the full cross section location. ``` ```{figure} ../../../../doc/sphinx/_static/images/user_manual/basic_starter_tutorial/BST_18.png @@ -81,5 +81,5 @@ The location of the 2D cross-section in the 3D model. The turquoise arrow show a :alt: Basic Starter Tutorial section 18 highres result. :align: center -Basic Starter Tutorial section 18 high resolution result. This has 4 times the resolution than the grid file above. Note that some of the issues with the slab, like it's abrubt ending can be solved by using the mass conserving temperature model instead of the McKenzie plate model. -``` \ No newline at end of file +Basic Starter Tutorial section 18 high resolution result. This has 4 times the resolution than the grid file above. Note that some of the issues with the slab, like its abrubt ending can be solved by using the mass conserving temperature model instead of the McKenzie plate model. +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/19_spherical_models.md b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/19_spherical_models.md index e5594fbf4bc..ef783420181 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/19_spherical_models.md +++ b/contrib/world_builder/doc/sphinx/user_manual/basic_starter_tutorial/19_spherical_models.md @@ -4,12 +4,12 @@ Spherical models We have already mentioned spherical coordinates in {ref}`part:user_manual:chap:basic_starter_tutorial:sec:03_coordinate_system`. In this section we will focus on converting our current Cartesian model to a spherical model. -To make this change two changes need to be made: +To convert, two changes need to be made: 1. The coordinate system should be set to spherical and a depth method needs to be set. 2. The coordinates you provide need to be changed from Cartesian to spherical. -To simplify the transition for this tutorial, we will just divide each coordinate by 10000, which will get is into a nice degree range. +To simplify the transition for this tutorial, we will just divide each coordinate by 10000 which will put this into a nice degree range. ::::::{tab-set} @@ -67,4 +67,4 @@ To simplify the transition for this tutorial, we will just divide each coordinat :align: center Basic Starter Tutorial section 19 high resolution result. This has 8 times the resolution than the grid file above. Note that you can see the Earth's curvature! -``` \ No newline at end of file +``` diff --git a/contrib/world_builder/doc/sphinx/user_manual/installation/installing_prerequisites.md b/contrib/world_builder/doc/sphinx/user_manual/installation/installing_prerequisites.md index 455f8ed877f..9f74367994f 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/installation/installing_prerequisites.md +++ b/contrib/world_builder/doc/sphinx/user_manual/installation/installing_prerequisites.md @@ -71,31 +71,16 @@ There are three main ways to install on Windows. The recommended way is to use Linux subsystems for Windows (see ). In this case, start Linux in the Windows terminal and follow the Linux installation description. -If you want to have a native installation, the two main options are using MinGW or Visual Studio. -In both cases, it might be possible to install both the Fortran wrapper and the Python wrapper, but we have not gotten it to work on our tester setup. -Currently we know that with MinGW you can create a successful Fortran wrapper, and with Visual Studio you can create a successful Python wrapper. -The problem with Python in MinGW is not entirely clear, but it seems that only Visual Studio compilers are supported. -So it may or may not be able to find the GWB Python module when it is compiled and installed. -The problem with Fortran with Visual Studio is that you need to install a Fortran compiler somehow, so if you know how to do that, please contribute. +If you want to have a native installation we recommend using Visual Studio to compile the world builder. The only problem that we are aware of is using Fortran with Visual Studio. The problem here is that you need to install a Fortran compiler somehow, so if you know how to do that, please contribute. ::::{tab-set} -:::{tab-item} MinGW -1. If not already installed, install Chocolatey (). In a PowerShell, you can install it with the following command (in one line): `Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(’https://chocolatey.org/install.ps1’))` -2. Run in a terminal `choco install msys2` -3. Open a mingw64 terminal -4. Run in a mingw64 terminal `pacman –noconfirm -Syu` -5. Run in a mingw64 terminal `pacman -S mingw-w64-x86_64-toolchain` -6. Run in a mingw64 terminal `pacman –noconfirm -S dos2unix` -::: - :::{tab-item} Visual Studio 1. If not already installed, install Chocolatey (). In a PowerShell, you can install it with the following command (in one line): `Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(’https://chocolatey.org/install.ps1’))` 2. Run in a terminal `choco install cmake` 3. For a Python wrapper, run in a terminal `choco install python` 4. For a Python wrapper, run in a terminal `choco install swig` ::: - :::: ::::: :::::: diff --git a/contrib/world_builder/doc/sphinx/user_manual/parameter_documentation/features/index.md b/contrib/world_builder/doc/sphinx/user_manual/parameter_documentation/features/index.md index 4af711ea535..05ab6a5e639 100644 --- a/contrib/world_builder/doc/sphinx/user_manual/parameter_documentation/features/index.md +++ b/contrib/world_builder/doc/sphinx/user_manual/parameter_documentation/features/index.md @@ -2,7 +2,7 @@ Features ====================== -There are a number of different features that can be added to the world builder world: +There are a number of different features that can be added to the World Builder world: ```{toctree} :caption: Features diff --git a/contrib/world_builder/doc/world_builder_declarations.schema.json b/contrib/world_builder/doc/world_builder_declarations.schema.json index ad7ec82e445..5466eb6031b 100644 --- a/contrib/world_builder/doc/world_builder_declarations.schema.json +++ b/contrib/world_builder/doc/world_builder_declarations.schema.json @@ -1391,6 +1391,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -2160,6 +2205,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -2740,6 +2830,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -3390,6 +3525,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -3970,6 +4150,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -5098,6 +5323,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -6362,7 +6632,159 @@ "oneOf": [ { "type": "object", - "description": "Uniform compositional model. Sets constant compositional field.", + "description": "TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'.", + "additionalProperties": false, + "required": [ + "model", + "compositions" + ], + "properties": { + "model": { + "default value": "", + "type": "string", + "description": "The name of the composition model.", + "enum": [ + "tian water content" + ] + }, + "min depth": { + "description": "The depth in meters from which the composition of this feature is present.", + "oneOf": [ + { + "default value": 0.0, + "type": "number", + "description": "" + }, + { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "additionalProperties": false, + "minItems": 1, + "maxItems": 2, + "description": "", + "items": { + "anyOf": [ + { + "type": "number", + "default value": 0.0 + }, + { + "type": "array", + "minItems": 1, + "maxItems": 4294967295, + "items": { + "type": "array", + "minItems": 1, + "maxItems": 2, + "items": { + "type": "number" + } + } + } + ] + } + } + } + ] + }, + "max depth": { + "description": "The depth in meters to which the composition of this feature is present.", + "oneOf": [ + { + "default value": 1.7976931348623157e308, + "type": "number", + "description": "" + }, + { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "additionalProperties": false, + "minItems": 1, + "maxItems": 2, + "description": "", + "items": { + "anyOf": [ + { + "type": "number", + "default value": 1.7976931348623157e308 + }, + { + "type": "array", + "minItems": 1, + "maxItems": 4294967295, + "items": { + "type": "array", + "minItems": 1, + "maxItems": 2, + "items": { + "type": "number" + } + } + } + ] + } + } + } + ] + }, + "compositions": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the labels of the composition which are present there.", + "items": { + "default value": 0, + "type": "integer", + "description": "" + } + }, + "density": { + "default value": 3000.0, + "type": "number", + "description": "The reference density used for determining the lithostatic pressure for calculating the bound water content." + }, + "lithology": { + "default value": "peridotite", + "type": "string", + "description": "The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'." + }, + "initial water content": { + "default value": 5.0, + "type": "number", + "description": "The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology." + }, + "cutoff pressure": { + "default value": 10.0, + "type": "number", + "description": "The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'." + }, + "operation": { + "default value": "replace", + "type": "string", + "description": "Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option.", + "enum": [ + "replace", + "replace defined only", + "add", + "subtract" + ] + } + } + }, + { + "type": "object", + "description": "Uniform compositional model. Sets constant compositional field.", "additionalProperties": false, "required": [ "model", @@ -6828,6 +7250,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -7324,6 +7791,137 @@ "type": "array", "items": { "oneOf": [ + { + "type": "object", + "description": "Random uniform distribution grains model. The size of the grains can be independently set to a single value or to a random distribution.", + "additionalProperties": false, + "required": [ + "model", + "compositions" + ], + "properties": { + "model": { + "default value": "", + "type": "string", + "description": "The name of the grains model.", + "enum": [ + "random uniform distribution deflected" + ] + }, + "min depth": { + "default value": 0.0, + "type": "number", + "description": "The depth in meters from which the grains of this feature are present." + }, + "max depth": { + "default value": 1.7976931348623157e308, + "type": "number", + "description": "The depth in meters to which the grains of this feature are present." + }, + "compositions": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the integer labels of the composition which are present there.", + "items": { + "default value": 0, + "type": "integer", + "description": "" + } + }, + "orientation operation": { + "default value": "replace", + "type": "string", + "description": "Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value (add, not implemented). Replacing implies that all values not explicitly defined are set to zero.", + "enum": [ + "replace", + "multiply" + ] + }, + "grain sizes": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list of the size of all of the grains in each composition. If set to <0, the size will be randomized between 0 and 1.", + "items": { + "default value": 1.0, + "type": "number", + "description": "" + } + }, + "normalize grain sizes": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1.", + "items": { + "default value": true, + "type": "boolean", + "description": "" + } + }, + "deflections": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list of the deflections of all of the grains in each composition between 0 and 1.", + "items": { + "default value": 1.0, + "type": "number", + "description": "" + } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + } + }, { "type": "object", "description": "Uniform grains model. All grains start exactly the same.", @@ -7659,7 +8257,8 @@ "additionalProperties": false, "required": [ "model", - "plate velocity" + "spreading velocity", + "subducting velocity" ], "properties": { "model": { @@ -7695,8 +8294,8 @@ "type": "number", "description": "The reference density of the subducting plate in $kg/m^3$" }, - "plate velocity": { - "description": "The velocity with which the plate subducts in meters per year. Default is 5 cm/yr", + "spreading velocity": { + "description": "The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr", "oneOf": [ { "default value": 0.05, @@ -7741,10 +8340,10 @@ ] }, "subducting velocity": { - "description": "The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr]", + "description": "The velocity with which the slab is subducting through time. Default is 5 cm/yr", "oneOf": [ { - "default value": -1.0, + "default value": 0.05, "type": "number", "description": "" }, @@ -7761,7 +8360,7 @@ "uniqueItems": false, "description": "", "items": { - "default value": -1.0, + "default value": 0.05, "type": "number", "description": "" } @@ -8057,6 +8656,78 @@ } } }, + { + "type": "object", + "description": "TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'.", + "additionalProperties": false, + "required": [ + "model", + "compositions" + ], + "properties": { + "model": { + "default value": "", + "type": "string", + "description": "The name of the composition model.", + "enum": [ + "tian water content" + ] + }, + "min distance slab top": { + "default value": 0.0, + "type": "number", + "description": "todo The depth in meters from which the composition of this feature is present." + }, + "max distance slab top": { + "default value": 1.7976931348623157e308, + "type": "number", + "description": "todo The depth in meters to which the composition of this feature is present." + }, + "density": { + "default value": 3000.0, + "type": "number", + "description": "The reference density used for determining the lithostatic pressure for calculating the bound water content." + }, + "compositions": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the labels of the composition which are present there.", + "items": { + "default value": 0, + "type": "integer", + "description": "" + } + }, + "lithology": { + "default value": "peridotite", + "type": "string", + "description": "The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'." + }, + "initial water content": { + "default value": 5.0, + "type": "number", + "description": "The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology." + }, + "cutoff pressure": { + "default value": 10.0, + "type": "number", + "description": "The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'." + }, + "operation": { + "default value": "replace", + "type": "string", + "description": "Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option.", + "enum": [ + "replace", + "replace defined only", + "add", + "subtract" + ] + } + } + }, { "type": "object", "description": "Uniform compositional model. Sets constant compositional field.", @@ -8285,6 +8956,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -8514,7 +9230,8 @@ "additionalProperties": false, "required": [ "model", - "plate velocity" + "spreading velocity", + "subducting velocity" ], "properties": { "model": { @@ -8550,8 +9267,8 @@ "type": "number", "description": "The reference density of the subducting plate in $kg/m^3$" }, - "plate velocity": { - "description": "The velocity with which the plate subducts in meters per year. Default is 5 cm/yr", + "spreading velocity": { + "description": "The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr", "oneOf": [ { "default value": 0.05, @@ -8596,10 +9313,10 @@ ] }, "subducting velocity": { - "description": "The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr]", + "description": "The velocity with which the slab is subducting through time. Default is 5 cm/yr", "oneOf": [ { - "default value": -1.0, + "default value": 0.05, "type": "number", "description": "" }, @@ -8616,7 +9333,7 @@ "uniqueItems": false, "description": "", "items": { - "default value": -1.0, + "default value": 0.05, "type": "number", "description": "" } @@ -8912,6 +9629,78 @@ } } }, + { + "type": "object", + "description": "TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'.", + "additionalProperties": false, + "required": [ + "model", + "compositions" + ], + "properties": { + "model": { + "default value": "", + "type": "string", + "description": "The name of the composition model.", + "enum": [ + "tian water content" + ] + }, + "min distance slab top": { + "default value": 0.0, + "type": "number", + "description": "todo The depth in meters from which the composition of this feature is present." + }, + "max distance slab top": { + "default value": 1.7976931348623157e308, + "type": "number", + "description": "todo The depth in meters to which the composition of this feature is present." + }, + "density": { + "default value": 3000.0, + "type": "number", + "description": "The reference density used for determining the lithostatic pressure for calculating the bound water content." + }, + "compositions": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the labels of the composition which are present there.", + "items": { + "default value": 0, + "type": "integer", + "description": "" + } + }, + "lithology": { + "default value": "peridotite", + "type": "string", + "description": "The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'." + }, + "initial water content": { + "default value": 5.0, + "type": "number", + "description": "The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology." + }, + "cutoff pressure": { + "default value": 10.0, + "type": "number", + "description": "The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'." + }, + "operation": { + "default value": "replace", + "type": "string", + "description": "Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option.", + "enum": [ + "replace", + "replace defined only", + "add", + "subtract" + ] + } + } + }, { "type": "object", "description": "Uniform compositional model. Sets constant compositional field.", @@ -9140,6 +9929,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -9439,7 +10273,8 @@ "additionalProperties": false, "required": [ "model", - "plate velocity" + "spreading velocity", + "subducting velocity" ], "properties": { "model": { @@ -9475,8 +10310,8 @@ "type": "number", "description": "The reference density of the subducting plate in $kg/m^3$" }, - "plate velocity": { - "description": "The velocity with which the plate subducts in meters per year. Default is 5 cm/yr", + "spreading velocity": { + "description": "The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr", "oneOf": [ { "default value": 0.05, @@ -9521,10 +10356,10 @@ ] }, "subducting velocity": { - "description": "The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr]", + "description": "The velocity with which the slab is subducting through time. Default is 5 cm/yr", "oneOf": [ { - "default value": -1.0, + "default value": 0.05, "type": "number", "description": "" }, @@ -9541,7 +10376,7 @@ "uniqueItems": false, "description": "", "items": { - "default value": -1.0, + "default value": 0.05, "type": "number", "description": "" } @@ -9837,6 +10672,78 @@ } } }, + { + "type": "object", + "description": "TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'.", + "additionalProperties": false, + "required": [ + "model", + "compositions" + ], + "properties": { + "model": { + "default value": "", + "type": "string", + "description": "The name of the composition model.", + "enum": [ + "tian water content" + ] + }, + "min distance slab top": { + "default value": 0.0, + "type": "number", + "description": "todo The depth in meters from which the composition of this feature is present." + }, + "max distance slab top": { + "default value": 1.7976931348623157e308, + "type": "number", + "description": "todo The depth in meters to which the composition of this feature is present." + }, + "density": { + "default value": 3000.0, + "type": "number", + "description": "The reference density used for determining the lithostatic pressure for calculating the bound water content." + }, + "compositions": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the labels of the composition which are present there.", + "items": { + "default value": 0, + "type": "integer", + "description": "" + } + }, + "lithology": { + "default value": "peridotite", + "type": "string", + "description": "The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'." + }, + "initial water content": { + "default value": 5.0, + "type": "number", + "description": "The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology." + }, + "cutoff pressure": { + "default value": 10.0, + "type": "number", + "description": "The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'." + }, + "operation": { + "default value": "replace", + "type": "string", + "description": "Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option.", + "enum": [ + "replace", + "replace defined only", + "add", + "subtract" + ] + } + } + }, { "type": "object", "description": "Uniform compositional model. Sets constant compositional field.", @@ -10065,6 +10972,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -10294,7 +11246,8 @@ "additionalProperties": false, "required": [ "model", - "plate velocity" + "spreading velocity", + "subducting velocity" ], "properties": { "model": { @@ -10330,8 +11283,8 @@ "type": "number", "description": "The reference density of the subducting plate in $kg/m^3$" }, - "plate velocity": { - "description": "The velocity with which the plate subducts in meters per year. Default is 5 cm/yr", + "spreading velocity": { + "description": "The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr", "oneOf": [ { "default value": 0.05, @@ -10376,10 +11329,10 @@ ] }, "subducting velocity": { - "description": "The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr]", + "description": "The velocity with which the slab is subducting through time. Default is 5 cm/yr", "oneOf": [ { - "default value": -1.0, + "default value": 0.05, "type": "number", "description": "" }, @@ -10396,7 +11349,7 @@ "uniqueItems": false, "description": "", "items": { - "default value": -1.0, + "default value": 0.05, "type": "number", "description": "" } @@ -10692,6 +11645,78 @@ } } }, + { + "type": "object", + "description": "TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'.", + "additionalProperties": false, + "required": [ + "model", + "compositions" + ], + "properties": { + "model": { + "default value": "", + "type": "string", + "description": "The name of the composition model.", + "enum": [ + "tian water content" + ] + }, + "min distance slab top": { + "default value": 0.0, + "type": "number", + "description": "todo The depth in meters from which the composition of this feature is present." + }, + "max distance slab top": { + "default value": 1.7976931348623157e308, + "type": "number", + "description": "todo The depth in meters to which the composition of this feature is present." + }, + "density": { + "default value": 3000.0, + "type": "number", + "description": "The reference density used for determining the lithostatic pressure for calculating the bound water content." + }, + "compositions": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the labels of the composition which are present there.", + "items": { + "default value": 0, + "type": "integer", + "description": "" + } + }, + "lithology": { + "default value": "peridotite", + "type": "string", + "description": "The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'." + }, + "initial water content": { + "default value": 5.0, + "type": "number", + "description": "The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology." + }, + "cutoff pressure": { + "default value": 10.0, + "type": "number", + "description": "The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'." + }, + "operation": { + "default value": "replace", + "type": "string", + "description": "Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option.", + "enum": [ + "replace", + "replace defined only", + "add", + "subtract" + ] + } + } + }, { "type": "object", "description": "Uniform compositional model. Sets constant compositional field.", @@ -10920,6 +11945,51 @@ "type": "number", "description": "" } + }, + "basis rotation matrices": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the rotation matrices of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } + } + }, + "basis Euler angles z-x-z": { + "type": "array", + "minItems": 0, + "maxItems": 4294967295, + "uniqueItems": false, + "description": "A list with the z-x-z Euler angles of the grains which are present there for each compositions.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "uniqueItems": false, + "description": "", + "items": { + "default value": 0.0, + "type": "number", + "description": "" + } + } } } }, @@ -11046,7 +12116,7 @@ } }, "random number seed": { - "default value": 4294967295, + "default value": -1, "type": "integer", "description": "This allows the input of a preferred random number seed to generate random numbers. If no input is given, this value is -1 and triggers the use of default seed = 1." } diff --git a/contrib/world_builder/doc/world_builder_declarations_closed.md b/contrib/world_builder/doc/world_builder_declarations_closed.md index baae334c8fe..7dd0d32a419 100644 --- a/contrib/world_builder/doc/world_builder_declarations_closed.md +++ b/contrib/world_builder/doc/world_builder_declarations_closed.md @@ -2034,6 +2034,72 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_1_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_1_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_1_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_1_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_1_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_1_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_1_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -3120,6 +3186,72 @@ :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::: + +:::::::::::: + +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::: + +::::::::::::: + +:::::::::::::: + ::::::::::::::: @@ -3911,6 +4043,72 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_2_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_2_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_2_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_2_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_2_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_2_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_2_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -4806,6 +5004,72 @@ :::::::::::: +::::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::: + +:::::::::: + +::::::::::: + +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::: + +::::::::::: + +:::::::::::: + ::::::::::::: @@ -5597,44 +5861,110 @@ :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items -::::::::::::::: - -:::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3 -:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3 - -- **type**:object -- **description**:Uniform grains model. All grains start exactly the same. -- **additionalProperties**:false -- **required**:[model, compositions] - -::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/model -:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3_model - -- **default value**: -- **type**:string -- **description**:The name of the grains model. -- **enum**:[uniform] -:::::::::::::: +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items -::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/min distance fault center -:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3_min-distance-fault-center +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items - **default value**:0.0 - **type**:number -- **description**:The distance from the fault center in meters from which the composition of this feature is present. -:::::::::::::: +- **description**: +::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/max distance fault center -:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3_max-distance-fault-center +:::::::::::: + +::::::::::::: -- **default value**:1.7976931348623157e308 -- **type**:number -- **description**:The distance from the fault in meters to which the composition of this feature is present. :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/compositions +::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::: + +::::::::::::: + +:::::::::::::: + + + +::::::::::::::: + +:::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3 +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3 + +- **type**:object +- **description**:Uniform grains model. All grains start exactly the same. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/model +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3_model + +- **default value**: +- **type**:string +- **description**:The name of the grains model. +- **enum**:[uniform] +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/min distance fault center +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3_min-distance-fault-center + +- **default value**:0.0 +- **type**:number +- **description**:The distance from the fault center in meters from which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/max distance fault center +:name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3_max-distance-fault-center + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:The distance from the fault in meters to which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/compositions :name: closed_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3_compositions - **type**:array @@ -7334,6 +7664,72 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_3_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_3_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_3_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_3_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_3_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_3_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_3_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -9300,7 +9696,7 @@ :name: closed_features_items_oneOf_4_composition-models_items_oneOf_1 - **type**:object -- **description**:Uniform compositional model. Sets constant compositional field. +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. - **additionalProperties**:false - **required**:[model, compositions] @@ -9310,7 +9706,7 @@ - **default value**: - **type**:string - **description**:The name of the composition model. -- **enum**:[uniform] +- **enum**:[tian water content] :::::::::::::::: ::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/min depth @@ -9483,22 +9879,36 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/fractions -:name: closed_features_items_oneOf_4_composition-models_items_oneOf_1_fractions +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/density +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_1_density -- **type**:array -- **minItems**:1 -- **maxItems**:4294967295 -- **uniqueItems**:false -- **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/fractions/items -:name: closed_features_items_oneOf_4_composition-models_items_oneOf_1_fractions_items +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. +:::::::::::::::: -- **default value**:1.0 +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/lithology +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_1_lithology + +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/initial water content +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_1_initial-water-content + +- **default value**:5.0 - **type**:number -- **description**: -::::::::::::::: +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/cutoff pressure +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_1_cutoff-pressure + +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. :::::::::::::::: ::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/operation @@ -9514,98 +9924,81 @@ ::::::::::::::::: - -::::::::::::::::::: - -:::::::::::::::::::: - -::::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models -:name: closed_features_items_oneOf_4_grains-models - -- **description**:A list of grains models. -- **default value**: -- **type**:array -:::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items -:name: closed_features_items_oneOf_4_grains-models_items - -::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf -:name: closed_features_items_oneOf_4_grains-models_items_oneOf - -:::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1 +:::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2 +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2 - **type**:object -- **description**:Random uniform distribution grains model. The size of the grains can be independently set to a single value or to a random distribution. +- **description**:Uniform compositional model. Sets constant compositional field. - **additionalProperties**:false - **required**:[model, compositions] -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/model -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_model +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/model +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_model - **default value**: - **type**:string -- **description**:The name of the grains model. -- **enum**:[random uniform distribution] +- **description**:The name of the composition model. +- **enum**:[uniform] :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth - **description**:The depth in meters from which the composition of this feature is present. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf +:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf -::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/1 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_1 +::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/1 +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_1 - **default value**:0.0 - **type**:number - **description**: :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2 +::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2 +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items +:::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:2 - **description**: -::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items +::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items -:::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf +:::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf -::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/1 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_1 +::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf/1 +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.0 :::::::::: -::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2 +::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf/2 +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2_items +:::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf/2/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:2 -::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2/items/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2_items_items +::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf/2/items/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::::: @@ -9624,64 +10017,64 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth - **description**:The depth in meters to which the composition of this feature is present. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf +:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf -::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/1 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_1 +::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/1 +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_1 - **default value**:1.7976931348623157e308 - **type**:number - **description**: :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2 +::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2 +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items +:::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:2 - **description**: -::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items +::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items -:::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf +:::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf -::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/1 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_1 +::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf/1 +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:1.7976931348623157e308 :::::::::: -::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2 +::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf/2 +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2_items +:::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf/2/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:2 -::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2/items/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2_items_items +::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf/2/items/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::::: @@ -9700,16 +10093,16 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/compositions -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_compositions +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/compositions +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_compositions - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false -- **description**:A list with the integer labels of the composition which are present there. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/compositions/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_compositions_items +- **description**:A list with the labels of the composition which are present there. +:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/compositions/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_compositions_items - **default value**:0 - **type**:integer @@ -9718,25 +10111,16 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/orientation operation -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_orientation-operation - -- **default value**:replace -- **type**:string -- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value (add, not implemented). Replacing implies that all values not explicitly defined are set to zero. -- **enum**:[replace] -:::::::::::::::: - -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/grain sizes -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_grain-sizes +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/fractions +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_fractions - **type**:array -- **minItems**:0 +- **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false -- **description**:A list of the size of all of the grains in each composition. If set to <0, the size will be randomized between 0 and 1. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/grain sizes/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_grain-sizes_items +- **description**:TA list of compositional fractions corresponding to the compositions list. +:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/fractions/items +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_fractions_items - **default value**:1.0 - **type**:number @@ -9745,40 +10129,284 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/normalize grain sizes -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_normalize-grain-sizes - -- **type**:array -- **minItems**:0 -- **maxItems**:4294967295 -- **uniqueItems**:false -- **description**:A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/normalize grain sizes/items -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_normalize-grain-sizes_items - -- **default value**:true -- **type**:boolean -- **description**: -::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/operation +:name: closed_features_items_oneOf_4_composition-models_items_oneOf_2_operation +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] :::::::::::::::: ::::::::::::::::: -:::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2 -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2 -- **type**:object -- **description**:Random uniform distribution grains model. The size of the grains can be independently set to a single value or to a random distribution. -- **additionalProperties**:false -- **required**:[model, compositions] +::::::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/model -:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2_model +:::::::::::::::::::: -- **default value**: +::::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models +:name: closed_features_items_oneOf_4_grains-models + +- **description**:A list of grains models. +- **default value**: +- **type**:array +:::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items +:name: closed_features_items_oneOf_4_grains-models_items + +::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf +:name: closed_features_items_oneOf_4_grains-models_items_oneOf + +:::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1 + +- **type**:object +- **description**:Random uniform distribution grains model. The size of the grains can be independently set to a single value or to a random distribution. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/model +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_model + +- **default value**: +- **type**:string +- **description**:The name of the grains model. +- **enum**:[random uniform distribution] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth + +- **description**:The depth in meters from which the composition of this feature is present. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf + +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/1 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_1 + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2 + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items + +- **type**:array +- **additionalProperties**:false +- **minItems**:1 +- **maxItems**:2 +- **description**: +::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items + +:::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf + +::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/1 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_1 + +- **type**:number +- **default value**:0.0 +:::::::::: + +::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2 + +- **type**:array +- **minItems**:1 +- **maxItems**:4294967295 +:::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2_items + +- **type**:array +- **minItems**:1 +- **maxItems**:2 +::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2/items/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2_items_items + +- **type**:number +:::::::: + +::::::::: + +:::::::::: + + +:::::::::::: + +::::::::::::: + +:::::::::::::: + + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth + +- **description**:The depth in meters to which the composition of this feature is present. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf + +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/1 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_1 + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2 + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items + +- **type**:array +- **additionalProperties**:false +- **minItems**:1 +- **maxItems**:2 +- **description**: +::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items + +:::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf + +::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/1 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_1 + +- **type**:number +- **default value**:1.7976931348623157e308 +:::::::::: + +::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2 + +- **type**:array +- **minItems**:1 +- **maxItems**:4294967295 +:::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2_items + +- **type**:array +- **minItems**:1 +- **maxItems**:2 +::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2/items/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2_items_items + +- **type**:number +:::::::: + +::::::::: + +:::::::::: + + +:::::::::::: + +::::::::::::: + +:::::::::::::: + + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/compositions +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the integer labels of the composition which are present there. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/compositions/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/orientation operation +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_orientation-operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value (add, not implemented). Replacing implies that all values not explicitly defined are set to zero. +- **enum**:[replace] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/grain sizes +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_grain-sizes + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of the size of all of the grains in each composition. If set to <0, the size will be randomized between 0 and 1. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/grain sizes/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_grain-sizes_items + +- **default value**:1.0 +- **type**:number +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/normalize grain sizes +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_normalize-grain-sizes + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/normalize grain sizes/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_1_normalize-grain-sizes_items + +- **default value**:true +- **type**:boolean +- **description**: +::::::::::::::: + +:::::::::::::::: + + + +::::::::::::::::: + +:::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2 +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2 + +- **type**:object +- **description**:Random uniform distribution grains model. The size of the grains can be independently set to a single value or to a random distribution. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/model +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2_model + +- **default value**: - **type**:string - **description**:The name of the grains model. - **enum**:[random uniform distribution deflected] @@ -10017,6 +10645,72 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_4_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -10738,7 +11432,7 @@ :name: closed_features_items_oneOf_5_grains-models_items_oneOf_1 - **type**:object -- **description**:Uniform grains model. All grains start exactly the same. +- **description**:Random uniform distribution grains model. The size of the grains can be independently set to a single value or to a random distribution. - **additionalProperties**:false - **required**:[model, compositions] @@ -10748,7 +11442,7 @@ - **default value**: - **type**:string - **description**:The name of the grains model. -- **enum**:[uniform] +- **enum**:[random uniform distribution deflected] :::::::::::::::: ::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/min depth @@ -10785,32 +11479,216 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/rotation matrices -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_rotation-matrices +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/orientation operation +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_orientation-operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value (add, not implemented). Replacing implies that all values not explicitly defined are set to zero. +- **enum**:[replace, multiply] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/grain sizes +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_grain-sizes + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of the size of all of the grains in each composition. If set to <0, the size will be randomized between 0 and 1. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/grain sizes/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_grain-sizes_items + +- **default value**:1.0 +- **type**:number +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/normalize grain sizes +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_normalize-grain-sizes + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/normalize grain sizes/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_normalize-grain-sizes_items + +- **default value**:true +- **type**:boolean +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/deflections +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_deflections + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of the deflections of all of the grains in each composition between 0 and 1. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/deflections/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_deflections_items + +- **default value**:1.0 +- **type**:number +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis rotation matrices +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis rotation matrices/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis rotation matrices/items/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis Euler angles z-x-z +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + + + +::::::::::::::::: + +:::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2 +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2 + +- **type**:object +- **description**:Uniform grains model. All grains start exactly the same. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/model +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_model + +- **default value**: +- **type**:string +- **description**:The name of the grains model. +- **enum**:[uniform] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/min depth +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_min-depth + +- **default value**:0.0 +- **type**:number +- **description**:The depth in meters from which the grains of this feature are present. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/max depth +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_max-depth + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:The depth in meters to which the grains of this feature are present. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/compositions +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the integer labels of the composition which are present there. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/compositions/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/rotation matrices +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_rotation-matrices - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:A list with the rotation matrices of the grains which are present there for each compositions. -:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/rotation matrices/items -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_rotation-matrices_items +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/rotation matrices/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_rotation-matrices_items - **type**:array - **minItems**:3 - **maxItems**:3 - **uniqueItems**:false - **description**: -::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/rotation matrices/items/items -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_rotation-matrices_items_items +::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/rotation matrices/items/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_rotation-matrices_items_items - **type**:array - **minItems**:3 - **maxItems**:3 - **uniqueItems**:false - **description**: -:::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/rotation matrices/items/items/items -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_rotation-matrices_items_items_items +:::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/rotation matrices/items/items/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_rotation-matrices_items_items_items - **default value**:0.0 - **type**:number @@ -10823,24 +11701,24 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/Euler angles z-x-z -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_Euler-angles-z-x-z +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/Euler angles z-x-z +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_Euler-angles-z-x-z - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. -:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/Euler angles z-x-z/items -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_Euler-angles-z-x-z_items +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/Euler angles z-x-z/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_Euler-angles-z-x-z_items - **type**:array - **minItems**:3 - **maxItems**:3 - **uniqueItems**:false - **description**: -::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/Euler angles z-x-z/items/items -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_Euler-angles-z-x-z_items_items +::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_Euler-angles-z-x-z_items_items - **default value**:0.0 - **type**:number @@ -10851,8 +11729,8 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/orientation operation -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_orientation-operation +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/orientation operation +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_orientation-operation - **default value**:replace - **type**:string @@ -10860,16 +11738,16 @@ - **enum**:[replace, multiply] :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/grain sizes -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_grain-sizes +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/grain sizes +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_grain-sizes - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:A list of the size of all of the grains in each composition. If set to <0, the size will be set so that the total is equal to 1. -:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/grain sizes/items -:name: closed_features_items_oneOf_5_grains-models_items_oneOf_1_grain-sizes_items +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/grain sizes/items +:name: closed_features_items_oneOf_5_grains-models_items_oneOf_2_grain-sizes_items - **default value**:-1.0 - **type**:number @@ -11202,7 +12080,7 @@ - **type**:object - **description**:Mass conserving temperature model. The temperature model uses the heat content (proportional to to thermal mass anomaly) to define a smooth temperature profile that conserves mass along the slab length. An empirical model, using error functions for smooth transitions, is used to define how the minimum temperature increases with depth and how the location of the minimum temperature shifts into the slab interior. The slab is divided into top and bottom parts, which meet at the location where the minimum temperature occurs in the slab. For the bottom slab, the temperature is defined by a half-space cooling model. For the top of the slab the temperature is defined by one side of a 1D infinite space cooling model: this function was chosen to have a smoother temperature function across the minimum temperature position. The age of the overriding plate is used so the slab temperature at shallow depth smoothly transitions to the temperature of the overriding plate: this is not perfect, and is affected by the value of "top truncation" parameter subducting plate. Notes:1) the parameter "thickness" for the subducting plate segments needs to be defined but is not used. 2) because we use a negative truncation for distance above the slab, it is recommended to usedepth method:begin at end segment, in the main part of the world-builder file.Other methods may lead to gpas in temperatures at the segment boundaries.3)the empirical model used to define how Tmin increases with depth and how the position of Tmin shift with depth is expected to change somewhat after better calibrating with further tests. - **additionalProperties**:false -- **required**:[model, plate velocity] +- **required**:[model, spreading velocity, subducting velocity] ::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/model :name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_model @@ -11246,64 +12124,64 @@ - **description**:The reference density of the subducting plate in $kg/m^3$ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity -- **description**:The velocity with which the plate subducts in meters per year. Default is 5 cm/yr -:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf +- **description**:The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf -::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/1 -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_1 +::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/1 +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_1 - **default value**:0.05 - **type**:number - **description**: :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2 -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2 +::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2 +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items +:::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:18446744073709551615 - **description**: -::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items +::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items -:::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf +:::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf -::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/1 -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_1 +::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/1 +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.05 :::::::: -::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2 -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2 +::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2 +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items +:::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:18446744073709551615 -::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items/items -:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items_items +::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items/items +:name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::: @@ -11325,14 +12203,14 @@ ::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/subducting velocity :name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_subducting-velocity -- **description**:The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr] +- **description**:The velocity with which the slab is subducting through time. Default is 5 cm/yr :::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/subducting velocity/oneOf :name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf ::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/subducting velocity/oneOf/1 :name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_1 -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::::: @@ -11356,7 +12234,7 @@ ::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/subducting velocity/oneOf/2/items/items :name: closed_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_2_items_items -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::: @@ -11780,7 +12658,7 @@ :name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2 - **type**:object -- **description**:Uniform compositional model. Sets constant compositional field. +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. - **additionalProperties**:false - **required**:[model, compositions] @@ -11790,7 +12668,7 @@ - **default value**: - **type**:string - **description**:The name of the composition model. -- **enum**:[uniform] +- **enum**:[tian water content] :::::::::::::: ::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/min distance slab top @@ -11809,6 +12687,14 @@ - **description**:todo The depth in meters to which the composition of this feature is present. :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/density +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_density + +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. +:::::::::::::: + ::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/compositions :name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_compositions @@ -11827,16 +12713,104 @@ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/fractions -:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_fractions +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/lithology +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_lithology + +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/initial water content +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_initial-water-content + +- **default value**:5.0 +- **type**:number +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/cutoff pressure +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_cutoff-pressure + +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/operation +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::::: + + + +::::::::::::::: + +:::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3 +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3 + +- **type**:object +- **description**:Uniform compositional model. Sets constant compositional field. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/model +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_model + +- **default value**: +- **type**:string +- **description**:The name of the composition model. +- **enum**:[uniform] +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/min distance slab top +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_min-distance-slab-top + +- **default value**:0.0 +- **type**:number +- **description**:todo The depth in meters from which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/max distance slab top +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_max-distance-slab-top + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:todo The depth in meters to which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/compositions +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the labels of the composition which are present there. +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/compositions/items +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/fractions +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_fractions - **type**:array - **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/fractions/items -:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_fractions_items +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/fractions/items +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_fractions_items - **default value**:1.0 - **type**:number @@ -11845,8 +12819,8 @@ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/operation -:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_operation +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/operation +:name: closed_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_operation - **default value**:replace - **type**:string @@ -12089,6 +13063,72 @@ :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::: + +:::::::::::: + +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::: + +::::::::::::: + +:::::::::::::: + ::::::::::::::: @@ -12402,7 +13442,7 @@ - **type**:object - **description**:Mass conserving temperature model. The temperature model uses the heat content (proportional to to thermal mass anomaly) to define a smooth temperature profile that conserves mass along the slab length. An empirical model, using error functions for smooth transitions, is used to define how the minimum temperature increases with depth and how the location of the minimum temperature shifts into the slab interior. The slab is divided into top and bottom parts, which meet at the location where the minimum temperature occurs in the slab. For the bottom slab, the temperature is defined by a half-space cooling model. For the top of the slab the temperature is defined by one side of a 1D infinite space cooling model: this function was chosen to have a smoother temperature function across the minimum temperature position. The age of the overriding plate is used so the slab temperature at shallow depth smoothly transitions to the temperature of the overriding plate: this is not perfect, and is affected by the value of "top truncation" parameter subducting plate. Notes:1) the parameter "thickness" for the subducting plate segments needs to be defined but is not used. 2) because we use a negative truncation for distance above the slab, it is recommended to usedepth method:begin at end segment, in the main part of the world-builder file.Other methods may lead to gpas in temperatures at the segment boundaries.3)the empirical model used to define how Tmin increases with depth and how the position of Tmin shift with depth is expected to change somewhat after better calibrating with further tests. - **additionalProperties**:false -- **required**:[model, plate velocity] +- **required**:[model, spreading velocity, subducting velocity] ::::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/model :name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_model @@ -12446,64 +13486,64 @@ - **description**:The reference density of the subducting plate in $kg/m^3$ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity +::::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity -- **description**:The velocity with which the plate subducts in meters per year. Default is 5 cm/yr -:::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf +- **description**:The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr +:::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf -::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/1 -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_1 +::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/1 +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_1 - **default value**:0.05 - **type**:number - **description**: :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2 -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2 +::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2 +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items +:::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:18446744073709551615 - **description**: -::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items +::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items -:::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf +:::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf -::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/1 -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_1 +::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/1 +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.05 :::::::::: -::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2 -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2 +::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2 +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items +:::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:18446744073709551615 -::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items/items -:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items_items +::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items/items +:name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::::: @@ -12525,14 +13565,14 @@ ::::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/subducting velocity :name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_subducting-velocity -- **description**:The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr] +- **description**:The velocity with which the slab is subducting through time. Default is 5 cm/yr :::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/subducting velocity/oneOf :name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_subducting-velocity_oneOf ::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/subducting velocity/oneOf/1 :name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_subducting-velocity_oneOf_1 -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::::::: @@ -12556,7 +13596,7 @@ ::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/subducting velocity/oneOf/2/items/items :name: closed_features_items_oneOf_6_temperature-models_items_oneOf_3_subducting-velocity_oneOf_2_items_items -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::::: @@ -12980,7 +14020,7 @@ :name: closed_features_items_oneOf_6_composition-models_items_oneOf_2 - **type**:object -- **description**:Uniform compositional model. Sets constant compositional field. +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. - **additionalProperties**:false - **required**:[model, compositions] @@ -12990,7 +14030,7 @@ - **default value**: - **type**:string - **description**:The name of the composition model. -- **enum**:[uniform] +- **enum**:[tian water content] :::::::::::::::: ::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/min distance slab top @@ -13009,6 +14049,14 @@ - **description**:todo The depth in meters to which the composition of this feature is present. :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/density +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_2_density + +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. +:::::::::::::::: + ::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/compositions :name: closed_features_items_oneOf_6_composition-models_items_oneOf_2_compositions @@ -13027,16 +14075,104 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/fractions -:name: closed_features_items_oneOf_6_composition-models_items_oneOf_2_fractions +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/lithology +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_2_lithology + +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/initial water content +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_2_initial-water-content + +- **default value**:5.0 +- **type**:number +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/cutoff pressure +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_2_cutoff-pressure + +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/operation +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_2_operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::::::: + + + +::::::::::::::::: + +:::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3 +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_3 + +- **type**:object +- **description**:Uniform compositional model. Sets constant compositional field. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/model +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_3_model + +- **default value**: +- **type**:string +- **description**:The name of the composition model. +- **enum**:[uniform] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/min distance slab top +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_3_min-distance-slab-top + +- **default value**:0.0 +- **type**:number +- **description**:todo The depth in meters from which the composition of this feature is present. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/max distance slab top +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_3_max-distance-slab-top + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:todo The depth in meters to which the composition of this feature is present. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/compositions +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_3_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the labels of the composition which are present there. +:::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/compositions/items +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_3_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/fractions +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_3_fractions - **type**:array - **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/fractions/items -:name: closed_features_items_oneOf_6_composition-models_items_oneOf_2_fractions_items +:::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/fractions/items +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_3_fractions_items - **default value**:1.0 - **type**:number @@ -13045,8 +14181,8 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/operation -:name: closed_features_items_oneOf_6_composition-models_items_oneOf_2_operation +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/operation +:name: closed_features_items_oneOf_6_composition-models_items_oneOf_3_operation - **default value**:replace - **type**:string @@ -13289,6 +14425,72 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_6_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_6_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_6_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_6_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_6_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_6_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_6_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -13706,7 +14908,7 @@ - **type**:object - **description**:Mass conserving temperature model. The temperature model uses the heat content (proportional to to thermal mass anomaly) to define a smooth temperature profile that conserves mass along the slab length. An empirical model, using error functions for smooth transitions, is used to define how the minimum temperature increases with depth and how the location of the minimum temperature shifts into the slab interior. The slab is divided into top and bottom parts, which meet at the location where the minimum temperature occurs in the slab. For the bottom slab, the temperature is defined by a half-space cooling model. For the top of the slab the temperature is defined by one side of a 1D infinite space cooling model: this function was chosen to have a smoother temperature function across the minimum temperature position. The age of the overriding plate is used so the slab temperature at shallow depth smoothly transitions to the temperature of the overriding plate: this is not perfect, and is affected by the value of "top truncation" parameter subducting plate. Notes:1) the parameter "thickness" for the subducting plate segments needs to be defined but is not used. 2) because we use a negative truncation for distance above the slab, it is recommended to usedepth method:begin at end segment, in the main part of the world-builder file.Other methods may lead to gpas in temperatures at the segment boundaries.3)the empirical model used to define how Tmin increases with depth and how the position of Tmin shift with depth is expected to change somewhat after better calibrating with further tests. - **additionalProperties**:false -- **required**:[model, plate velocity] +- **required**:[model, spreading velocity, subducting velocity] ::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/model :name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_model @@ -13750,64 +14952,64 @@ - **description**:The reference density of the subducting plate in $kg/m^3$ :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity -- **description**:The velocity with which the plate subducts in meters per year. Default is 5 cm/yr -:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf +- **description**:The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf -::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/1 -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_1 +::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/1 +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_1 - **default value**:0.05 - **type**:number - **description**: :::::::::: -::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2 -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2 +::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2 +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items +:::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:18446744073709551615 - **description**: -::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items +::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items -:::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf +:::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf -::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/1 -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_1 +::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/1 +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.05 :::::: -::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2 -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2 +::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2 +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items +:::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:18446744073709551615 -::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items/items -:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items_items +::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::: @@ -13829,14 +15031,14 @@ ::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/subducting velocity :name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_subducting-velocity -- **description**:The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr] +- **description**:The velocity with which the slab is subducting through time. Default is 5 cm/yr :::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/subducting velocity/oneOf :name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf ::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/subducting velocity/oneOf/1 :name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_1 -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::: @@ -13860,7 +15062,7 @@ ::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/subducting velocity/oneOf/2/items/items :name: closed_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_2_items_items -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::: @@ -14284,7 +15486,7 @@ :name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2 - **type**:object -- **description**:Uniform compositional model. Sets constant compositional field. +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. - **additionalProperties**:false - **required**:[model, compositions] @@ -14294,7 +15496,7 @@ - **default value**: - **type**:string - **description**:The name of the composition model. -- **enum**:[uniform] +- **enum**:[tian water content] :::::::::::: ::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/min distance slab top @@ -14313,6 +15515,14 @@ - **description**:todo The depth in meters to which the composition of this feature is present. :::::::::::: +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/density +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_density + +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. +:::::::::::: + ::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/compositions :name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_compositions @@ -14331,16 +15541,104 @@ :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/fractions -:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_fractions +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/lithology +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_lithology + +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/initial water content +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_initial-water-content + +- **default value**:5.0 +- **type**:number +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/cutoff pressure +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_cutoff-pressure + +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/operation +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::: + + + +::::::::::::: + +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3 +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3 + +- **type**:object +- **description**:Uniform compositional model. Sets constant compositional field. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/model +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_model + +- **default value**: +- **type**:string +- **description**:The name of the composition model. +- **enum**:[uniform] +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/min distance slab top +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_min-distance-slab-top + +- **default value**:0.0 +- **type**:number +- **description**:todo The depth in meters from which the composition of this feature is present. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/max distance slab top +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_max-distance-slab-top + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:todo The depth in meters to which the composition of this feature is present. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/compositions +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the labels of the composition which are present there. +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/compositions/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::: + +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/fractions +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_fractions - **type**:array - **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/fractions/items -:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_fractions_items +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/fractions/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_fractions_items - **default value**:1.0 - **type**:number @@ -14349,8 +15647,8 @@ :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/operation -:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_operation +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/operation +:name: closed_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_operation - **default value**:replace - **type**:string @@ -14593,6 +15891,72 @@ :::::::::::: +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::: + +:::::::::: + +::::::::::: + +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::: + +::::::::::: + +:::::::::::: + ::::::::::::: @@ -14906,7 +16270,7 @@ - **type**:object - **description**:Mass conserving temperature model. The temperature model uses the heat content (proportional to to thermal mass anomaly) to define a smooth temperature profile that conserves mass along the slab length. An empirical model, using error functions for smooth transitions, is used to define how the minimum temperature increases with depth and how the location of the minimum temperature shifts into the slab interior. The slab is divided into top and bottom parts, which meet at the location where the minimum temperature occurs in the slab. For the bottom slab, the temperature is defined by a half-space cooling model. For the top of the slab the temperature is defined by one side of a 1D infinite space cooling model: this function was chosen to have a smoother temperature function across the minimum temperature position. The age of the overriding plate is used so the slab temperature at shallow depth smoothly transitions to the temperature of the overriding plate: this is not perfect, and is affected by the value of "top truncation" parameter subducting plate. Notes:1) the parameter "thickness" for the subducting plate segments needs to be defined but is not used. 2) because we use a negative truncation for distance above the slab, it is recommended to usedepth method:begin at end segment, in the main part of the world-builder file.Other methods may lead to gpas in temperatures at the segment boundaries.3)the empirical model used to define how Tmin increases with depth and how the position of Tmin shift with depth is expected to change somewhat after better calibrating with further tests. - **additionalProperties**:false -- **required**:[model, plate velocity] +- **required**:[model, spreading velocity, subducting velocity] ::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/model :name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_model @@ -14950,64 +16314,64 @@ - **description**:The reference density of the subducting plate in $kg/m^3$ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity -- **description**:The velocity with which the plate subducts in meters per year. Default is 5 cm/yr -:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf +- **description**:The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/1 -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_1 +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/1 +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_1 - **default value**:0.05 - **type**:number - **description**: :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2 -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2 +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2 +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:18446744073709551615 - **description**: -::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items +::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items -:::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf +:::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf -::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/1 -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_1 +::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/1 +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.05 :::::::: -::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2 -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2 +::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2 +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items +:::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:18446744073709551615 -::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items/items -:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items_items +::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items/items +:name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::: @@ -15029,14 +16393,14 @@ ::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/subducting velocity :name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_subducting-velocity -- **description**:The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr] +- **description**:The velocity with which the slab is subducting through time. Default is 5 cm/yr :::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/subducting velocity/oneOf :name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf ::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/subducting velocity/oneOf/1 :name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_1 -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::::: @@ -15060,7 +16424,7 @@ ::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/subducting velocity/oneOf/2/items/items :name: closed_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_2_items_items -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::: @@ -15484,7 +16848,7 @@ :name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2 - **type**:object -- **description**:Uniform compositional model. Sets constant compositional field. +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. - **additionalProperties**:false - **required**:[model, compositions] @@ -15494,7 +16858,7 @@ - **default value**: - **type**:string - **description**:The name of the composition model. -- **enum**:[uniform] +- **enum**:[tian water content] :::::::::::::: ::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/min distance slab top @@ -15513,6 +16877,14 @@ - **description**:todo The depth in meters to which the composition of this feature is present. :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/density +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_density + +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. +:::::::::::::: + ::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/compositions :name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_compositions @@ -15531,16 +16903,104 @@ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/fractions -:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_fractions +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/lithology +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_lithology + +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/initial water content +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_initial-water-content + +- **default value**:5.0 +- **type**:number +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/cutoff pressure +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_cutoff-pressure + +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/operation +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::::: + + + +::::::::::::::: + +:::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3 +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3 + +- **type**:object +- **description**:Uniform compositional model. Sets constant compositional field. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/model +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_model + +- **default value**: +- **type**:string +- **description**:The name of the composition model. +- **enum**:[uniform] +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/min distance slab top +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_min-distance-slab-top + +- **default value**:0.0 +- **type**:number +- **description**:todo The depth in meters from which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/max distance slab top +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_max-distance-slab-top + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:todo The depth in meters to which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/compositions +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the labels of the composition which are present there. +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/compositions/items +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/fractions +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_fractions - **type**:array - **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/fractions/items -:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_fractions_items +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/fractions/items +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_fractions_items - **default value**:1.0 - **type**:number @@ -15549,8 +17009,8 @@ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/operation -:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_operation +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/operation +:name: closed_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_operation - **default value**:replace - **type**:string @@ -15793,6 +17253,72 @@ :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis rotation matrices +:name: closed_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis rotation matrices/items +:name: closed_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:name: closed_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:name: closed_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::: + +:::::::::::: + +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:name: closed_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:name: closed_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:name: closed_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::: + +::::::::::::: + +:::::::::::::: + ::::::::::::::: @@ -15976,7 +17502,7 @@ ::::::::::::::::::::::::{dropdown} /random number seed :name: closed_random-number-seed -- **default value**:4294967295 +- **default value**:-1 - **type**:integer - **description**:This allows the input of a preferred random number seed to generate random numbers. If no input is given, this value is -1 and triggers the use of default seed = 1. :::::::::::::::::::::::: diff --git a/contrib/world_builder/doc/world_builder_declarations_open.md b/contrib/world_builder/doc/world_builder_declarations_open.md index ff2baa6917a..4ce00a38326 100644 --- a/contrib/world_builder/doc/world_builder_declarations_open.md +++ b/contrib/world_builder/doc/world_builder_declarations_open.md @@ -2307,6 +2307,79 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_1_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_1_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_1_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_1_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_1_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_1_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/1/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_1_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -3524,6 +3597,79 @@ :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::: + +:::::::::::: + +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/2/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_2_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::: + +::::::::::::: + +:::::::::::::: + ::::::::::::::: @@ -4405,6 +4551,79 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_2_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_2_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_2_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_2_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_2_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_2_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/2/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_2_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -5405,6 +5624,79 @@ :::::::::::: +::::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::: + +:::::::::: + +::::::::::: + +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::{dropdown} /features/items/oneOf/2/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_2_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::: + +::::::::::: + +:::::::::::: + ::::::::::::: @@ -6286,25 +6578,98 @@ :::::::::::::: - - -::::::::::::::: - -:::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3 +::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis rotation matrices :open: -:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3 - -- **type**:object -- **description**:Uniform grains model. All grains start exactly the same. -- **additionalProperties**:false -- **required**:[model, compositions] +:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices -::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/model +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis rotation matrices/items :open: -:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3_model +:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items -- **default value**: -- **type**:string +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::: + +:::::::::::: + +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::: + +::::::::::::: + +:::::::::::::: + + + +::::::::::::::: + +:::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3 +:open: +:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3 + +- **type**:object +- **description**:Uniform grains model. All grains start exactly the same. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::{dropdown} /features/items/oneOf/2/sections/items/grains models/items/oneOf/3/model +:open: +:name: open_features_items_oneOf_2_sections_items_grains-models_items_oneOf_3_model + +- **default value**: +- **type**:string - **description**:The name of the grains model. - **enum**:[uniform] :::::::::::::: @@ -8253,6 +8618,79 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_3_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_3_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_3_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_3_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_3_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_3_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/3/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_3_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -10485,7 +10923,7 @@ :name: open_features_items_oneOf_4_composition-models_items_oneOf_1 - **type**:object -- **description**:Uniform compositional model. Sets constant compositional field. +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. - **additionalProperties**:false - **required**:[model, compositions] @@ -10496,7 +10934,7 @@ - **default value**: - **type**:string - **description**:The name of the composition model. -- **enum**:[uniform] +- **enum**:[tian water content] :::::::::::::::: ::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/min depth @@ -10693,24 +11131,40 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/fractions +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/density :open: -:name: open_features_items_oneOf_4_composition-models_items_oneOf_1_fractions +:name: open_features_items_oneOf_4_composition-models_items_oneOf_1_density -- **type**:array -- **minItems**:1 -- **maxItems**:4294967295 -- **uniqueItems**:false -- **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/fractions/items +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/lithology :open: -:name: open_features_items_oneOf_4_composition-models_items_oneOf_1_fractions_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_1_lithology -- **default value**:1.0 +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/initial water content +:open: +:name: open_features_items_oneOf_4_composition-models_items_oneOf_1_initial-water-content + +- **default value**:5.0 - **type**:number -- **description**: -::::::::::::::: +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/cutoff pressure +:open: +:name: open_features_items_oneOf_4_composition-models_items_oneOf_1_cutoff-pressure +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. :::::::::::::::: ::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/1/operation @@ -10727,114 +11181,94 @@ ::::::::::::::::: - -::::::::::::::::::: - -:::::::::::::::::::: - -::::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models -:open: -:name: open_features_items_oneOf_4_grains-models - -- **description**:A list of grains models. -- **default value**: -- **type**:array -:::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items -:open: -:name: open_features_items_oneOf_4_grains-models_items - -::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf -:open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf - -:::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1 +:::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2 :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1 +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2 - **type**:object -- **description**:Random uniform distribution grains model. The size of the grains can be independently set to a single value or to a random distribution. +- **description**:Uniform compositional model. Sets constant compositional field. - **additionalProperties**:false - **required**:[model, compositions] -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/model +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/model :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_model +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_model - **default value**: - **type**:string -- **description**:The name of the grains model. -- **enum**:[random uniform distribution] +- **description**:The name of the composition model. +- **enum**:[uniform] :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth - **description**:The depth in meters from which the composition of this feature is present. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf +:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf -::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/1 +::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/1 :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_1 +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_1 - **default value**:0.0 - **type**:number - **description**: :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2 +::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2 :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2 +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items +:::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:2 - **description**: -::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items +::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items -:::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf +:::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf -::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/1 +::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf/1 :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_1 +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.0 :::::::::: -::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2 +::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf/2 :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2 +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2/items +:::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf/2/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:2 -::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2/items/items +::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/min depth/oneOf/2/items/items/anyOf/2/items/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2_items_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_min-depth_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::::: @@ -10853,75 +11287,75 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth - **description**:The depth in meters to which the composition of this feature is present. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf +:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf -::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/1 +::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/1 :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_1 +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_1 - **default value**:1.7976931348623157e308 - **type**:number - **description**: :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2 +::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2 :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2 +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items +:::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:2 - **description**: -::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items +::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items -:::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf +:::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf -::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/1 +::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf/1 :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_1 +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:1.7976931348623157e308 :::::::::: -::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2 +::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf/2 :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2 +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2/items +:::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf/2/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:2 -::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2/items/items +::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/max depth/oneOf/2/items/items/anyOf/2/items/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2_items_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_max-depth_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::::: @@ -10940,18 +11374,18 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/compositions +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/compositions :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_compositions +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_compositions - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false -- **description**:A list with the integer labels of the composition which are present there. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/compositions/items +- **description**:A list with the labels of the composition which are present there. +:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/compositions/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_compositions_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_compositions_items - **default value**:0 - **type**:integer @@ -10960,28 +11394,18 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/orientation operation -:open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_orientation-operation - -- **default value**:replace -- **type**:string -- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value (add, not implemented). Replacing implies that all values not explicitly defined are set to zero. -- **enum**:[replace] -:::::::::::::::: - -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/grain sizes +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/fractions :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_grain-sizes +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_fractions - **type**:array -- **minItems**:0 +- **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false -- **description**:A list of the size of all of the grains in each composition. If set to <0, the size will be randomized between 0 and 1. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/grain sizes/items +- **description**:TA list of compositional fractions corresponding to the compositions list. +:::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/fractions/items :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_grain-sizes_items +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_fractions_items - **default value**:1.0 - **type**:number @@ -10990,16 +11414,293 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/normalize grain sizes +::::::::::::::::{dropdown} /features/items/oneOf/4/composition models/items/oneOf/2/operation :open: -:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_normalize-grain-sizes +:name: open_features_items_oneOf_4_composition-models_items_oneOf_2_operation -- **type**:array -- **minItems**:0 -- **maxItems**:4294967295 -- **uniqueItems**:false -- **description**:A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1. -:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/normalize grain sizes/items +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::::::: + + + +::::::::::::::::: + + +::::::::::::::::::: + +:::::::::::::::::::: + +::::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models +:open: +:name: open_features_items_oneOf_4_grains-models + +- **description**:A list of grains models. +- **default value**: +- **type**:array +:::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items +:open: +:name: open_features_items_oneOf_4_grains-models_items + +::::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf + +:::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1 +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1 + +- **type**:object +- **description**:Random uniform distribution grains model. The size of the grains can be independently set to a single value or to a random distribution. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/model +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_model + +- **default value**: +- **type**:string +- **description**:The name of the grains model. +- **enum**:[random uniform distribution] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth + +- **description**:The depth in meters from which the composition of this feature is present. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf + +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/1 +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_1 + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2 +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2 + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items + +- **type**:array +- **additionalProperties**:false +- **minItems**:1 +- **maxItems**:2 +- **description**: +::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items + +:::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf + +::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/1 +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_1 + +- **type**:number +- **default value**:0.0 +:::::::::: + +::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2 +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2 + +- **type**:array +- **minItems**:1 +- **maxItems**:4294967295 +:::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2_items + +- **type**:array +- **minItems**:1 +- **maxItems**:2 +::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/min depth/oneOf/2/items/items/anyOf/2/items/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_min-depth_oneOf_2_items_items_anyOf_2_items_items + +- **type**:number +:::::::: + +::::::::: + +:::::::::: + + +:::::::::::: + +::::::::::::: + +:::::::::::::: + + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth + +- **description**:The depth in meters to which the composition of this feature is present. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf + +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/1 +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_1 + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2 +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2 + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items + +- **type**:array +- **additionalProperties**:false +- **minItems**:1 +- **maxItems**:2 +- **description**: +::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items + +:::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf + +::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/1 +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_1 + +- **type**:number +- **default value**:1.7976931348623157e308 +:::::::::: + +::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2 +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2 + +- **type**:array +- **minItems**:1 +- **maxItems**:4294967295 +:::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2_items + +- **type**:array +- **minItems**:1 +- **maxItems**:2 +::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/max depth/oneOf/2/items/items/anyOf/2/items/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_max-depth_oneOf_2_items_items_anyOf_2_items_items + +- **type**:number +:::::::: + +::::::::: + +:::::::::: + + +:::::::::::: + +::::::::::::: + +:::::::::::::: + + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/compositions +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the integer labels of the composition which are present there. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/compositions/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/orientation operation +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_orientation-operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value (add, not implemented). Replacing implies that all values not explicitly defined are set to zero. +- **enum**:[replace] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/grain sizes +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_grain-sizes + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of the size of all of the grains in each composition. If set to <0, the size will be randomized between 0 and 1. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/grain sizes/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_grain-sizes_items + +- **default value**:1.0 +- **type**:number +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/normalize grain sizes +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_1_normalize-grain-sizes + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/1/normalize grain sizes/items :open: :name: open_features_items_oneOf_4_grains-models_items_oneOf_1_normalize-grain-sizes_items @@ -11297,6 +11998,79 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/4/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_4_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -12018,47 +12792,208 @@ - **description**:The depth in meters from which the composition of this feature is present. :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/max depth +::::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/max depth +:open: +:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_max-depth + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:The depth in meters to which the composition of this feature is present. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/compositions +:open: +:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the labels of the composition which are present there. +:::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/compositions/items +:open: +:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/fractions +:open: +:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_fractions + +- **type**:array +- **minItems**:1 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:TA list of compositional fractions corresponding to the compositions list. +:::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/fractions/items +:open: +:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_fractions_items + +- **default value**:1.0 +- **type**:number +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/operation +:open: +:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::::::: + + + +::::::::::::::::: + + +::::::::::::::::::: + +:::::::::::::::::::: + +::::::::::::::::::::{dropdown} /features/items/oneOf/5/grains models +:open: +:name: open_features_items_oneOf_5_grains-models + +- **description**:A list of grains models. +- **default value**: +- **type**:array +:::::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items +:open: +:name: open_features_items_oneOf_5_grains-models_items + +::::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf + +:::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1 +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1 + +- **type**:object +- **description**:Random uniform distribution grains model. The size of the grains can be independently set to a single value or to a random distribution. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/model +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_model + +- **default value**: +- **type**:string +- **description**:The name of the grains model. +- **enum**:[random uniform distribution deflected] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/min depth +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_min-depth + +- **default value**:0.0 +- **type**:number +- **description**:The depth in meters from which the grains of this feature are present. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/max depth +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_max-depth + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:The depth in meters to which the grains of this feature are present. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/compositions +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the integer labels of the composition which are present there. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/compositions/items +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/orientation operation +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_orientation-operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value (add, not implemented). Replacing implies that all values not explicitly defined are set to zero. +- **enum**:[replace, multiply] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/grain sizes +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_grain-sizes + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of the size of all of the grains in each composition. If set to <0, the size will be randomized between 0 and 1. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/grain sizes/items :open: -:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_max-depth +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_grain-sizes_items -- **default value**:1.7976931348623157e308 +- **default value**:1.0 - **type**:number -- **description**:The depth in meters to which the composition of this feature is present. +- **description**: +::::::::::::::: + :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/compositions +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/normalize grain sizes :open: -:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_compositions +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_normalize-grain-sizes - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false -- **description**:A list with the labels of the composition which are present there. -:::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/compositions/items +- **description**:A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/normalize grain sizes/items :open: -:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_compositions_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_normalize-grain-sizes_items -- **default value**:0 -- **type**:integer +- **default value**:true +- **type**:boolean - **description**: ::::::::::::::: :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/fractions +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/deflections :open: -:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_fractions +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_deflections - **type**:array -- **minItems**:1 +- **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false -- **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/fractions/items +- **description**:A list of the deflections of all of the grains in each composition between 0 and 1. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/deflections/items :open: -:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_fractions_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_deflections_items - **default value**:1.0 - **type**:number @@ -12067,52 +13002,95 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/composition models/items/oneOf/1/operation +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis rotation matrices :open: -:name: open_features_items_oneOf_5_composition-models_items_oneOf_1_operation +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_basis-rotation-matrices -- **default value**:replace -- **type**:string -- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. -- **enum**:[replace, replace defined only, add, subtract] -:::::::::::::::: +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_basis-rotation-matrices_items +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_basis-rotation-matrices_items_items +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_basis-rotation-matrices_items_items_items -::::::::::::::::: +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: +:::::::::::::: -::::::::::::::::::: +::::::::::::::: -:::::::::::::::::::: +:::::::::::::::: -::::::::::::::::::::{dropdown} /features/items/oneOf/5/grains models +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis Euler angles z-x-z :open: -:name: open_features_items_oneOf_5_grains-models +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_basis-Euler-angles-z-x-z -- **description**:A list of grains models. -- **default value**: - **type**:array -:::::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis Euler angles z-x-z/items :open: -:name: open_features_items_oneOf_5_grains-models_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_basis-Euler-angles-z-x-z_items -::::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/basis Euler angles z-x-z/items/items :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf +:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_basis-Euler-angles-z-x-z_items_items -:::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1 +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + + + +::::::::::::::::: + +:::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2 :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1 +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2 - **type**:object - **description**:Uniform grains model. All grains start exactly the same. - **additionalProperties**:false - **required**:[model, compositions] -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/model +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/model :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_model +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_model - **default value**: - **type**:string @@ -12120,36 +13098,36 @@ - **enum**:[uniform] :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/min depth +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/min depth :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_min-depth +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_min-depth - **default value**:0.0 - **type**:number - **description**:The depth in meters from which the grains of this feature are present. :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/max depth +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/max depth :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_max-depth +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_max-depth - **default value**:1.7976931348623157e308 - **type**:number - **description**:The depth in meters to which the grains of this feature are present. :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/compositions +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/compositions :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_compositions +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_compositions - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:A list with the integer labels of the composition which are present there. -:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/compositions/items +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/compositions/items :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_compositions_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_compositions_items - **default value**:0 - **type**:integer @@ -12158,36 +13136,36 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/rotation matrices +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/rotation matrices :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_rotation-matrices +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_rotation-matrices - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:A list with the rotation matrices of the grains which are present there for each compositions. -:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/rotation matrices/items +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/rotation matrices/items :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_rotation-matrices_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_rotation-matrices_items - **type**:array - **minItems**:3 - **maxItems**:3 - **uniqueItems**:false - **description**: -::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/rotation matrices/items/items +::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/rotation matrices/items/items :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_rotation-matrices_items_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_rotation-matrices_items_items - **type**:array - **minItems**:3 - **maxItems**:3 - **uniqueItems**:false - **description**: -:::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/rotation matrices/items/items/items +:::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/rotation matrices/items/items/items :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_rotation-matrices_items_items_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_rotation-matrices_items_items_items - **default value**:0.0 - **type**:number @@ -12200,27 +13178,27 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/Euler angles z-x-z +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/Euler angles z-x-z :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_Euler-angles-z-x-z +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_Euler-angles-z-x-z - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. -:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/Euler angles z-x-z/items +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/Euler angles z-x-z/items :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_Euler-angles-z-x-z_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_Euler-angles-z-x-z_items - **type**:array - **minItems**:3 - **maxItems**:3 - **uniqueItems**:false - **description**: -::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/Euler angles z-x-z/items/items +::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/Euler angles z-x-z/items/items :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_Euler-angles-z-x-z_items_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_Euler-angles-z-x-z_items_items - **default value**:0.0 - **type**:number @@ -12231,9 +13209,9 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/orientation operation +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/orientation operation :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_orientation-operation +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_orientation-operation - **default value**:replace - **type**:string @@ -12241,18 +13219,18 @@ - **enum**:[replace, multiply] :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/grain sizes +::::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/grain sizes :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_grain-sizes +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_grain-sizes - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:A list of the size of all of the grains in each composition. If set to <0, the size will be set so that the total is equal to 1. -:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/1/grain sizes/items +:::::::::::::::{dropdown} /features/items/oneOf/5/grains models/items/oneOf/2/grain sizes/items :open: -:name: open_features_items_oneOf_5_grains-models_items_oneOf_1_grain-sizes_items +:name: open_features_items_oneOf_5_grains-models_items_oneOf_2_grain-sizes_items - **default value**:-1.0 - **type**:number @@ -12625,7 +13603,7 @@ - **type**:object - **description**:Mass conserving temperature model. The temperature model uses the heat content (proportional to to thermal mass anomaly) to define a smooth temperature profile that conserves mass along the slab length. An empirical model, using error functions for smooth transitions, is used to define how the minimum temperature increases with depth and how the location of the minimum temperature shifts into the slab interior. The slab is divided into top and bottom parts, which meet at the location where the minimum temperature occurs in the slab. For the bottom slab, the temperature is defined by a half-space cooling model. For the top of the slab the temperature is defined by one side of a 1D infinite space cooling model: this function was chosen to have a smoother temperature function across the minimum temperature position. The age of the overriding plate is used so the slab temperature at shallow depth smoothly transitions to the temperature of the overriding plate: this is not perfect, and is affected by the value of "top truncation" parameter subducting plate. Notes:1) the parameter "thickness" for the subducting plate segments needs to be defined but is not used. 2) because we use a negative truncation for distance above the slab, it is recommended to usedepth method:begin at end segment, in the main part of the world-builder file.Other methods may lead to gpas in temperatures at the segment boundaries.3)the empirical model used to define how Tmin increases with depth and how the position of Tmin shift with depth is expected to change somewhat after better calibrating with further tests. - **additionalProperties**:false -- **required**:[model, plate velocity] +- **required**:[model, spreading velocity, subducting velocity] ::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/model :open: @@ -12674,75 +13652,75 @@ - **description**:The reference density of the subducting plate in $kg/m^3$ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity -- **description**:The velocity with which the plate subducts in meters per year. Default is 5 cm/yr -:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf +- **description**:The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf -::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/1 +::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/1 :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_1 +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_1 - **default value**:0.05 - **type**:number - **description**: :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2 +::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2 :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2 +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items +:::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:18446744073709551615 - **description**: -::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items +::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items -:::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf +:::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf -::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/1 +::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/1 :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_1 +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.05 :::::::: -::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2 +::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2 :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2 +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items +:::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:18446744073709551615 -::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items/items +::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items/items :open: -:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items_items +:name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::: @@ -12765,7 +13743,7 @@ :open: :name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_subducting-velocity -- **description**:The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr] +- **description**:The velocity with which the slab is subducting through time. Default is 5 cm/yr :::::::::::::{dropdown} /features/items/oneOf/6/segments/items/temperature models/items/oneOf/3/subducting velocity/oneOf :open: :name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf @@ -12774,7 +13752,7 @@ :open: :name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_1 -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::::: @@ -12801,7 +13779,7 @@ :open: :name: open_features_items_oneOf_6_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_2_items_items -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::: @@ -13274,7 +14252,7 @@ :name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2 - **type**:object -- **description**:Uniform compositional model. Sets constant compositional field. +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. - **additionalProperties**:false - **required**:[model, compositions] @@ -13285,7 +14263,7 @@ - **default value**: - **type**:string - **description**:The name of the composition model. -- **enum**:[uniform] +- **enum**:[tian water content] :::::::::::::: ::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/min distance slab top @@ -13306,6 +14284,15 @@ - **description**:todo The depth in meters to which the composition of this feature is present. :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/density +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_density + +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. +:::::::::::::: + ::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/compositions :open: :name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_compositions @@ -13326,18 +14313,116 @@ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/fractions +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/lithology :open: -:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_fractions +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_lithology + +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/initial water content +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_initial-water-content + +- **default value**:5.0 +- **type**:number +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/cutoff pressure +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_cutoff-pressure + +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/operation +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::::: + + + +::::::::::::::: + +:::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3 +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3 + +- **type**:object +- **description**:Uniform compositional model. Sets constant compositional field. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/model +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_model + +- **default value**: +- **type**:string +- **description**:The name of the composition model. +- **enum**:[uniform] +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/min distance slab top +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_min-distance-slab-top + +- **default value**:0.0 +- **type**:number +- **description**:todo The depth in meters from which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/max distance slab top +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_max-distance-slab-top + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:todo The depth in meters to which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/compositions +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the labels of the composition which are present there. +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/compositions/items +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/fractions +:open: +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_fractions - **type**:array - **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/fractions/items +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/fractions/items :open: -:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_fractions_items +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_fractions_items - **default value**:1.0 - **type**:number @@ -13346,9 +14431,9 @@ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/2/operation +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/composition models/items/oneOf/3/operation :open: -:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_2_operation +:name: open_features_items_oneOf_6_segments_items_composition-models_items_oneOf_3_operation - **default value**:replace - **type**:string @@ -13583,37 +14668,110 @@ :name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_normalize-grain-sizes - **type**:array -- **minItems**:0 -- **maxItems**:4294967295 +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1. +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/normalize grain sizes/items +:open: +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_normalize-grain-sizes_items + +- **default value**:true +- **type**:boolean +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/deflections +:open: +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_deflections + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list of the deflections of all of the grains in each composition between 0 and 1. +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/deflections/items +:open: +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_deflections_items + +- **default value**:1.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 - **uniqueItems**:false -- **description**:A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1. -:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/normalize grain sizes/items +- **description**: +:::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items :open: -:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_normalize-grain-sizes_items +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items -- **default value**:true -- **type**:boolean +- **default value**:0.0 +- **type**:number - **description**: +::::::::::: + +:::::::::::: + ::::::::::::: :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/deflections +::::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z :open: -:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_deflections +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false -- **description**:A list of the deflections of all of the grains in each composition between 0 and 1. -:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/deflections/items +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items :open: -:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_deflections_items +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items -- **default value**:1.0 +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/6/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_6_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 - **type**:number - **description**: +:::::::::::: + ::::::::::::: :::::::::::::: @@ -13966,7 +15124,7 @@ - **type**:object - **description**:Mass conserving temperature model. The temperature model uses the heat content (proportional to to thermal mass anomaly) to define a smooth temperature profile that conserves mass along the slab length. An empirical model, using error functions for smooth transitions, is used to define how the minimum temperature increases with depth and how the location of the minimum temperature shifts into the slab interior. The slab is divided into top and bottom parts, which meet at the location where the minimum temperature occurs in the slab. For the bottom slab, the temperature is defined by a half-space cooling model. For the top of the slab the temperature is defined by one side of a 1D infinite space cooling model: this function was chosen to have a smoother temperature function across the minimum temperature position. The age of the overriding plate is used so the slab temperature at shallow depth smoothly transitions to the temperature of the overriding plate: this is not perfect, and is affected by the value of "top truncation" parameter subducting plate. Notes:1) the parameter "thickness" for the subducting plate segments needs to be defined but is not used. 2) because we use a negative truncation for distance above the slab, it is recommended to usedepth method:begin at end segment, in the main part of the world-builder file.Other methods may lead to gpas in temperatures at the segment boundaries.3)the empirical model used to define how Tmin increases with depth and how the position of Tmin shift with depth is expected to change somewhat after better calibrating with further tests. - **additionalProperties**:false -- **required**:[model, plate velocity] +- **required**:[model, spreading velocity, subducting velocity] ::::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/model :open: @@ -14015,75 +15173,75 @@ - **description**:The reference density of the subducting plate in $kg/m^3$ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity +::::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity -- **description**:The velocity with which the plate subducts in meters per year. Default is 5 cm/yr -:::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf +- **description**:The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr +:::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf -::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/1 +::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/1 :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_1 +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_1 - **default value**:0.05 - **type**:number - **description**: :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2 +::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2 :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2 +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items +:::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:18446744073709551615 - **description**: -::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items +::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items -:::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf +:::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf -::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/1 +::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/1 :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_1 +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.05 :::::::::: -::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2 +::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2 :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2 +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items +:::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:18446744073709551615 -::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items/items +::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items/items :open: -:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items_items +:name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::::: @@ -14106,7 +15264,7 @@ :open: :name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_subducting-velocity -- **description**:The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr] +- **description**:The velocity with which the slab is subducting through time. Default is 5 cm/yr :::::::::::::::{dropdown} /features/items/oneOf/6/temperature models/items/oneOf/3/subducting velocity/oneOf :open: :name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_subducting-velocity_oneOf @@ -14115,7 +15273,7 @@ :open: :name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_subducting-velocity_oneOf_1 -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::::::: @@ -14142,7 +15300,7 @@ :open: :name: open_features_items_oneOf_6_temperature-models_items_oneOf_3_subducting-velocity_oneOf_2_items_items -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::::: @@ -14615,7 +15773,7 @@ :name: open_features_items_oneOf_6_composition-models_items_oneOf_2 - **type**:object -- **description**:Uniform compositional model. Sets constant compositional field. +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. - **additionalProperties**:false - **required**:[model, compositions] @@ -14626,7 +15784,7 @@ - **default value**: - **type**:string - **description**:The name of the composition model. -- **enum**:[uniform] +- **enum**:[tian water content] :::::::::::::::: ::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/min distance slab top @@ -14647,6 +15805,15 @@ - **description**:todo The depth in meters to which the composition of this feature is present. :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/density +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_2_density + +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. +:::::::::::::::: + ::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/compositions :open: :name: open_features_items_oneOf_6_composition-models_items_oneOf_2_compositions @@ -14667,18 +15834,116 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/fractions +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/lithology +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_2_lithology + +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/initial water content +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_2_initial-water-content + +- **default value**:5.0 +- **type**:number +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/cutoff pressure +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_2_cutoff-pressure + +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/operation +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_2_operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::::::: + + + +::::::::::::::::: + +:::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3 +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_3 + +- **type**:object +- **description**:Uniform compositional model. Sets constant compositional field. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/model +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_3_model + +- **default value**: +- **type**:string +- **description**:The name of the composition model. +- **enum**:[uniform] +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/min distance slab top +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_3_min-distance-slab-top + +- **default value**:0.0 +- **type**:number +- **description**:todo The depth in meters from which the composition of this feature is present. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/max distance slab top +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_3_max-distance-slab-top + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:todo The depth in meters to which the composition of this feature is present. +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/compositions +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_3_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the labels of the composition which are present there. +:::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/compositions/items +:open: +:name: open_features_items_oneOf_6_composition-models_items_oneOf_3_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/fractions :open: -:name: open_features_items_oneOf_6_composition-models_items_oneOf_2_fractions +:name: open_features_items_oneOf_6_composition-models_items_oneOf_3_fractions - **type**:array - **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/fractions/items +:::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/fractions/items :open: -:name: open_features_items_oneOf_6_composition-models_items_oneOf_2_fractions_items +:name: open_features_items_oneOf_6_composition-models_items_oneOf_3_fractions_items - **default value**:1.0 - **type**:number @@ -14687,9 +15952,9 @@ :::::::::::::::: -::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/2/operation +::::::::::::::::{dropdown} /features/items/oneOf/6/composition models/items/oneOf/3/operation :open: -:name: open_features_items_oneOf_6_composition-models_items_oneOf_2_operation +:name: open_features_items_oneOf_6_composition-models_items_oneOf_3_operation - **default value**:replace - **type**:string @@ -14959,6 +16224,79 @@ :::::::::::::::: +::::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_6_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_6_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_6_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_6_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + +::::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_6_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_6_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::::{dropdown} /features/items/oneOf/6/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_6_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::::: + +::::::::::::::: + +:::::::::::::::: + ::::::::::::::::: @@ -15426,7 +16764,7 @@ - **type**:object - **description**:Mass conserving temperature model. The temperature model uses the heat content (proportional to to thermal mass anomaly) to define a smooth temperature profile that conserves mass along the slab length. An empirical model, using error functions for smooth transitions, is used to define how the minimum temperature increases with depth and how the location of the minimum temperature shifts into the slab interior. The slab is divided into top and bottom parts, which meet at the location where the minimum temperature occurs in the slab. For the bottom slab, the temperature is defined by a half-space cooling model. For the top of the slab the temperature is defined by one side of a 1D infinite space cooling model: this function was chosen to have a smoother temperature function across the minimum temperature position. The age of the overriding plate is used so the slab temperature at shallow depth smoothly transitions to the temperature of the overriding plate: this is not perfect, and is affected by the value of "top truncation" parameter subducting plate. Notes:1) the parameter "thickness" for the subducting plate segments needs to be defined but is not used. 2) because we use a negative truncation for distance above the slab, it is recommended to usedepth method:begin at end segment, in the main part of the world-builder file.Other methods may lead to gpas in temperatures at the segment boundaries.3)the empirical model used to define how Tmin increases with depth and how the position of Tmin shift with depth is expected to change somewhat after better calibrating with further tests. - **additionalProperties**:false -- **required**:[model, plate velocity] +- **required**:[model, spreading velocity, subducting velocity] ::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/model :open: @@ -15475,75 +16813,75 @@ - **description**:The reference density of the subducting plate in $kg/m^3$ :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity -- **description**:The velocity with which the plate subducts in meters per year. Default is 5 cm/yr -:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf +- **description**:The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf -::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/1 +::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/1 :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_1 +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_1 - **default value**:0.05 - **type**:number - **description**: :::::::::: -::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2 +::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2 :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2 +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items +:::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:18446744073709551615 - **description**: -::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items +::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items -:::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf +:::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf -::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/1 +::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/1 :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_1 +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.05 :::::: -::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2 +::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2 :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2 +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items +:::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:18446744073709551615 -::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items/items +::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items/items :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items_items +:name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::: @@ -15566,7 +16904,7 @@ :open: :name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_subducting-velocity -- **description**:The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr] +- **description**:The velocity with which the slab is subducting through time. Default is 5 cm/yr :::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/temperature models/items/oneOf/3/subducting velocity/oneOf :open: :name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf @@ -15575,7 +16913,7 @@ :open: :name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_1 -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::: @@ -15602,7 +16940,7 @@ :open: :name: open_features_items_oneOf_6_sections_items_segments_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_2_items_items -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::: @@ -16029,25 +17367,105 @@ :open: :name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_1_bottom-fractions_items -- **default value**:0.0 +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::: + +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/1/compositions +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_1_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the labels of the composition which are present there. +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/1/compositions/items +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_1_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::: + +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/1/operation +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_1_operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::: + + + +::::::::::::: + +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2 +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2 + +- **type**:object +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/model +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_model + +- **default value**: +- **type**:string +- **description**:The name of the composition model. +- **enum**:[tian water content] +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/min distance slab top +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_min-distance-slab-top + +- **default value**:0.0 +- **type**:number +- **description**:todo The depth in meters from which the composition of this feature is present. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/max distance slab top +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_max-distance-slab-top + +- **default value**:1.7976931348623157e308 - **type**:number -- **description**: -::::::::::: +- **description**:todo The depth in meters to which the composition of this feature is present. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/density +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_density +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/1/compositions +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/compositions :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_1_compositions +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_compositions - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:A list with the labels of the composition which are present there. -:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/1/compositions/items +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/compositions/items :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_1_compositions_items +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_compositions_items - **default value**:0 - **type**:integer @@ -16056,9 +17474,36 @@ :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/1/operation +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/lithology :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_1_operation +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_lithology + +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/initial water content +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_initial-water-content + +- **default value**:5.0 +- **type**:number +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/cutoff pressure +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_cutoff-pressure + +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/operation +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_operation - **default value**:replace - **type**:string @@ -16070,18 +17515,18 @@ ::::::::::::: -:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2 +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3 :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2 +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3 - **type**:object - **description**:Uniform compositional model. Sets constant compositional field. - **additionalProperties**:false - **required**:[model, compositions] -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/model +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/model :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_model +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_model - **default value**: - **type**:string @@ -16089,36 +17534,36 @@ - **enum**:[uniform] :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/min distance slab top +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/min distance slab top :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_min-distance-slab-top +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_min-distance-slab-top - **default value**:0.0 - **type**:number - **description**:todo The depth in meters from which the composition of this feature is present. :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/max distance slab top +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/max distance slab top :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_max-distance-slab-top +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_max-distance-slab-top - **default value**:1.7976931348623157e308 - **type**:number - **description**:todo The depth in meters to which the composition of this feature is present. :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/compositions +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/compositions :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_compositions +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_compositions - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:A list with the labels of the composition which are present there. -:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/compositions/items +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/compositions/items :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_compositions_items +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_compositions_items - **default value**:0 - **type**:integer @@ -16127,18 +17572,18 @@ :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/fractions +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/fractions :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_fractions +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_fractions - **type**:array - **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/fractions/items +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/fractions/items :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_fractions_items +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_fractions_items - **default value**:1.0 - **type**:number @@ -16147,9 +17592,9 @@ :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/2/operation +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/composition models/items/oneOf/3/operation :open: -:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_2_operation +:name: open_features_items_oneOf_6_sections_items_segments_items_composition-models_items_oneOf_3_operation - **default value**:replace - **type**:string @@ -16419,6 +17864,79 @@ :::::::::::: +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::: + +:::::::::: + +::::::::::: + +:::::::::::: + +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::{dropdown} /features/items/oneOf/6/sections/items/segments/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_6_sections_items_segments_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::: + +::::::::::: + +:::::::::::: + ::::::::::::: @@ -16767,7 +18285,7 @@ - **type**:object - **description**:Mass conserving temperature model. The temperature model uses the heat content (proportional to to thermal mass anomaly) to define a smooth temperature profile that conserves mass along the slab length. An empirical model, using error functions for smooth transitions, is used to define how the minimum temperature increases with depth and how the location of the minimum temperature shifts into the slab interior. The slab is divided into top and bottom parts, which meet at the location where the minimum temperature occurs in the slab. For the bottom slab, the temperature is defined by a half-space cooling model. For the top of the slab the temperature is defined by one side of a 1D infinite space cooling model: this function was chosen to have a smoother temperature function across the minimum temperature position. The age of the overriding plate is used so the slab temperature at shallow depth smoothly transitions to the temperature of the overriding plate: this is not perfect, and is affected by the value of "top truncation" parameter subducting plate. Notes:1) the parameter "thickness" for the subducting plate segments needs to be defined but is not used. 2) because we use a negative truncation for distance above the slab, it is recommended to usedepth method:begin at end segment, in the main part of the world-builder file.Other methods may lead to gpas in temperatures at the segment boundaries.3)the empirical model used to define how Tmin increases with depth and how the position of Tmin shift with depth is expected to change somewhat after better calibrating with further tests. - **additionalProperties**:false -- **required**:[model, plate velocity] +- **required**:[model, spreading velocity, subducting velocity] ::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/model :open: @@ -16816,75 +18334,75 @@ - **description**:The reference density of the subducting plate in $kg/m^3$ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity -- **description**:The velocity with which the plate subducts in meters per year. Default is 5 cm/yr -:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf +- **description**:The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/1 +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/1 :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_1 +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_1 - **default value**:0.05 - **type**:number - **description**: :::::::::::: -::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2 +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2 :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2 +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2 - **type**:array - **minItems**:0 - **maxItems**:4294967295 - **uniqueItems**:false - **description**: -:::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items - **type**:array - **additionalProperties**:false - **minItems**:1 - **maxItems**:18446744073709551615 - **description**: -::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items +::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items -:::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf +:::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf -::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/1 +::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/1 :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_1 +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_1 - **type**:number - **default value**:0.05 :::::::: -::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2 +::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2 :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2 +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2 - **type**:array - **minItems**:1 - **maxItems**:4294967295 -:::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items +:::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items - **type**:array - **minItems**:1 - **maxItems**:18446744073709551615 -::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/plate velocity/oneOf/2/items/items/anyOf/2/items/items +::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/spreading velocity/oneOf/2/items/items/anyOf/2/items/items :open: -:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_plate-velocity_oneOf_2_items_items_anyOf_2_items_items +:name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_spreading-velocity_oneOf_2_items_items_anyOf_2_items_items - **type**:number :::::: @@ -16907,7 +18425,7 @@ :open: :name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_subducting-velocity -- **description**:The velocity with which the ridge is moving through time, and how long the ridge has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr] +- **description**:The velocity with which the slab is subducting through time. Default is 5 cm/yr :::::::::::::{dropdown} /features/items/oneOf/6/sections/items/temperature models/items/oneOf/3/subducting velocity/oneOf :open: :name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf @@ -16916,7 +18434,7 @@ :open: :name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_1 -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::::: @@ -16943,7 +18461,7 @@ :open: :name: open_features_items_oneOf_6_sections_items_temperature-models_items_oneOf_3_subducting-velocity_oneOf_2_items_items -- **default value**:-1.0 +- **default value**:0.05 - **type**:number - **description**: :::::::::: @@ -17416,7 +18934,7 @@ :name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2 - **type**:object -- **description**:Uniform compositional model. Sets constant compositional field. +- **description**:TianWaterContent compositional model. Sets bound water content as a compositional field. The returned water content is based on the the temperature and pressure at a point within the world. Currently, the bound water content can be determined for four different lithologies: 'sediment', mid-ocean ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. - **additionalProperties**:false - **required**:[model, compositions] @@ -17427,7 +18945,7 @@ - **default value**: - **type**:string - **description**:The name of the composition model. -- **enum**:[uniform] +- **enum**:[tian water content] :::::::::::::: ::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/min distance slab top @@ -17448,6 +18966,15 @@ - **description**:todo The depth in meters to which the composition of this feature is present. :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/density +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_density + +- **default value**:3000.0 +- **type**:number +- **description**:The reference density used for determining the lithostatic pressure for calculating the bound water content. +:::::::::::::: + ::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/compositions :open: :name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_compositions @@ -17468,18 +18995,116 @@ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/fractions +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/lithology +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_lithology + +- **default value**:peridotite +- **type**:string +- **description**:The lithology used to determine which polynomials to use for calculating the water content. Valid options are: 'sediment', 'MORB', 'gabbro', and 'peridotite'. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/initial water content +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_initial-water-content + +- **default value**:5.0 +- **type**:number +- **description**:The value of the initial water content (in wt%) for the lithology at the trench. This represents the max value applied to this lithology. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/cutoff pressure +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_cutoff-pressure + +- **default value**:10.0 +- **type**:number +- **description**:The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/operation +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_operation + +- **default value**:replace +- **type**:string +- **description**:Whether the value should replace any value previously defined at this location (replace) or add the value to the previously define value. Replacing implies that all compositions not explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option. +- **enum**:[replace, replace defined only, add, subtract] +:::::::::::::: + + + +::::::::::::::: + +:::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3 +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3 + +- **type**:object +- **description**:Uniform compositional model. Sets constant compositional field. +- **additionalProperties**:false +- **required**:[model, compositions] + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/model +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_model + +- **default value**: +- **type**:string +- **description**:The name of the composition model. +- **enum**:[uniform] +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/min distance slab top +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_min-distance-slab-top + +- **default value**:0.0 +- **type**:number +- **description**:todo The depth in meters from which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/max distance slab top +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_max-distance-slab-top + +- **default value**:1.7976931348623157e308 +- **type**:number +- **description**:todo The depth in meters to which the composition of this feature is present. +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/compositions +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_compositions + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the labels of the composition which are present there. +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/compositions/items +:open: +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_compositions_items + +- **default value**:0 +- **type**:integer +- **description**: +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/fractions :open: -:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_fractions +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_fractions - **type**:array - **minItems**:1 - **maxItems**:4294967295 - **uniqueItems**:false - **description**:TA list of compositional fractions corresponding to the compositions list. -:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/fractions/items +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/fractions/items :open: -:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_fractions_items +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_fractions_items - **default value**:1.0 - **type**:number @@ -17488,9 +19113,9 @@ :::::::::::::: -::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/2/operation +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/composition models/items/oneOf/3/operation :open: -:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_2_operation +:name: open_features_items_oneOf_6_sections_items_composition-models_items_oneOf_3_operation - **default value**:replace - **type**:string @@ -17760,6 +19385,79 @@ :::::::::::::: +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis rotation matrices +:open: +:name: open_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the rotation matrices of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis rotation matrices/items +:open: +:name: open_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis rotation matrices/items/items +:open: +:name: open_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +:::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis rotation matrices/items/items/items +:open: +:name: open_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-rotation-matrices_items_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +::::::::::: + +:::::::::::: + +::::::::::::: + +:::::::::::::: + +::::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z +:open: +:name: open_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z + +- **type**:array +- **minItems**:0 +- **maxItems**:4294967295 +- **uniqueItems**:false +- **description**:A list with the z-x-z Euler angles of the grains which are present there for each compositions. +:::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items +:open: +:name: open_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items + +- **type**:array +- **minItems**:3 +- **maxItems**:3 +- **uniqueItems**:false +- **description**: +::::::::::::{dropdown} /features/items/oneOf/6/sections/items/grains models/items/oneOf/2/basis Euler angles z-x-z/items/items +:open: +:name: open_features_items_oneOf_6_sections_items_grains-models_items_oneOf_2_basis-Euler-angles-z-x-z_items_items + +- **default value**:0.0 +- **type**:number +- **description**: +:::::::::::: + +::::::::::::: + +:::::::::::::: + ::::::::::::::: @@ -17961,7 +19659,7 @@ :open: :name: open_random-number-seed -- **default value**:4294967295 +- **default value**:-1 - **type**:integer - **description**:This allows the input of a preferred random number seed to generate random numbers. If no input is given, this value is -1 and triggers the use of default seed = 1. :::::::::::::::::::::::: diff --git a/contrib/world_builder/include/world_builder/features/continental_plate_models/grains/random_uniform_distribution_deflected.h b/contrib/world_builder/include/world_builder/features/continental_plate_models/grains/random_uniform_distribution_deflected.h index 4e8cf717326..54c389f2562 100644 --- a/contrib/world_builder/include/world_builder/features/continental_plate_models/grains/random_uniform_distribution_deflected.h +++ b/contrib/world_builder/include/world_builder/features/continental_plate_models/grains/random_uniform_distribution_deflected.h @@ -26,7 +26,6 @@ namespace WorldBuilder { - class Parameters; namespace Features { @@ -40,7 +39,7 @@ namespace WorldBuilder * what the returned temperature or grains of the temperature and grains * functions of this class will be. */ - class RandomUniformDistributionDeflected final : public Interface + class RandomUniformDistributionDeflected final: public Interface { public: /** @@ -106,6 +105,7 @@ namespace WorldBuilder std::vector grain_sizes; std::vector normalize_grain_sizes; std::vector deflections; + std::vector, 3>> basis_rotation_matrices; }; } // namespace Grains } // namespace ContinentalPlateModels diff --git a/contrib/world_builder/include/world_builder/features/fault_models/grains/random_uniform_distribution_deflected.h b/contrib/world_builder/include/world_builder/features/fault_models/grains/random_uniform_distribution_deflected.h index 82d2c683f07..b8ee7b15cd8 100644 --- a/contrib/world_builder/include/world_builder/features/fault_models/grains/random_uniform_distribution_deflected.h +++ b/contrib/world_builder/include/world_builder/features/fault_models/grains/random_uniform_distribution_deflected.h @@ -104,6 +104,7 @@ namespace WorldBuilder std::vector grain_sizes; std::vector normalize_grain_sizes; std::vector deflections; + std::vector, 3>> basis_rotation_matrices; }; } // namespace Grains } // namespace FaultModels diff --git a/contrib/world_builder/include/world_builder/features/mantle_layer_models/grains/random_uniform_distribution_deflected.h b/contrib/world_builder/include/world_builder/features/mantle_layer_models/grains/random_uniform_distribution_deflected.h index 4d0bd807be8..5b28b4bced0 100644 --- a/contrib/world_builder/include/world_builder/features/mantle_layer_models/grains/random_uniform_distribution_deflected.h +++ b/contrib/world_builder/include/world_builder/features/mantle_layer_models/grains/random_uniform_distribution_deflected.h @@ -105,6 +105,7 @@ namespace WorldBuilder std::vector grain_sizes; std::vector normalize_grain_sizes; std::vector deflections; + std::vector, 3>> basis_rotation_matrices; }; } // namespace Grains } // namespace MantleLayerModels diff --git a/contrib/world_builder/include/world_builder/features/oceanic_plate_models/composition/tian2019_water_content.h b/contrib/world_builder/include/world_builder/features/oceanic_plate_models/composition/tian2019_water_content.h new file mode 100644 index 00000000000..0ae3dd84a23 --- /dev/null +++ b/contrib/world_builder/include/world_builder/features/oceanic_plate_models/composition/tian2019_water_content.h @@ -0,0 +1,149 @@ +/* + Copyright (C) 2018 - 2024 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#ifndef WORLD_BUILDER_FEATURES_OCEANIC_PLATE_MODELS_COMPOSITION_WATER_CONTENT_H +#define WORLD_BUILDER_FEATURES_OCEANIC_PLATE_MODELS_COMPOSITION_WATER_CONTENT_H + + +#include "world_builder/features/oceanic_plate_models/composition/interface.h" +#include "world_builder/objects/surface.h" +#include "world_builder/features/feature_utilities.h" + + +namespace WorldBuilder +{ + namespace Features + { + using namespace FeatureUtilities; + namespace OceanicPlateModels + { + namespace Composition + { + /** + * This class represents the bound water content in a subducting plate and can implement + * submodules for computing this bound water content. These submodules determine what + * the returned water content will be based on the the temperature and pressure at a point + * within the world. Currently, the bound water content can be determined for four different + * lithologies: sediments, mid-ocean ridge basalts, gabbros, and peridotites, using + * parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). + */ + class TianWaterContent final: public Interface + { + public: + /** + * constructor + */ + TianWaterContent(WorldBuilder::World *world); + + /** + * Destructor + */ + ~TianWaterContent() override final; + + /** + * declare and read in the world builder file into the parameters class + */ + static + void declare_entries(Parameters &prm, const std::string &parent_name = ""); + + /** + * declare and read in the world builder file into the parameters class + */ + void parse_entries(Parameters &prm, const std::vector> &coordinates) override final; + + /** + * Calculates what the maximum bound water content is at a point given a pressure and + * temperature. This can be done for 4 different lithologies, "sediment", "gabbro", + * "MORB", and "peridotite" + */ + double calculate_water_content(double pressure, + double temperature) const; + + /** + * Returns a value for the bound water contend based on the given position, depth in the model, + * gravity, and the temperature at that point. + */ + double get_composition(const Point<3> &position, + const Objects::NaturalCoordinate &position_in_natural_coordinates, + const double depth, + const unsigned int composition_number, + double composition, + const double feature_min_depth, + const double feature_max_depth) const override final; + + + private: + // TianWaterContent composition submodule parameters + double min_depth; + Objects::Surface min_depth_surface; + double max_depth; + double density; // Density used to compute the lithostatic pressure + Objects::Surface max_depth_surface; + std::vector compositions; + Operations operation; + double max_water_content; + + enum LithologyName + { + peridotite, + gabbro, + MORB, + sediment + }; + LithologyName lithology_type; + + // Define the coefficients for the polynomials for 3 quantities: LR which represents the + // enthalpy change of the dehydration reactions, c_sat which represents the volatile saturation + // content, and Td which represents the onset temperature of dehydration. The first row is for + // 'peridotite', the second row is for 'gabbro', the third row is for 'MORB', and the fourth row + // is for 'sediment'. + std::vector> LR_poly = + { + {-19.0609, 168.983, -630.032, 1281.84, -1543.14, 1111.88, -459.142, 95.4143, 1.97246}, + {-1.81745, 7.67198, -10.8507, 5.09329, 8.14519}, + {-1.78177, 7.50871, -10.4840, 5.19725, 7.96365}, + {-2.03283, 10.8186, -21.2119, 18.3351, -6.48711, 8.32459} + }; + + std::vector> c_sat_poly = + { + {0.00115628, 2.42179}, + {-0.0176673, 0.0893044, 1.52732}, + {0.0102725, -0.115390, 0.324452, 1.41588}, + {-0.150662, 0.301807, 1.01867} + }; + + std::vector> Td_poly = + { + {-15.4627, 94.9716, 636.603}, + {-1.72277, 20.5898, 637.517}, + {-3.81280, 22.7809, 638.049}, + {2.83277, -24.7593, 85.9090, 524.898} + }; + + // Maximum pressure for the lithologies (Peridotite, Gabbro, MORB, Sediment). These are required because + // Above these pressures, the parameterized phase diagrams break down and the solubility goes to infinity. + double cutoff_pressure; + }; + } // namespace Composition + } // namespace OceanicPlateModels + } // namespace Features +} // namespace WorldBuilder + +#endif diff --git a/contrib/world_builder/include/world_builder/features/oceanic_plate_models/grains/random_uniform_distribution_deflected.h b/contrib/world_builder/include/world_builder/features/oceanic_plate_models/grains/random_uniform_distribution_deflected.h index 4a80945817d..f9b9c408a06 100644 --- a/contrib/world_builder/include/world_builder/features/oceanic_plate_models/grains/random_uniform_distribution_deflected.h +++ b/contrib/world_builder/include/world_builder/features/oceanic_plate_models/grains/random_uniform_distribution_deflected.h @@ -34,7 +34,7 @@ namespace WorldBuilder namespace Grains { /** - * This class represents a continental plate and can implement + * This class represents an oceanic plate and can implement * submodules for temperature and grains. These submodules determine * what the returned temperature or grains of the temperature and grains * functions of this class will be. @@ -105,6 +105,7 @@ namespace WorldBuilder std::vector grain_sizes; std::vector normalize_grain_sizes; std::vector deflections; + std::vector, 3>> basis_rotation_matrices; }; } // namespace Grains } // namespace OceanicPlateModels diff --git a/contrib/world_builder/include/world_builder/features/plume_models/grains/random_uniform_distribution_deflected.h b/contrib/world_builder/include/world_builder/features/plume_models/grains/random_uniform_distribution_deflected.h new file mode 100644 index 00000000000..da139e04885 --- /dev/null +++ b/contrib/world_builder/include/world_builder/features/plume_models/grains/random_uniform_distribution_deflected.h @@ -0,0 +1,112 @@ +/* + Copyright (C) 2018-2024 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#ifndef WORLD_BUILDER_FEATURES_PLUME_MODELS_GRAINS_RANDOM_UNIFORM_DISTRIBUTION_DEFLECTED_H +#define WORLD_BUILDER_FEATURES_PLUME_MODELS_GRAINS_RANDOM_UNIFORM_DISTRIBUTION_DEFLECTED_H + + +#include "world_builder/features/plume_models/grains/interface.h" +#include "world_builder/objects/surface.h" + +namespace WorldBuilder +{ + namespace Features + { + namespace PlumeModels + { + namespace Grains + { + /** + * This class represents a plume and can implement + * submodules for temperature and grains. These submodules determine + * what the returned temperature or grains of the temperature and grains + * functions of this class will be. + */ + class RandomUniformDistributionDeflected final : public Interface + { + public: + /** + * constructor + */ + RandomUniformDistributionDeflected(WorldBuilder::World *world); + + /** + * Destructor + */ + ~RandomUniformDistributionDeflected() override final; + + /** + * declare and read in the world builder file into the parameters + * class + */ + static void declare_entries(Parameters &prm, + const std::string &parent_name = ""); + + /** + * declare and read in the world builder file into the parameters + * class + */ + static void declare_grain_size_model_entries( + Parameters &prm, const std::string &parent_name, + const std::vector &required_entries); + + /** + * declare and read in the world builder file into the parameters + * class + */ + static void + declare_fixed_size_model_entries(Parameters &prm, + const std::string &parent_name = ""); + + /** + * declare and read in the world builder file into the parameters + * class + */ + void parse_entries(Parameters &prm) override final; + + /** + * Returns a grains based on the given position, composition (e.g. + * olivine and/or enstatite)depth in the model, gravity and current grains. + */ + WorldBuilder::grains + get_grains(const Point<3> &position, + const Objects::NaturalCoordinate &position_in_natural_coordinates, + const double depth, + const unsigned int composition_number, + WorldBuilder::grains grains, + const double feature_min_depth, + const double feature_max_depth) const override final; + + private: + double min_depth; + double max_depth; + std::vector grains; + std::vector compositions; + std::string operation; + std::vector grain_sizes; + std::vector normalize_grain_sizes; + std::vector deflections; + std::vector, 3>> basis_rotation_matrices; + }; + } // namespace Grains + } // namespace PlumeModels + } // namespace Features +} // namespace WorldBuilder + +#endif diff --git a/contrib/world_builder/include/world_builder/features/subducting_plate_models/composition/tian2019_water_content.h b/contrib/world_builder/include/world_builder/features/subducting_plate_models/composition/tian2019_water_content.h new file mode 100644 index 00000000000..94092b3c38d --- /dev/null +++ b/contrib/world_builder/include/world_builder/features/subducting_plate_models/composition/tian2019_water_content.h @@ -0,0 +1,147 @@ +/* + Copyright (C) 2018 - 2024 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#ifndef WORLD_BUILDER_FEATURES_SUBDUCTING_PLATE_MODELS_COMPOSITION_WATER_CONTENT_H +#define WORLD_BUILDER_FEATURES_SUBDUCTING_PLATE_MODELS_COMPOSITION_WATER_CONTENT_H + + +#include "world_builder/features/subducting_plate_models/composition/interface.h" +#include + + +namespace WorldBuilder +{ + + namespace Features + { + namespace SubductingPlateModels + { + namespace Composition + { + /** + * This class represents the bound water content in a subducting plate and can implement + * submodules for computing this bound water content. These submodules determine what + * the returned water content will be based on the the temperature and pressure at a point + * within the world. Currently, the bound water content can be determined for four different + * lithologies: sediments, mid-ocean ridge basalts, gabbros, and peridotites, using + * parameterized phase diagrams from Tian et al., 2019 (https://doi.org/10.1029/2019GC008488). + */ + class TianWaterContent final: public Interface + { + public: + /** + * constructor + */ + TianWaterContent(WorldBuilder::World *world); + + /** + * Destructor + */ + ~TianWaterContent() override final; + + /** + * declare and read in the world builder file into the parameters class + */ + static + void declare_entries(Parameters &prm, const std::string &parent_name = ""); + + /** + * declare and read in the world builder file into the parameters class + */ + void parse_entries(Parameters &prm) override final; + + /** + * Calculates what the maximum bound water content is at a point given a pressure and + * temperature. This can be done for 4 different lithologies, "sediment", "gabbro", + * "MORB", and "peridotite" + */ + double calculate_water_content(double pressure, + double temperature) const; + /** + * Returns a value for the bound water contend based on the given position, depth in the model, + * gravity, and the temperature at that point. + */ + double get_composition(const Point<3> &position, + const double depth, + const unsigned int composition_number, + double composition, + const double feature_min_depth, + const double feature_max_depth, + const WorldBuilder::Utilities::PointDistanceFromCurvedPlanes &distance_from_planes, + const AdditionalParameters &additional_parameters) const override final; + + + private: + // TianWaterContent composition submodule parameters + double min_depth; + double max_depth; + double density; // Density used to calculate the lithostatic pressure + std::vector compositions; + Operations operation; + std::string lithology_str; + double max_water_content; + + enum LithologyName + { + peridotite, + gabbro, + MORB, + sediment + }; + LithologyName lithology_type; + + // Define the coefficients for the polynomials for 3 quantities: LR which represents the + // enthalpy change of the dehydration reactions, c_sat which represents the volatile saturation + // content, and Td which represents the onset temperature of dehydration. The first row is for + // 'peridotite', the second row is for 'gabbro', the third row is for 'MORB', and the fourth row + // is for 'sediment'. + std::vector> LR_poly = + { + {-19.0609, 168.983, -630.032, 1281.84, -1543.14, 1111.88, -459.142, 95.4143, 1.97246}, + {-1.81745, 7.67198, -10.8507, 5.09329, 8.14519}, + {-1.78177, 7.50871, -10.4840, 5.19725, 7.96365}, + {-2.03283, 10.8186, -21.2119, 18.3351, -6.48711, 8.32459} + }; + + std::vector> c_sat_poly = + { + {0.00115628, 2.42179}, + {-0.0176673, 0.0893044, 1.52732}, + {0.0102725, -0.115390, 0.324452, 1.41588}, + {-0.150662, 0.301807, 1.01867} + }; + + std::vector> Td_poly = + { + {-15.4627, 94.9716, 636.603}, + {-1.72277, 20.5898, 637.517}, + {-3.81280, 22.7809, 638.049}, + {2.83277, -24.7593, 85.9090, 524.898} + }; + + // Maximum pressure for the lithologies (Peridotite, Gabbro, MORB, Sediment). These are required because + // Above these pressures, the parameterized phase diagrams break down and the solubility goes to infinity. + double cutoff_pressure; + }; + } // namespace Composition + } // namespace SubductingPlateModels + } // namespace Features +} // namespace WorldBuilder + +#endif diff --git a/contrib/world_builder/include/world_builder/features/subducting_plate_models/grains/random_uniform_distribution_deflected.h b/contrib/world_builder/include/world_builder/features/subducting_plate_models/grains/random_uniform_distribution_deflected.h index ddaada0be0b..273764c13f9 100644 --- a/contrib/world_builder/include/world_builder/features/subducting_plate_models/grains/random_uniform_distribution_deflected.h +++ b/contrib/world_builder/include/world_builder/features/subducting_plate_models/grains/random_uniform_distribution_deflected.h @@ -103,6 +103,7 @@ namespace WorldBuilder std::vector grain_sizes; std::vector normalize_grain_sizes; std::vector deflections; + std::vector, 3>> basis_rotation_matrices; }; } // namespace Grains diff --git a/contrib/world_builder/include/world_builder/utilities.h b/contrib/world_builder/include/world_builder/utilities.h index 9b5d2687a2d..68d389714f6 100644 --- a/contrib/world_builder/include/world_builder/utilities.h +++ b/contrib/world_builder/include/world_builder/utilities.h @@ -487,6 +487,14 @@ namespace WorldBuilder std::vector calculate_effective_trench_and_plate_ages(std::vector ridge_parameters, double distance_along_plane); + /* + * Returns the result of the multiplication of two 3*3 matrix, + * used in applying the random uniform distribution rotation matrix + * to a given orientation (rotation matrix) + */ + std::array,3> + multiply_3x3_matrices(const std::array,3> mat1, std::array,3> const mat2); + } // namespace Utilities } // namespace WorldBuilder diff --git a/contrib/world_builder/source/world_builder/features/continental_plate_models/grains/random_uniform_distribution_deflected.cc b/contrib/world_builder/source/world_builder/features/continental_plate_models/grains/random_uniform_distribution_deflected.cc index 02150f29edc..d1b077f17fc 100644 --- a/contrib/world_builder/source/world_builder/features/continental_plate_models/grains/random_uniform_distribution_deflected.cc +++ b/contrib/world_builder/source/world_builder/features/continental_plate_models/grains/random_uniform_distribution_deflected.cc @@ -19,8 +19,6 @@ #include "world_builder/features/continental_plate_models/grains/random_uniform_distribution_deflected.h" -#include - #include "world_builder/nan.h" #include "world_builder/types/array.h" #include "world_builder/types/bool.h" @@ -29,6 +27,7 @@ #include "world_builder/types/one_of.h" #include "world_builder/types/unsigned_int.h" #include "world_builder/types/value_at_points.h" +#include "world_builder/utilities.h" #include "world_builder/world.h" namespace WorldBuilder @@ -89,7 +88,11 @@ namespace WorldBuilder Types::Array(Types::Double(1),0), "A list of the deflections of all of the grains in each composition between 0 and 1."); + prm.declare_entry("basis rotation matrices", Types::Array(Types::Array(Types::Array(Types::Double(0),3,3),3,3),0), + "A list with the rotation matrices of the grains which are present there for each compositions."); + prm.declare_entry("basis Euler angles z-x-z", Types::Array(Types::Array(Types::Double(0),3,3),0), + "A list with the z-x-z Euler angles of the grains which are present there for each compositions."); } @@ -102,6 +105,31 @@ namespace WorldBuilder max_depth = max_depth_surface.maximum; compositions = prm.get_vector("compositions"); + const bool set_euler_angles = prm.check_entry("basis Euler angles z-x-z"); + const bool set_rotation_matrices = prm.check_entry("basis rotation matrices"); + + WBAssertThrow(!(set_euler_angles == true && set_rotation_matrices == true), + "Only Euler angles or Rotation matrices may be set, but both are set for " << prm.get_full_json_path()); + + + WBAssertThrow(!(set_euler_angles == false && set_rotation_matrices == false), + "Euler angles or Rotation matrices have to be set, but neither are set for " << prm.get_full_json_path()); + + if (set_euler_angles) + { + std::vector > basis_euler_angles_vector = prm.get_vector >("basis Euler angles z-x-z"); + basis_rotation_matrices.resize(basis_euler_angles_vector.size()); + for (size_t i = 0; i,3> >("basis rotation matrices"); + } + operation = prm.get("orientation operation"); grain_sizes = prm.get_vector("grain sizes"); normalize_grain_sizes = prm.get_vector("normalize grain sizes"); @@ -116,9 +144,11 @@ namespace WorldBuilder WBAssertThrow(compositions.size() == deflections.size(), "There are not the same amount of compositions (" << compositions.size() << ") and deflections (" << deflections.size() << ")."); + WBAssertThrow(compositions.size() == basis_rotation_matrices.size(), + "There are not the same amount of compositions (" << compositions.size() + << ") and rotation_matrices (" << basis_rotation_matrices.size() << ")."); } - WorldBuilder::grains RandomUniformDistributionDeflected::get_grains(const Point<3> & /*position_in_cartesian_coordinates*/, const Objects::NaturalCoordinate &position_in_natural_coordinates, @@ -161,9 +191,10 @@ namespace WorldBuilder const double two = dist(world->get_random_number_engine()); const double three = dist(world->get_random_number_engine()); + // the distribution is restricted by the deflection (between 0 and 1) const double theta = 2.0 * Consts::PI * one * deflections[i]; // Rotation about the pole (Z) const double phi = 2.0 * Consts::PI * two; // For direction of pole deflection. - const double z = 2.0* three * deflections[i]; //For magnitude of pole deflection. + const double z = 2.0 * three * deflections[i]; //For magnitude of pole deflection. // Compute a vector V used for distributing points over the sphere // via the reflection I - V Transpose(V). This formulation of V @@ -188,17 +219,33 @@ namespace WorldBuilder // Construct the rotation matrix ( V Transpose(V) - I ) R, which // is equivalent to V S - R. - it_rotation_matrices[0][0] = Vx * Sx - ct; - it_rotation_matrices[0][1] = Vx * Sy - st; - it_rotation_matrices[0][2] = Vx * Vz; - - it_rotation_matrices[1][0] = Vy * Sx + st; - it_rotation_matrices[1][1] = Vy * Sy - ct; - it_rotation_matrices[1][2] = Vy * Vz; - - it_rotation_matrices[2][0] = Vz * Sx; - it_rotation_matrices[2][1] = Vz * Sy; - it_rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + std::array,3> rotation_matrices; + rotation_matrices[0][0] = (Vx * Sx - ct); + rotation_matrices[0][1] = (Vx * Sy - st); + rotation_matrices[0][2] = Vx * Vz; + + rotation_matrices[1][0] = (Vy * Sx + st); + rotation_matrices[1][1] = (Vy * Sy - ct); + rotation_matrices[1][2] = Vy * Vz; + + rotation_matrices[2][0] = Vz * Sx; + rotation_matrices[2][1] = Vz * Sy; + rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + + // Rotate the basis rotation matrix with the random uniform distribution rotation matrix + // First get the transpose of the rotation matrix + std::array, 3> rot_T= rotation_matrices; + rot_T[0][1] = rotation_matrices[1][0]; + rot_T[1][0] = rotation_matrices[0][1]; + rot_T[1][2] = rotation_matrices[2][1]; + rot_T[2][1] = rotation_matrices[1][2]; + rot_T[0][2] = rotation_matrices[2][0]; + rot_T[2][0] = rotation_matrices[0][2]; + + // Then U' = R * U * R^T + std::array,3> result1 = Utilities::multiply_3x3_matrices(rotation_matrices, basis_rotation_matrices[i]); + + it_rotation_matrices = result1; } double total_size = 0; @@ -211,8 +258,15 @@ namespace WorldBuilder if (normalize_grain_sizes[i]) { const double one_over_total_size = 1/total_size; - std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), - [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // std::transform is a c++17 feature, while current GWB is c++14 + // update this after switching to c+=17 + // std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), + // [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // Apply the transformation using a loop + for (auto &&size : grains_local.sizes) + { + size = size*one_over_total_size; + } } diff --git a/contrib/world_builder/source/world_builder/features/continental_plate_models/temperature/linear.cc b/contrib/world_builder/source/world_builder/features/continental_plate_models/temperature/linear.cc index 2c92fae4f7d..03d173390fa 100644 --- a/contrib/world_builder/source/world_builder/features/continental_plate_models/temperature/linear.cc +++ b/contrib/world_builder/source/world_builder/features/continental_plate_models/temperature/linear.cc @@ -129,8 +129,8 @@ namespace WorldBuilder } const double new_temperature = top_temperature_local + (max_depth_local_local - min_depth_local_local < 10.0*std::numeric_limits::epsilon() ? 0.0 : - (depth - min_depth_local) * - ((bottom_temperature_local - top_temperature_local) / (max_depth_local_local - min_depth_local_local))); + (depth - min_depth_local) * + ((bottom_temperature_local - top_temperature_local) / (max_depth_local_local - min_depth_local_local))); WBAssert(!std::isnan(new_temperature), "Temperature is not a number: " << new_temperature << ", based on a temperature model with the name " << this->name); diff --git a/contrib/world_builder/source/world_builder/features/fault_models/grains/random_uniform_distribution_deflected.cc b/contrib/world_builder/source/world_builder/features/fault_models/grains/random_uniform_distribution_deflected.cc index 1f970ee202e..d2d10249d79 100644 --- a/contrib/world_builder/source/world_builder/features/fault_models/grains/random_uniform_distribution_deflected.cc +++ b/contrib/world_builder/source/world_builder/features/fault_models/grains/random_uniform_distribution_deflected.cc @@ -19,8 +19,6 @@ #include "world_builder/features/fault_models/grains/random_uniform_distribution_deflected.h" -#include - #include "world_builder/nan.h" #include "world_builder/types/array.h" #include "world_builder/types/bool.h" @@ -88,6 +86,12 @@ namespace WorldBuilder Types::Array(Types::Double(1),0), "A list of the deflections of all of the grains in each composition between 0 and 1."); + prm.declare_entry("basis rotation matrices", Types::Array(Types::Array(Types::Array(Types::Double(0),3,3),3,3),0), + "A list with the rotation matrices of the grains which are present there for each compositions."); + + prm.declare_entry("basis Euler angles z-x-z", Types::Array(Types::Array(Types::Double(0),3,3),0), + "A list with the z-x-z Euler angles of the grains which are present there for each compositions."); + } @@ -99,6 +103,31 @@ namespace WorldBuilder max_depth = prm.get("max distance fault center"); compositions = prm.get_vector("compositions"); + const bool set_euler_angles = prm.check_entry("basis Euler angles z-x-z"); + const bool set_rotation_matrices = prm.check_entry("basis rotation matrices"); + + WBAssertThrow(!(set_euler_angles == true && set_rotation_matrices == true), + "Only Euler angles or Rotation matrices may be set, but both are set for " << prm.get_full_json_path()); + + + WBAssertThrow(!(set_euler_angles == false && set_rotation_matrices == false), + "Euler angles or Rotation matrices have to be set, but neither are set for " << prm.get_full_json_path()); + + if (set_euler_angles) + { + std::vector > basis_euler_angles_vector = prm.get_vector >("basis Euler angles z-x-z"); + basis_rotation_matrices.resize(basis_euler_angles_vector.size()); + for (size_t i = 0; i,3> >("basis rotation matrices"); + } + operation = prm.get("orientation operation"); grain_sizes = prm.get_vector("grain sizes"); normalize_grain_sizes = prm.get_vector("normalize grain sizes"); @@ -113,9 +142,11 @@ namespace WorldBuilder WBAssertThrow(compositions.size() == deflections.size(), "There are not the same amount of compositions (" << compositions.size() << ") and deflections (" << deflections.size() << ")."); + WBAssertThrow(compositions.size() == basis_rotation_matrices.size(), + "There are not the same amount of compositions (" << compositions.size() + << ") and rotation_matrices (" << basis_rotation_matrices.size() << ")."); } - WorldBuilder::grains RandomUniformDistributionDeflected::get_grains(const Point<3> & /*position_in_cartesian_coordinates*/, const double /*depth*/, @@ -182,17 +213,33 @@ namespace WorldBuilder // Construct the rotation matrix ( V Transpose(V) - I ) R, which // is equivalent to V S - R. - it_rotation_matrices[0][0] = Vx * Sx - ct; - it_rotation_matrices[0][1] = Vx * Sy - st; - it_rotation_matrices[0][2] = Vx * Vz; - - it_rotation_matrices[1][0] = Vy * Sx + st; - it_rotation_matrices[1][1] = Vy * Sy - ct; - it_rotation_matrices[1][2] = Vy * Vz; - - it_rotation_matrices[2][0] = Vz * Sx; - it_rotation_matrices[2][1] = Vz * Sy; - it_rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + std::array,3> rotation_matrices; + rotation_matrices[0][0] = (Vx * Sx - ct); + rotation_matrices[0][1] = (Vx * Sy - st); + rotation_matrices[0][2] = Vx * Vz; + + rotation_matrices[1][0] = (Vy * Sx + st); + rotation_matrices[1][1] = (Vy * Sy - ct); + rotation_matrices[1][2] = Vy * Vz; + + rotation_matrices[2][0] = Vz * Sx; + rotation_matrices[2][1] = Vz * Sy; + rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + + // Rotate the basis rotation matrix with the random uniform distribution rotation matrix + // First get the transpose of the rotation matrix + std::array, 3> rot_T= rotation_matrices; + rot_T[0][1] = rotation_matrices[1][0]; + rot_T[1][0] = rotation_matrices[0][1]; + rot_T[1][2] = rotation_matrices[2][1]; + rot_T[2][1] = rotation_matrices[1][2]; + rot_T[0][2] = rotation_matrices[2][0]; + rot_T[2][0] = rotation_matrices[0][2]; + + // Then U' = R * U * R^T + std::array,3> result1 = multiply_3x3_matrices(rotation_matrices, basis_rotation_matrices[i]); + + it_rotation_matrices = result1; } double total_size = 0; @@ -205,8 +252,15 @@ namespace WorldBuilder if (normalize_grain_sizes[i]) { const double one_over_total_size = 1/total_size; - std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), - [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // std::transform is a c++17 feature, while current GWB is c++14 + // update this after switching to c+=17 + // std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), + // [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // Apply the transformation using a loop + for (auto &&size : grains_local.sizes) + { + size = size*one_over_total_size; + } } return grains_local; diff --git a/contrib/world_builder/source/world_builder/features/mantle_layer_models/grains/random_uniform_distribution_deflected.cc b/contrib/world_builder/source/world_builder/features/mantle_layer_models/grains/random_uniform_distribution_deflected.cc index d3cf85005b2..deb0dfa724e 100644 --- a/contrib/world_builder/source/world_builder/features/mantle_layer_models/grains/random_uniform_distribution_deflected.cc +++ b/contrib/world_builder/source/world_builder/features/mantle_layer_models/grains/random_uniform_distribution_deflected.cc @@ -19,8 +19,6 @@ #include "world_builder/features/mantle_layer_models/grains/random_uniform_distribution_deflected.h" -#include - #include "world_builder/nan.h" #include "world_builder/types/array.h" #include "world_builder/types/bool.h" @@ -29,6 +27,7 @@ #include "world_builder/types/one_of.h" #include "world_builder/types/unsigned_int.h" #include "world_builder/types/value_at_points.h" +#include "world_builder/utilities.h" #include "world_builder/world.h" namespace WorldBuilder @@ -89,7 +88,11 @@ namespace WorldBuilder Types::Array(Types::Double(1),0), "A list of the deflections of all of the grains in each composition between 0 and 1."); + prm.declare_entry("basis rotation matrices", Types::Array(Types::Array(Types::Array(Types::Double(0),3,3),3,3),0), + "A list with the rotation matrices of the grains which are present there for each compositions."); + prm.declare_entry("basis Euler angles z-x-z", Types::Array(Types::Array(Types::Double(0),3,3),0), + "A list with the z-x-z Euler angles of the grains which are present there for each compositions."); } @@ -102,6 +105,31 @@ namespace WorldBuilder max_depth = max_depth_surface.maximum; compositions = prm.get_vector("compositions"); + const bool set_euler_angles = prm.check_entry("basis Euler angles z-x-z"); + const bool set_rotation_matrices = prm.check_entry("basis rotation matrices"); + + WBAssertThrow(!(set_euler_angles == true && set_rotation_matrices == true), + "Only Euler angles or Rotation matrices may be set, but both are set for " << prm.get_full_json_path()); + + + WBAssertThrow(!(set_euler_angles == false && set_rotation_matrices == false), + "Euler angles or Rotation matrices have to be set, but neither are set for " << prm.get_full_json_path()); + + if (set_euler_angles) + { + std::vector > basis_euler_angles_vector = prm.get_vector >("basis Euler angles z-x-z"); + basis_rotation_matrices.resize(basis_euler_angles_vector.size()); + for (size_t i = 0; i,3> >("basis rotation matrices"); + } + operation = prm.get("orientation operation"); grain_sizes = prm.get_vector("grain sizes"); normalize_grain_sizes = prm.get_vector("normalize grain sizes"); @@ -116,9 +144,11 @@ namespace WorldBuilder WBAssertThrow(compositions.size() == deflections.size(), "There are not the same amount of compositions (" << compositions.size() << ") and deflections (" << deflections.size() << ")."); + WBAssertThrow(compositions.size() == basis_rotation_matrices.size(), + "There are not the same amount of compositions (" << compositions.size() + << ") and rotation_matrices (" << basis_rotation_matrices.size() << ")."); } - WorldBuilder::grains RandomUniformDistributionDeflected::get_grains(const Point<3> & /*position_in_cartesian_coordinates*/, const Objects::NaturalCoordinate &position_in_natural_coordinates, @@ -164,7 +194,7 @@ namespace WorldBuilder // the distribution is restricted by the deflection (between 0 and 1) const double theta = 2.0 * Consts::PI * one * deflections[i]; // Rotation about the pole (Z) const double phi = 2.0 * Consts::PI * two; // For direction of pole deflection. - const double z = 2.0* three * deflections[i]; //For magnitude of pole deflection. + const double z = 2.0 * three * deflections[i]; //For magnitude of pole deflection. // Compute a vector V used for distributing points over the sphere // via the reflection I - V Transpose(V). This formulation of V @@ -189,17 +219,33 @@ namespace WorldBuilder // Construct the rotation matrix ( V Transpose(V) - I ) R, which // is equivalent to V S - R. - it_rotation_matrices[0][0] = Vx * Sx - ct; - it_rotation_matrices[0][1] = Vx * Sy - st; - it_rotation_matrices[0][2] = Vx * Vz; - - it_rotation_matrices[1][0] = Vy * Sx + st; - it_rotation_matrices[1][1] = Vy * Sy - ct; - it_rotation_matrices[1][2] = Vy * Vz; - - it_rotation_matrices[2][0] = Vz * Sx; - it_rotation_matrices[2][1] = Vz * Sy; - it_rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + std::array,3> rotation_matrices; + rotation_matrices[0][0] = (Vx * Sx - ct); + rotation_matrices[0][1] = (Vx * Sy - st); + rotation_matrices[0][2] = Vx * Vz; + + rotation_matrices[1][0] = (Vy * Sx + st); + rotation_matrices[1][1] = (Vy * Sy - ct); + rotation_matrices[1][2] = Vy * Vz; + + rotation_matrices[2][0] = Vz * Sx; + rotation_matrices[2][1] = Vz * Sy; + rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + + // Rotate the basis rotation matrix with the random uniform distribution rotation matrix + // First get the transpose of the rotation matrix + std::array, 3> rot_T= rotation_matrices; + rot_T[0][1] = rotation_matrices[1][0]; + rot_T[1][0] = rotation_matrices[0][1]; + rot_T[1][2] = rotation_matrices[2][1]; + rot_T[2][1] = rotation_matrices[1][2]; + rot_T[0][2] = rotation_matrices[2][0]; + rot_T[2][0] = rotation_matrices[0][2]; + + // Then U' = R * U * R^T + std::array,3> result1 = multiply_3x3_matrices(rotation_matrices, basis_rotation_matrices[i]); + + it_rotation_matrices = result1; } double total_size = 0; @@ -212,8 +258,15 @@ namespace WorldBuilder if (normalize_grain_sizes[i]) { const double one_over_total_size = 1/total_size; - std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), - [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // std::transform is a c++17 feature, while current GWB is c++14 + // update this after switching to c+=17 + // std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), + // [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // Apply the transformation using a loop + for (auto &&size : grains_local.sizes) + { + size = size*one_over_total_size; + } } return grains_local; diff --git a/contrib/world_builder/source/world_builder/features/oceanic_plate_models/composition/tian2019_water_content.cc b/contrib/world_builder/source/world_builder/features/oceanic_plate_models/composition/tian2019_water_content.cc new file mode 100644 index 00000000000..4794a54f5da --- /dev/null +++ b/contrib/world_builder/source/world_builder/features/oceanic_plate_models/composition/tian2019_water_content.cc @@ -0,0 +1,206 @@ +/* + Copyright (C) 2018 - 2024 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#include "world_builder/features/oceanic_plate_models/composition/tian2019_water_content.h" + +#include "world_builder/kd_tree.h" +#include "world_builder/nan.h" +#include "world_builder/types/array.h" +#include "world_builder/types/double.h" +#include "world_builder/types/object.h" +#include "world_builder/types/one_of.h" +#include "world_builder/types/unsigned_int.h" +#include "world_builder/types/value_at_points.h" +#include "world_builder/utilities.h" +#include "world_builder/world.h" + + +namespace WorldBuilder +{ + + using namespace Utilities; + + namespace Features + { + namespace OceanicPlateModels + { + namespace Composition + { + TianWaterContent::TianWaterContent(WorldBuilder::World *world_) + : + min_depth(NaN::DSNAN), + max_depth(NaN::DSNAN), + density(NaN::DSNAN) + { + this->world = world_; + this->name = "water content"; + } + + TianWaterContent::~TianWaterContent() + = default; + + void + TianWaterContent::declare_entries(Parameters &prm, const std::string & /*unused*/) + { + // Document plugin and require entries if needed. + // Add compositions to the required parameters. + prm.declare_entry("", Types::Object({"compositions"}), + "TianWaterContent compositional model. Sets bound water content as a compositional field. The returned " + "water content is based on the the temperature and pressure at a point within the world. Currently, " + "the bound water content can be determined for four different lithologies: 'sediment', mid-ocean " + "ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 " + "(https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined " + "density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the " + "parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', " + "26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'."); + + // Declare entries of this plugin + prm.declare_entry("min depth", Types::OneOf(Types::Double(0),Types::Array(Types::ValueAtPoints(0., 2.))), + "The depth in meters from which the composition of this feature is present."); + prm.declare_entry("max depth", Types::OneOf(Types::Double(std::numeric_limits::max()),Types::Array(Types::ValueAtPoints(std::numeric_limits::max(), 2.))), + "The depth in meters to which the composition of this feature is present."); + prm.declare_entry("compositions", Types::Array(Types::UnsignedInt(),0), + "A list with the labels of the composition which are present there."); + prm.declare_entry("density", Types::Double(3000.0), + "The reference density used for determining the lithostatic pressure for calculating " + "the bound water content."); + prm.declare_entry("lithology", Types::String("peridotite"), + "The lithology used to determine which polynomials to use for calculating the water content. Valid options are: " + "'sediment', 'MORB', 'gabbro', and 'peridotite'."); + prm.declare_entry("initial water content", Types::Double(5), + "The value of the initial water content (in wt%) for the lithology at the trench. This represents the " + "max value applied to this lithology."); + prm.declare_entry("cutoff pressure", Types::Double(10), + "The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because " + "the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for " + "'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'."); + prm.declare_entry("operation", Types::String("replace", std::vector {"replace", "replace defined only", "add", "subtract"}), + "Whether the value should replace any value previously defined at this location (replace) or " + "add the value to the previously define value. Replacing implies that all compositions not " + "explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option."); + } + + void + TianWaterContent::parse_entries(Parameters &prm, const std::vector> &coordinates) + { + min_depth_surface = Objects::Surface(prm.get("min depth",coordinates)); + min_depth = min_depth_surface.minimum; + max_depth_surface = Objects::Surface(prm.get("max depth",coordinates)); + max_depth = max_depth_surface.maximum; + density = prm.get("density"); + compositions = prm.get_vector("compositions"); + max_water_content = prm.get("initial water content"); + operation = string_operations_to_enum(prm.get("operation")); + cutoff_pressure = prm.get("cutoff pressure"); + std::string lithology_string = prm.get("lithology"); + + if (lithology_string=="peridotite") + lithology_type = peridotite; + else if (lithology_string=="gabbro") + lithology_type = gabbro; + else if (lithology_string=="MORB") + lithology_type = MORB; + else if (lithology_string=="sediment") + lithology_type = sediment; + } + + + double + TianWaterContent::calculate_water_content(double pressure, + double temperature) const + { + double ln_LR_value = 0; + double ln_c_sat_value = 0; + double Td_value = 0; + std::vector LR_polynomial_coeffs; + std::vector c_sat_polynomial_coeffs; + std::vector Td_polynomial_coeffs; + + // Calculate the c_sat value from Tian et al., 2019 + if (lithology_type == sediment) + { + for (unsigned int c_sat_index = 0; c_sat_index < c_sat_poly[lithology_type].size(); ++c_sat_index) + ln_c_sat_value += c_sat_poly[lithology_type][c_sat_index] * (std::pow(std::log10(pressure), c_sat_poly[lithology_type].size() - 1 - c_sat_index)); + } + else + { + for (unsigned int c_sat_index = 0; c_sat_index < c_sat_poly[lithology_type].size(); ++c_sat_index) + ln_c_sat_value += c_sat_poly[lithology_type][c_sat_index] * (std::pow(pressure, c_sat_poly[lithology_type].size() - 1 - c_sat_index)); + } + + // Calculate the LR value from Tian et al., 2019 + for (unsigned int LR_coeff_index = 0; LR_coeff_index < LR_poly[lithology_type].size(); ++LR_coeff_index) + ln_LR_value += LR_poly[lithology_type][LR_coeff_index] * (std::pow(1/pressure, LR_poly[lithology_type].size() - 1 - LR_coeff_index)); + + // Calculate the Td value from Tian et al., 2019 + for (unsigned int Td_coeff_index = 0; Td_coeff_index < Td_poly[lithology_type].size(); ++Td_coeff_index) + Td_value += Td_poly[lithology_type][Td_coeff_index] * (std::pow(pressure, Td_poly[lithology_type].size() - 1 - Td_coeff_index)); + + double partition_coeff = std::exp(ln_c_sat_value) * std::exp(std::exp(ln_LR_value) * (1/temperature - 1/Td_value)); + return partition_coeff; + } + + + double + TianWaterContent::get_composition(const Point<3> &position_in_cartesian_coordinates, + const Objects::NaturalCoordinate &position_in_natural_coordinates, + const double depth, + const unsigned int composition_number, + double composition, + const double /*feature_min_depth*/, + const double /*feature_max_depth*/) const + { + if (depth <= max_depth && depth >= min_depth) + { + const double min_depth_local = min_depth_surface.constant_value ? min_depth : min_depth_surface.local_value(position_in_natural_coordinates.get_surface_point()).interpolated_value; + const double max_depth_local = max_depth_surface.constant_value ? max_depth : max_depth_surface.local_value(position_in_natural_coordinates.get_surface_point()).interpolated_value; + if (depth <= max_depth_local && depth >= min_depth_local) + { + // The polynomials break down for pressures less than 0.5 GPa, and for pressures above a user defined cutoff pressure + // ensure that the pressure is never below 0.5 GPa + const double lithostatic_pressure = std::max(0.5, std::min(density * 9.81 * depth / 1e9, cutoff_pressure)); // GPa + const double slab_temperature = world->properties(position_in_cartesian_coordinates.get_array(), depth, {{{1,0,0}}})[0]; + double partition_coefficient = calculate_water_content(lithostatic_pressure, + slab_temperature); + + partition_coefficient = std::min(max_water_content, partition_coefficient); + + for (unsigned int i = 0; i < compositions.size(); ++i) + { + if (compositions[i] == composition_number) + { + return apply_operation(operation,composition, partition_coefficient); + } + } + + if (operation == Operations::REPLACE) + { + return 0.0; + } + } + } + return composition; + } + WB_REGISTER_FEATURE_OCEANIC_PLATE_COMPOSITION_MODEL(TianWaterContent, tian water content) + } // namespace Composition + } // namespace OceanicPlateModels + } // namespace Features +} // namespace WorldBuilder + + diff --git a/contrib/world_builder/source/world_builder/features/oceanic_plate_models/grains/random_uniform_distribution_deflected.cc b/contrib/world_builder/source/world_builder/features/oceanic_plate_models/grains/random_uniform_distribution_deflected.cc index ffac673631f..e95a4cf56bd 100644 --- a/contrib/world_builder/source/world_builder/features/oceanic_plate_models/grains/random_uniform_distribution_deflected.cc +++ b/contrib/world_builder/source/world_builder/features/oceanic_plate_models/grains/random_uniform_distribution_deflected.cc @@ -19,8 +19,6 @@ #include "world_builder/features/oceanic_plate_models/grains/random_uniform_distribution_deflected.h" -#include - #include "world_builder/nan.h" #include "world_builder/types/array.h" #include "world_builder/types/bool.h" @@ -29,6 +27,7 @@ #include "world_builder/types/one_of.h" #include "world_builder/types/unsigned_int.h" #include "world_builder/types/value_at_points.h" +#include "world_builder/utilities.h" #include "world_builder/world.h" namespace WorldBuilder @@ -89,7 +88,11 @@ namespace WorldBuilder Types::Array(Types::Double(1),0), "A list of the deflections of all of the grains in each composition between 0 and 1."); + prm.declare_entry("basis rotation matrices", Types::Array(Types::Array(Types::Array(Types::Double(0),3,3),3,3),0), + "A list with the rotation matrices of the grains which are present there for each compositions."); + prm.declare_entry("basis Euler angles z-x-z", Types::Array(Types::Array(Types::Double(0),3,3),0), + "A list with the z-x-z Euler angles of the grains which are present there for each compositions."); } @@ -102,6 +105,31 @@ namespace WorldBuilder max_depth = max_depth_surface.maximum; compositions = prm.get_vector("compositions"); + const bool set_euler_angles = prm.check_entry("basis Euler angles z-x-z"); + const bool set_rotation_matrices = prm.check_entry("basis rotation matrices"); + + WBAssertThrow(!(set_euler_angles == true && set_rotation_matrices == true), + "Only Euler angles or Rotation matrices may be set, but both are set for " << prm.get_full_json_path()); + + + WBAssertThrow(!(set_euler_angles == false && set_rotation_matrices == false), + "Euler angles or Rotation matrices have to be set, but neither are set for " << prm.get_full_json_path()); + + if (set_euler_angles) + { + std::vector > basis_euler_angles_vector = prm.get_vector >("basis Euler angles z-x-z"); + basis_rotation_matrices.resize(basis_euler_angles_vector.size()); + for (size_t i = 0; i,3> >("basis rotation matrices"); + } + operation = prm.get("orientation operation"); grain_sizes = prm.get_vector("grain sizes"); normalize_grain_sizes = prm.get_vector("normalize grain sizes"); @@ -116,9 +144,11 @@ namespace WorldBuilder WBAssertThrow(compositions.size() == deflections.size(), "There are not the same amount of compositions (" << compositions.size() << ") and deflections (" << deflections.size() << ")."); + WBAssertThrow(compositions.size() == basis_rotation_matrices.size(), + "There are not the same amount of compositions (" << compositions.size() + << ") and rotation_matrices (" << basis_rotation_matrices.size() << ")."); } - WorldBuilder::grains RandomUniformDistributionDeflected::get_grains(const Point<3> & /*position_in_cartesian_coordinates*/, const Objects::NaturalCoordinate &position_in_natural_coordinates, @@ -161,9 +191,10 @@ namespace WorldBuilder const double two = dist(world->get_random_number_engine()); const double three = dist(world->get_random_number_engine()); + // the distribution is restricted by the deflection (between 0 and 1) const double theta = 2.0 * Consts::PI * one * deflections[i]; // Rotation about the pole (Z) const double phi = 2.0 * Consts::PI * two; // For direction of pole deflection. - const double z = 2.0* three * deflections[i]; //For magnitude of pole deflection. + const double z = 2.0 * three * deflections[i]; //For magnitude of pole deflection. // Compute a vector V used for distributing points over the sphere // via the reflection I - V Transpose(V). This formulation of V @@ -188,17 +219,33 @@ namespace WorldBuilder // Construct the rotation matrix ( V Transpose(V) - I ) R, which // is equivalent to V S - R. - it_rotation_matrices[0][0] = Vx * Sx - ct; - it_rotation_matrices[0][1] = Vx * Sy - st; - it_rotation_matrices[0][2] = Vx * Vz; - - it_rotation_matrices[1][0] = Vy * Sx + st; - it_rotation_matrices[1][1] = Vy * Sy - ct; - it_rotation_matrices[1][2] = Vy * Vz; - - it_rotation_matrices[2][0] = Vz * Sx; - it_rotation_matrices[2][1] = Vz * Sy; - it_rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + std::array,3> rotation_matrices; + rotation_matrices[0][0] = (Vx * Sx - ct); + rotation_matrices[0][1] = (Vx * Sy - st); + rotation_matrices[0][2] = Vx * Vz; + + rotation_matrices[1][0] = (Vy * Sx + st); + rotation_matrices[1][1] = (Vy * Sy - ct); + rotation_matrices[1][2] = Vy * Vz; + + rotation_matrices[2][0] = Vz * Sx; + rotation_matrices[2][1] = Vz * Sy; + rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + + // Rotate the basis rotation matrix with the random uniform distribution rotation matrix + // First get the transpose of the rotation matrix + std::array, 3> rot_T= rotation_matrices; + rot_T[0][1] = rotation_matrices[1][0]; + rot_T[1][0] = rotation_matrices[0][1]; + rot_T[1][2] = rotation_matrices[2][1]; + rot_T[2][1] = rotation_matrices[1][2]; + rot_T[0][2] = rotation_matrices[2][0]; + rot_T[2][0] = rotation_matrices[0][2]; + + // Then U' = R * U * R^T + std::array,3> result1 = multiply_3x3_matrices(rotation_matrices, basis_rotation_matrices[i]); + + it_rotation_matrices = result1; } double total_size = 0; @@ -211,8 +258,15 @@ namespace WorldBuilder if (normalize_grain_sizes[i]) { const double one_over_total_size = 1/total_size; - std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), - [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // std::transform is a c++17 feature, while current GWB is c++14 + // update this after switching to c+=17 + // std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), + // [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // Apply the transformation using a loop + for (auto &&size : grains_local.sizes) + { + size = size*one_over_total_size; + } } return grains_local; diff --git a/contrib/world_builder/source/world_builder/features/oceanic_plate_models/temperature/linear.cc b/contrib/world_builder/source/world_builder/features/oceanic_plate_models/temperature/linear.cc index 3dad3b341bb..c76478656ba 100644 --- a/contrib/world_builder/source/world_builder/features/oceanic_plate_models/temperature/linear.cc +++ b/contrib/world_builder/source/world_builder/features/oceanic_plate_models/temperature/linear.cc @@ -126,8 +126,8 @@ namespace WorldBuilder } const double new_temperature = top_temperature_local + (max_depth_local_local - min_depth_local_local < 10.0*std::numeric_limits::epsilon() ? 0.0 : - (depth - min_depth_local_local) * - ((bottom_temperature_local - top_temperature_local) / (max_depth_local_local - min_depth_local_local))); + (depth - min_depth_local_local) * + ((bottom_temperature_local - top_temperature_local) / (max_depth_local_local - min_depth_local_local))); return apply_operation(operation,temperature_,new_temperature); } diff --git a/contrib/world_builder/source/world_builder/features/plume_models/grains/random_uniform_distribution_deflected.cc b/contrib/world_builder/source/world_builder/features/plume_models/grains/random_uniform_distribution_deflected.cc new file mode 100644 index 00000000000..c1b98b6dbc9 --- /dev/null +++ b/contrib/world_builder/source/world_builder/features/plume_models/grains/random_uniform_distribution_deflected.cc @@ -0,0 +1,282 @@ +/* + Copyright (C) 2018-2024 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#include "world_builder/features/plume_models/grains/random_uniform_distribution_deflected.h" + +#include "world_builder/nan.h" +#include "world_builder/types/array.h" +#include "world_builder/types/double.h" +#include "world_builder/types/object.h" +#include "world_builder/types/one_of.h" +#include "world_builder/types/unsigned_int.h" +#include "world_builder/types/value_at_points.h" +#include "world_builder/utilities.h" +#include "world_builder/types/bool.h" +#include "world_builder/world.h" + +namespace WorldBuilder +{ + + using namespace Utilities; + + namespace Features + { + namespace PlumeModels + { + namespace Grains + { + RandomUniformDistributionDeflected::RandomUniformDistributionDeflected(WorldBuilder::World *world_) + : + min_depth(NaN::DSNAN), + max_depth(NaN::DSNAN) + + { + this->world = world_; + this->name = "random uniform distribution deflected"; + } + + RandomUniformDistributionDeflected::~RandomUniformDistributionDeflected() + = default; + + void + RandomUniformDistributionDeflected::declare_entries(Parameters &prm, const std::string & /*unused*/) + { + // Document plugin and require entries if needed. + // Add compositions to the required parameters. + prm.declare_entry("", Types::Object({"compositions"}), + "Random uniform distribution grains model. The size of the grains can be independently set " + "to a single value or to a random distribution."); + + // Declare entries of this plugin + prm.declare_entry("min depth", Types::Double(0), + "The depth in meters from which the grains of this feature are present."); + prm.declare_entry("max depth", Types::Double(std::numeric_limits::max()), + "The depth in meters to which the grains of this feature are present."); + + prm.declare_entry("compositions", Types::Array(Types::UnsignedInt(),0), + "A list with the integer labels of the composition which are present there."); + + prm.declare_entry("orientation operation", Types::String("replace", std::vector {"replace", "multiply"}), + "Whether the value should replace any value previously defined at this location (replace) or " + "add the value to the previously define value (add, not implemented). Replacing implies that all values not " + "explicitly defined are set to zero."); + + prm.declare_entry("grain sizes", + Types::Array(Types::Double(1),0), + "A list of the size of all of the grains in each composition. If set to <0, the size will be randomized between 0 and 1."); + + prm.declare_entry("normalize grain sizes", + Types::Array(Types::Bool(true),0), + "A list of whether the sizes of the grains should be normalized or not. If normalized, the total of the grains of a composition will be equal to 1."); + + prm.declare_entry("deflections", + Types::Array(Types::Double(1),0), + "A list of the deflections of all of the grains in each composition between 0 and 1."); + + prm.declare_entry("basis rotation matrices", Types::Array(Types::Array(Types::Array(Types::Double(0),3,3),3,3),0), + "A list with the rotation matrices of the grains which are present there for each compositions."); + + prm.declare_entry("basis Euler angles z-x-z", Types::Array(Types::Array(Types::Double(0),3,3),0), + "A list with the z-x-z Euler angles of the grains which are present there for each compositions."); + + + } + + void + RandomUniformDistributionDeflected::parse_entries(Parameters &prm) + { + min_depth = prm.get("min depth"); + max_depth = prm.get("max depth"); + compositions = prm.get_vector("compositions"); + + const bool set_euler_angles = prm.check_entry("basis Euler angles z-x-z"); + const bool set_rotation_matrices = prm.check_entry("basis rotation matrices"); + + WBAssertThrow(!(set_euler_angles == true && set_rotation_matrices == true), + "Only Euler angles or Rotation matrices may be set, but both are set for " << prm.get_full_json_path()); + + + WBAssertThrow(!(set_euler_angles == false && set_rotation_matrices == false), + "Euler angles or Rotation matrices have to be set, but neither are set for " << prm.get_full_json_path()); + + if (set_euler_angles) + { + std::vector > basis_euler_angles_vector = prm.get_vector >("basis Euler angles z-x-z"); + basis_rotation_matrices.resize(basis_euler_angles_vector.size()); + for (size_t i = 0; i,3> >("basis rotation matrices"); + } + + operation = prm.get("orientation operation"); + grain_sizes = prm.get_vector("grain sizes"); + normalize_grain_sizes = prm.get_vector("normalize grain sizes"); + deflections = prm.get_vector("deflections"); + + + WBAssertThrow(compositions.size() == grain_sizes.size(), + "There are not the same amount of compositions (" << compositions.size() + << ") and grain_sizes (" << grain_sizes.size() << ")."); + WBAssertThrow(compositions.size() == normalize_grain_sizes.size(), + "There are not the same amount of compositions (" << compositions.size() + << ") and normalize_grain_sizes (" << normalize_grain_sizes.size() << ")."); + WBAssertThrow(compositions.size() == deflections.size(), + "There are not the same amount of compositions (" << compositions.size() + << ") and deflections (" << deflections.size() << ")."); + WBAssertThrow(compositions.size() == basis_rotation_matrices.size(), + "There are not the same amount of compositions (" << compositions.size() + << ") and rotation_matrices (" << basis_rotation_matrices.size() << ")."); + } + + WorldBuilder::grains + RandomUniformDistributionDeflected::get_grains(const Point<3> & /*position_in_cartesian_coordinates*/, + const Objects::NaturalCoordinate & /*position_in_natural_coordinates*/, + const double depth, + const unsigned int composition_number, + WorldBuilder::grains grains_, + const double /*feature_min_depth*/, + const double /*feature_max_depth*/) const + { + WorldBuilder::grains grains_local = grains_; + if (depth <= max_depth && depth >= min_depth) + { + for (unsigned int i =0; i < compositions.size(); ++i) + { + if (compositions[i] == composition_number) + { + std::uniform_real_distribution<> dist(0.0,1.0); + for (auto &&it_rotation_matrices : grains_local.rotation_matrices) + { + // set a uniform random a_cosine_matrix per grain + // This function is based on an article in Graphic Gems III, written by James Arvo, Cornell University (p 116-120). + // The original code can be found on http://www.realtimerendering.com/resources/GraphicsGems/gemsiii/rand_rotation.c + // and is licenend accourding to this website with the following licence: + // + // "The Graphics Gems code is copyright-protected. In other words, you cannot claim the text of the code as your own and + // resell it. Using the code is permitted in any program, product, or library, non-commercial or commercial. Giving credit + // is not required, though is a nice gesture. The code comes as-is, and if there are any flaws or problems with any Gems + // code, nobody involved with Gems - authors, editors, publishers, or webmasters - are to be held responsible. Basically, + // don't be a jerk, and remember that anything free comes with no guarantee."" + // + // The book saids in the preface the following: "As in the first two volumes, all of the C and C++ code in this book is in + // the public domain, and is yours to study, modify, and use." + + // first generate three random numbers between 0 and 1 and multiply them with 2 PI or 2 for z. Note that these are not the same as phi_1, theta and phi_2. + const double one = dist(world->get_random_number_engine()); + const double two = dist(world->get_random_number_engine()); + const double three = dist(world->get_random_number_engine()); + + // the distribution is restricted by the deflection (between 0 and 1) + const double theta = 2.0 * Consts::PI * one * deflections[i]; // Rotation about the pole (Z) + const double phi = 2.0 * Consts::PI * two; // For direction of pole deflection. + const double z = 2.0 * three * deflections[i]; //For magnitude of pole deflection. + + // Compute a vector V used for distributing points over the sphere + // via the reflection I - V Transpose(V). This formulation of V + // will guarantee that if x[1] and x[2] are uniformly distributed, + // the reflected points will be uniform on the sphere. Note that V + // has length sqrt(2) to eliminate the 2 in the Householder matrix. + + const double r = std::sqrt( z ); + const double Vx = std::sin( phi ) * r; + const double Vy = std::cos( phi ) * r; + const double Vz = std::sqrt( 2.F - z ); + + // Compute the row vector S = Transpose(V) * R, where R is a simple + // rotation by theta about the z-axis. No need to compute Sz since + // it's just Vz. + + const double st = std::sin( theta ); + const double ct = std::cos( theta ); + const double Sx = Vx * ct - Vy * st; + const double Sy = Vx * st + Vy * ct; + + // Construct the rotation matrix ( V Transpose(V) - I ) R, which + // is equivalent to V S - R. + + std::array,3> rotation_matrices; + rotation_matrices[0][0] = (Vx * Sx - ct); + rotation_matrices[0][1] = (Vx * Sy - st); + rotation_matrices[0][2] = Vx * Vz; + + rotation_matrices[1][0] = (Vy * Sx + st); + rotation_matrices[1][1] = (Vy * Sy - ct); + rotation_matrices[1][2] = Vy * Vz; + + rotation_matrices[2][0] = Vz * Sx; + rotation_matrices[2][1] = Vz * Sy; + rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + + // Rotate the basis rotation matrix with the random uniform distribution rotation matrix + // First get the transpose of the rotation matrix + std::array, 3> rot_T= rotation_matrices; + rot_T[0][1] = rotation_matrices[1][0]; + rot_T[1][0] = rotation_matrices[0][1]; + rot_T[1][2] = rotation_matrices[2][1]; + rot_T[2][1] = rotation_matrices[1][2]; + rot_T[0][2] = rotation_matrices[2][0]; + rot_T[2][0] = rotation_matrices[0][2]; + + // Then U' = R * U * R^T + std::array,3> result1 = multiply_3x3_matrices(rotation_matrices, basis_rotation_matrices[i]); + + it_rotation_matrices = result1; + } + + double total_size = 0; + for (auto &&it_sizes : grains_local.sizes) + { + it_sizes = grain_sizes[i] < 0 ? dist(world->get_random_number_engine()) : grain_sizes[i]; + total_size += it_sizes; + } + + if (normalize_grain_sizes[i]) + { + const double one_over_total_size = 1/total_size; + // std::transform is a c++17 feature, while current GWB is c++14 + // update this after switching to c+=17 + // std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), + // [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // Apply the transformation using a loop + for (auto &&size : grains_local.sizes) + { + size = size*one_over_total_size; + } + } + + + return grains_local; + } + } + } + return grains_local; + } + WB_REGISTER_FEATURE_PLUME_GRAINS_MODEL(RandomUniformDistributionDeflected, random uniform distribution deflected) + } // namespace Grains + } // namespace PlumeModels + } // namespace Features +} // namespace WorldBuilder + + diff --git a/contrib/world_builder/source/world_builder/features/subducting_plate.cc b/contrib/world_builder/source/world_builder/features/subducting_plate.cc index 8d5faa53360..7b5cec01669 100644 --- a/contrib/world_builder/source/world_builder/features/subducting_plate.cc +++ b/contrib/world_builder/source/world_builder/features/subducting_plate.cc @@ -685,7 +685,7 @@ namespace WorldBuilder grains.sizes[i] = grains_current_section.sizes[i] + section_fraction * (grains_next_section.sizes[i] - grains_current_section.sizes[i]); } - // average two rotations matrices throu quaternions. + // average two rotations matrices through quaternions. for (size_t i = 0; i < grains_current_section.rotation_matrices.size(); i++) { const glm::quaternion::quat quat_current = glm::quaternion::quat_cast(grains_current_section.rotation_matrices[i]); diff --git a/contrib/world_builder/source/world_builder/features/subducting_plate_models/composition/tian2019_water_content.cc b/contrib/world_builder/source/world_builder/features/subducting_plate_models/composition/tian2019_water_content.cc new file mode 100644 index 00000000000..0835b4c4c58 --- /dev/null +++ b/contrib/world_builder/source/world_builder/features/subducting_plate_models/composition/tian2019_water_content.cc @@ -0,0 +1,198 @@ +/* + Copyright (C) 2018 - 2024 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#include "world_builder/features/subducting_plate_models/composition/tian2019_water_content.h" + +#include "world_builder/nan.h" +#include "world_builder/types/array.h" +#include "world_builder/types/double.h" +#include "world_builder/types/object.h" +#include "world_builder/types/unsigned_int.h" +#include "world_builder/utilities.h" +#include "world_builder/world.h" + + +namespace WorldBuilder +{ + + using namespace Utilities; + + namespace Features + { + namespace SubductingPlateModels + { + namespace Composition + { + TianWaterContent::TianWaterContent(WorldBuilder::World *world_) + : + min_depth(NaN::DSNAN), + max_depth(NaN::DSNAN), + density(NaN::DSNAN) + { + this->world = world_; + this->name = "water content"; + } + + TianWaterContent::~TianWaterContent() + = default; + + void + TianWaterContent::declare_entries(Parameters &prm, const std::string & /*unused*/) + { + // Document plugin and require entries if needed. + // Add compositions to the required parameters. + prm.declare_entry("", Types::Object({"compositions"}), + "TianWaterContent compositional model. Sets bound water content as a compositional field. The returned " + "water content is based on the the temperature and pressure at a point within the world. Currently, " + "the bound water content can be determined for four different lithologies: 'sediment', mid-ocean " + "ridge basalt ('MORB'), 'gabbro', and 'peridotite', using parameterized phase diagrams from Tian et al., 2019 " + "(https://doi.org/10.1029/2019GC008488). The pressure is lithostatic, calculated with a constant user defined " + "density, and is limited by a user defined cutoff pressure (in GPa) for each lithology. This is required because the " + "parameterization breaks down at large pressures. Recommended cutoff pressures are 10 GPa is used for 'peridotite', " + "26 GPa is used for 'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'."); + + // Declare entries of this plugin + prm.declare_entry("min distance slab top", Types::Double(0), + "todo The depth in meters from which the composition of this feature is present."); + prm.declare_entry("max distance slab top", Types::Double(std::numeric_limits::max()), + "todo The depth in meters to which the composition of this feature is present."); + prm.declare_entry("density", Types::Double(3000.0), + "The reference density used for determining the lithostatic pressure for calculating " + "the bound water content."); + prm.declare_entry("compositions", Types::Array(Types::UnsignedInt(),0), + "A list with the labels of the composition which are present there."); + prm.declare_entry("lithology", Types::String("peridotite"), + "The lithology used to determine which polynomials to use for calculating the water content. Valid options are: " + "'sediment', 'MORB', 'gabbro', and 'peridotite'."); + prm.declare_entry("initial water content", Types::Double(5), + "The value of the initial water content (in wt%) for the lithology at the trench. This represents the " + "max value applied to this lithology."); + prm.declare_entry("cutoff pressure", Types::Double(10), + "The upper bound for the pressure, in GPa, for the specified lithology in the Tian parameterization. This is necessary because " + "the parameterization breaks down for high pressures. It is recommended that 10 GPa is used for 'peridotite', 26 GPa is used for " + "'gabbro', 16 GPa is used for 'MORB', and 1 GPa is used for 'sediment'."); + prm.declare_entry("operation", Types::String("replace", std::vector {"replace", "replace defined only", "add", "subtract"}), + "Whether the value should replace any value previously defined at this location (replace) or " + "add the value to the previously define value. Replacing implies that all compositions not " + "explicitly defined are set to zero. To only replace the defined compositions use the replace only defined option."); + + } + + void + TianWaterContent::parse_entries(Parameters &prm) + { + min_depth = prm.get("min distance slab top"); + max_depth = prm.get("max distance slab top"); + density = prm.get("density"); + compositions = prm.get_vector("compositions"); + max_water_content = prm.get("initial water content"); + cutoff_pressure = prm.get("cutoff pressure"); + operation = string_operations_to_enum(prm.get("operation")); + std::string lithology_string = prm.get("lithology"); + + if (lithology_string=="peridotite") + lithology_type = peridotite; + else if (lithology_string=="gabbro") + lithology_type = gabbro; + else if (lithology_string=="MORB") + lithology_type = MORB; + else if (lithology_string=="sediment") + lithology_type = sediment; + } + + + double + TianWaterContent::calculate_water_content(double pressure, + double temperature) const + { + double ln_LR_value = 0; + double ln_c_sat_value = 0; + double Td_value = 0; + std::vector LR_polynomial_coeffs; + std::vector c_sat_polynomial_coeffs; + std::vector Td_polynomial_coeffs; + + // Calculate the c_sat value from Tian et al., 2019 + if (lithology_type == sediment) + { + for (unsigned int c_sat_index = 0; c_sat_index < c_sat_poly[lithology_type].size(); ++c_sat_index) + ln_c_sat_value += c_sat_poly[lithology_type][c_sat_index] * (std::pow(std::log10(pressure), c_sat_poly[lithology_type].size() - 1 - c_sat_index)); + } + else + { + for (unsigned int c_sat_index = 0; c_sat_index < c_sat_poly[lithology_type].size(); ++c_sat_index) + ln_c_sat_value += c_sat_poly[lithology_type][c_sat_index] * (std::pow(pressure, c_sat_poly[lithology_type].size() - 1 - c_sat_index)); + } + + // Calculate the LR value from Tian et al., 2019 + for (unsigned int LR_coeff_index = 0; LR_coeff_index < LR_poly[lithology_type].size(); ++LR_coeff_index) + ln_LR_value += LR_poly[lithology_type][LR_coeff_index] * (std::pow(1/pressure, LR_poly[lithology_type].size() - 1 - LR_coeff_index)); + + // Calculate the Td value from Tian et al., 2019 + for (unsigned int Td_coeff_index = 0; Td_coeff_index < Td_poly[lithology_type].size(); ++Td_coeff_index) + Td_value += Td_poly[lithology_type][Td_coeff_index] * (std::pow(pressure, Td_poly[lithology_type].size() - 1 - Td_coeff_index)); + + double partition_coeff = std::exp(ln_c_sat_value) * std::exp(std::exp(ln_LR_value) * (1/temperature - 1/Td_value)); + return partition_coeff; + } + + + double + TianWaterContent::get_composition(const Point<3> &position_in_cartesian_coordinates, + const double depth, + const unsigned int composition_number, + double composition, + const double /*feature_min_depth*/, + const double /*feature_max_depth*/, + const WorldBuilder::Utilities::PointDistanceFromCurvedPlanes &distance_from_plane, + const AdditionalParameters & /*additional_parameters*/) const + { + if (distance_from_plane.distance_from_plane <= max_depth && distance_from_plane.distance_from_plane >= min_depth) + { + // The polynomials break down for pressures less than 0.5 GPa, and for pressures above a user defined cutoff pressure + // ensure that the pressure is never below 0.5 GPa + const double lithostatic_pressure = std::max(0.5, std::min(density * 9.81 * depth / 1e9, cutoff_pressure)); // GPa + const double slab_temperature = world->properties(position_in_cartesian_coordinates.get_array(), depth, {{{1,0,0}}})[0]; + double partition_coefficient = calculate_water_content(lithostatic_pressure, + slab_temperature); + + partition_coefficient = std::min(max_water_content, partition_coefficient); + + for (unsigned int i = 0; i < compositions.size(); ++i) + { + if (compositions[i] == composition_number) + { + return apply_operation(operation,composition, partition_coefficient); + } + } + + if (operation == Operations::REPLACE) + { + return 0.0; + } + } + return composition; + } + WB_REGISTER_FEATURE_SUBDUCTING_PLATE_COMPOSITION_MODEL(TianWaterContent, tian water content) + } // namespace Composition + } // namespace SubductingPlateModels + } // namespace Features +} // namespace WorldBuilder + + diff --git a/contrib/world_builder/source/world_builder/features/subducting_plate_models/grains/random_uniform_distribution_deflected.cc b/contrib/world_builder/source/world_builder/features/subducting_plate_models/grains/random_uniform_distribution_deflected.cc index bf9ac3a3e05..dfbf267af36 100644 --- a/contrib/world_builder/source/world_builder/features/subducting_plate_models/grains/random_uniform_distribution_deflected.cc +++ b/contrib/world_builder/source/world_builder/features/subducting_plate_models/grains/random_uniform_distribution_deflected.cc @@ -19,8 +19,6 @@ #include "world_builder/features/subducting_plate_models/grains/random_uniform_distribution_deflected.h" -#include - #include "world_builder/nan.h" #include "world_builder/types/array.h" #include "world_builder/types/bool.h" @@ -88,6 +86,12 @@ namespace WorldBuilder Types::Array(Types::Double(1),0), "A list of the deflections of all of the grains in each composition between 0 and 1."); + prm.declare_entry("basis rotation matrices", Types::Array(Types::Array(Types::Array(Types::Double(0),3,3),3,3),0), + "A list with the rotation matrices of the grains which are present there for each compositions."); + + prm.declare_entry("basis Euler angles z-x-z", Types::Array(Types::Array(Types::Double(0),3,3),0), + "A list with the z-x-z Euler angles of the grains which are present there for each compositions."); + } @@ -99,6 +103,31 @@ namespace WorldBuilder max_depth = prm.get("max distance slab top"); compositions = prm.get_vector("compositions"); + const bool set_euler_angles = prm.check_entry("basis Euler angles z-x-z"); + const bool set_rotation_matrices = prm.check_entry("basis rotation matrices"); + + WBAssertThrow(!(set_euler_angles == true && set_rotation_matrices == true), + "Only Euler angles or Rotation matrices may be set, but both are set for " << prm.get_full_json_path()); + + + WBAssertThrow(!(set_euler_angles == false && set_rotation_matrices == false), + "Euler angles or Rotation matrices have to be set, but neither are set for " << prm.get_full_json_path()); + + if (set_euler_angles) + { + std::vector > basis_euler_angles_vector = prm.get_vector >("basis Euler angles z-x-z"); + basis_rotation_matrices.resize(basis_euler_angles_vector.size()); + for (size_t i = 0; i,3> >("basis rotation matrices"); + } + operation = prm.get("orientation operation"); grain_sizes = prm.get_vector("grain sizes"); normalize_grain_sizes = prm.get_vector("normalize grain sizes"); @@ -113,9 +142,11 @@ namespace WorldBuilder WBAssertThrow(compositions.size() == deflections.size(), "There are not the same amount of compositions (" << compositions.size() << ") and deflections (" << deflections.size() << ")."); + WBAssertThrow(compositions.size() == basis_rotation_matrices.size(), + "There are not the same amount of compositions (" << compositions.size() + << ") and rotation_matrices (" << basis_rotation_matrices.size() << ")."); } - WorldBuilder::grains RandomUniformDistributionDeflected::get_grains(const Point<3> & /*position_in_cartesian_coordinates*/, const double /*depth*/, @@ -182,17 +213,33 @@ namespace WorldBuilder // Construct the rotation matrix ( V Transpose(V) - I ) R, which // is equivalent to V S - R. - it_rotation_matrices[0][0] = Vx * Sx - ct; - it_rotation_matrices[0][1] = Vx * Sy - st; - it_rotation_matrices[0][2] = Vx * Vz; - - it_rotation_matrices[1][0] = Vy * Sx + st; - it_rotation_matrices[1][1] = Vy * Sy - ct; - it_rotation_matrices[1][2] = Vy * Vz; - - it_rotation_matrices[2][0] = Vz * Sx; - it_rotation_matrices[2][1] = Vz * Sy; - it_rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + std::array,3> rotation_matrices; + rotation_matrices[0][0] = (Vx * Sx - ct); + rotation_matrices[0][1] = (Vx * Sy - st); + rotation_matrices[0][2] = Vx * Vz; + + rotation_matrices[1][0] = (Vy * Sx + st); + rotation_matrices[1][1] = (Vy * Sy - ct); + rotation_matrices[1][2] = Vy * Vz; + + rotation_matrices[2][0] = Vz * Sx; + rotation_matrices[2][1] = Vz * Sy; + rotation_matrices[2][2] = 1.0 - z; // This equals Vz * Vz - 1.0 + + // Rotate the basis rotation matrix with the random uniform distribution rotation matrix + // First get the transpose of the rotation matrix + std::array, 3> rot_T= rotation_matrices; + rot_T[0][1] = rotation_matrices[1][0]; + rot_T[1][0] = rotation_matrices[0][1]; + rot_T[1][2] = rotation_matrices[2][1]; + rot_T[2][1] = rotation_matrices[1][2]; + rot_T[0][2] = rotation_matrices[2][0]; + rot_T[2][0] = rotation_matrices[0][2]; + + // Then U' = R * U * R^T + std::array,3> result1 = multiply_3x3_matrices(rotation_matrices, basis_rotation_matrices[i]); + + it_rotation_matrices = result1; } double total_size = 0; @@ -205,8 +252,15 @@ namespace WorldBuilder if (normalize_grain_sizes[i]) { const double one_over_total_size = 1/total_size; - std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), - [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // std::transform is a c++17 feature, while current GWB is c++14 + // update this after switching to c+=17 + // std::transform(grains_local.sizes.begin(), grains_local.sizes.end(), grains_local.sizes.begin(), + // [one_over_total_size](double sizes) -> double { return sizes *one_over_total_size; }); + // Apply the transformation using a loop + for (auto &&size : grains_local.sizes) + { + size = size*one_over_total_size; + } } return grains_local; diff --git a/contrib/world_builder/source/world_builder/features/subducting_plate_models/temperature/mass_conserving.cc b/contrib/world_builder/source/world_builder/features/subducting_plate_models/temperature/mass_conserving.cc index f2ad576c5c2..647d74d0c42 100644 --- a/contrib/world_builder/source/world_builder/features/subducting_plate_models/temperature/mass_conserving.cc +++ b/contrib/world_builder/source/world_builder/features/subducting_plate_models/temperature/mass_conserving.cc @@ -74,8 +74,8 @@ namespace WorldBuilder MassConserving::declare_entries(Parameters &prm, const std::string & /*unused*/) { // Document plugin and require entries if needed. - // Add `plate velocity` to the required parameters. - prm.declare_entry("", Types::Object({"plate velocity"}), + // Add `spreading velocity` to the required parameters. + prm.declare_entry("", Types::Object({"spreading velocity", "subducting velocity"}), "Mass conserving temperature model. The temperature " "model uses the heat content (proportional to to thermal mass anomaly) to " "define a smooth temperature profile that conserves mass along the slab length. " @@ -119,12 +119,11 @@ namespace WorldBuilder prm.declare_entry("density", Types::Double(3300), "The reference density of the subducting plate in $kg/m^3$"); - prm.declare_entry("plate velocity", Types::OneOf(Types::Double(0.05),Types::Array(Types::ValueAtPoints(0.05, std::numeric_limits::max()))), - "The velocity with which the plate subducts in meters per year. Default is 5 cm/yr"); + prm.declare_entry("spreading velocity", Types::OneOf(Types::Double(0.05),Types::Array(Types::ValueAtPoints(0.05, std::numeric_limits::max()))), + "The velocity with which the ridge spreads and create the plate in meters per year. Default is 5 cm/yr"); - prm.declare_entry("subducting velocity", Types::OneOf(Types::Double(-1), Types::Array(Types::Array(Types::Double(-1), 1), 1)), - "The velocity with which the ridge is moving through time, and how long the ridge " - "has been moving. First value is the velocity, second is the time. Default is [0 cm/yr, 0 yr]"); + prm.declare_entry("subducting velocity", Types::OneOf(Types::Double(0.05), Types::Array(Types::Array(Types::Double(0.05), 1), 1)), + "The velocity with which the slab is subducting through time. Default is 5 cm/yr"); prm.declare_entry("coupling depth", Types::Double(100e3), "The depth at which the slab surface first comes in contact with the hot mantle wedge " @@ -194,7 +193,7 @@ namespace WorldBuilder density = prm.get("density"); thermal_conductivity = prm.get("thermal conductivity"); - ridge_spreading_velocities = prm.get_value_at_array("plate velocity"); + ridge_spreading_velocities = prm.get_value_at_array("spreading velocity"); subducting_velocities = prm.get_vector_or_double("subducting velocity"); mantle_coupling_depth = prm.get("coupling depth"); @@ -290,6 +289,8 @@ namespace WorldBuilder const AdditionalParameters &additional_parameters) const { + const double seconds_in_year = 60.0 * 60.0 * 24.0 * 365.25; // sec/y + const double distance_from_plane = distance_from_planes.distance_from_plane; if (distance_from_plane <= max_depth && distance_from_plane >= min_depth) @@ -318,13 +319,9 @@ namespace WorldBuilder std::vector slab_ages = calculate_effective_trench_and_plate_ages(ridge_parameters, distance_along_plane); - const double seconds_in_year = 60.0 * 60.0 * 24.0 * 365.25; // sec/y const double spreading_velocity = ridge_parameters[0] * seconds_in_year; // m/yr double subducting_velocity = ridge_parameters[2] * seconds_in_year; // m/yr - if (subducting_velocity <= 0) - subducting_velocity = spreading_velocity; - const double age_at_trench = slab_ages[0]; const double plate_age_sec = age_at_trench * seconds_in_year; // y --> seconds // 1. Determine initial heat content of the slab based on age of plate at trench @@ -359,7 +356,7 @@ namespace WorldBuilder } // Plate age increases with distance along the slab in the mantle - double effective_plate_age = slab_ages[1]; + double effective_plate_age_sec = slab_ages[1] * seconds_in_year; // Need adiabatic temperature at position of grid point const double background_temperature = adiabatic_heating ? potential_mantle_temperature * @@ -373,13 +370,13 @@ namespace WorldBuilder const double adiabatic_gradient = adiabatic_heating ? background_temperature - potential_mantle_temperature : 0; - // 2. Get Tmin and offset as a function of depth: these depend on plate velocity and plate age_at_trench. + // 2. Get Tmin and offset as a function of depth: these depend on spreading velocity and plate age_at_trench. // shallow-dipping slabs will take longer to reach the same depth - this leads to larger effective age at a given depth // causing these slabs to be broader than steeper dipping slabs // These equations are empirical based on fitting the temperature profiles from dynamic subduction models. // and published kinematic models for specific subduction zones. - // increases Tmin slope for slower relative to slope for maximum plate velocity + // increases Tmin slope for slower relative to slope for maximum spreading velocity // will be between 0.1 (fast) and 0.35 (slow) const double max_plate_vel = 20/cm2m; // e.g., 20 cm/yr -> 0.2 m/yr const double vsubfact = std::min( std::max( 0.35 + ((0.1-0.35) / max_plate_vel) * subducting_velocity, 0.1), 0.35); @@ -453,7 +450,7 @@ namespace WorldBuilder // Also taper the initial heat content and effective plate age initial_heat_content = initial_heat_content * std::erfc(1.5*taper_con*theta); - effective_plate_age = effective_plate_age * std::erfc(1.5*taper_con*theta); + effective_plate_age_sec = effective_plate_age_sec * std::erfc(1.5*taper_con*theta); } else @@ -496,14 +493,14 @@ namespace WorldBuilder exp((subducting_velocity_UI * max_depth / 2.0 / thermal_diffusivity - std::sqrt(subducting_velocity_UI * subducting_velocity_UI * max_depth * max_depth / 4.0 / thermal_diffusivity / thermal_diffusivity + double(2*i + 1) * double(2*i + 1) * Consts::PI * Consts::PI)) * - subducting_velocity_UI * effective_plate_age / max_depth); + subducting_velocity_UI * effective_plate_age_sec / max_depth); bottom_heat_content -= temp_heat_content; } } else { bottom_heat_content = 2 * thermal_conductivity * (min_temperature - potential_mantle_temperature) * - std::sqrt(effective_plate_age /(thermal_diffusivity * Consts::PI)); + std::sqrt(effective_plate_age_sec /(thermal_diffusivity * Consts::PI)); } // 4. The difference in heat content goes into the temperature above where Tmin occurs. @@ -534,7 +531,7 @@ namespace WorldBuilder for (size_t i = 0; i < 2 * spline_n_points + 1; ++i) { const double i_adjusted_distance = (static_cast(i) * interval_spline_distance - 1.0) * max_depth; - const double i_temperature = get_temperature_analytic(top_heat_content, min_temperature, background_temperature, temperature_, spreading_velocity, effective_plate_age, i_adjusted_distance); + const double i_temperature = get_temperature_analytic(top_heat_content, min_temperature, background_temperature, temperature_, spreading_velocity, effective_plate_age_sec, i_adjusted_distance); i_temperatures[i] = i_temperature; } @@ -546,7 +543,7 @@ namespace WorldBuilder else { // Call the analytic solution to compute the temperature - temperature = get_temperature_analytic(top_heat_content, min_temperature, background_temperature, temperature_, spreading_velocity, effective_plate_age, adjusted_distance); + temperature = get_temperature_analytic(top_heat_content, min_temperature, background_temperature, temperature_, spreading_velocity, effective_plate_age_sec, adjusted_distance); } } else @@ -570,7 +567,7 @@ namespace WorldBuilder const double background_temperature, const double temperature_, const double subducting_velocity, - const double effective_plate_age, + const double effective_plate_age_sec, const double adjusted_distance) const { const double seconds_in_year = 60.0 * 60.0 * 24.0 * 365.25; // sec/y @@ -614,7 +611,7 @@ namespace WorldBuilder std::exp((((subducting_velocity_UI * max_depth)/(2 * thermal_diffusivity)) - std::sqrt(((subducting_velocity_UI*subducting_velocity_UI*max_depth*max_depth) / (4*thermal_diffusivity*thermal_diffusivity)) + double(i) * double(i) * Consts::PI * Consts::PI)) * - ((subducting_velocity_UI * effective_plate_age) / max_depth))); + ((subducting_velocity_UI * effective_plate_age_sec) / max_depth))); } } else @@ -625,7 +622,7 @@ namespace WorldBuilder else { temperature = background_temperature + (min_temperature - background_temperature) * - std::erfc(adjusted_distance / (2 * std::sqrt(thermal_diffusivity * effective_plate_age))); + std::erfc(adjusted_distance / (2 * std::sqrt(thermal_diffusivity * effective_plate_age_sec))); } } diff --git a/contrib/world_builder/source/world_builder/features/subducting_plate_models/temperature/plate_model.cc b/contrib/world_builder/source/world_builder/features/subducting_plate_models/temperature/plate_model.cc index 368adcdc09d..2b3a942cf7a 100644 --- a/contrib/world_builder/source/world_builder/features/subducting_plate_models/temperature/plate_model.cc +++ b/contrib/world_builder/source/world_builder/features/subducting_plate_models/temperature/plate_model.cc @@ -170,7 +170,7 @@ namespace WorldBuilder distance_along_plane/thickness_local); // the paper uses `(x_scaled * sin(average_angle) - z_scaled * cos(average_angle))` to compute the - // depth (execpt that you do not use average angles since they only have on angle). On recomputing + // depth (except that you do not use average angles since they only have on angle). On recomputing // their result it seems to me (Menno) that it should have been `(1-z_scaled)` instead of `z_scaled`. // To avoid this whole problem we just use the depth directly since we have that. // todo: get the local thickniss out of H, that prevents an other division. diff --git a/contrib/world_builder/source/world_builder/utilities.cc b/contrib/world_builder/source/world_builder/utilities.cc index 90ecdf099fe..135427a10b2 100644 --- a/contrib/world_builder/source/world_builder/utilities.cc +++ b/contrib/world_builder/source/world_builder/utilities.cc @@ -621,9 +621,9 @@ namespace WorldBuilder if (!bool_cartesian) { - const double normal = std::fabs(point_list[i_section_min_distance+static_cast((std::round(fraction_CPL_P1P2)))][0]-check_point_surface_2d[0]); - const double plus = std::fabs(point_list[i_section_min_distance+static_cast((std::round(fraction_CPL_P1P2)))][0]-(check_point_surface_2d[0]+2*Consts::PI)); - const double min = std::fabs(point_list[i_section_min_distance+static_cast((std::round(fraction_CPL_P1P2)))][0]-(check_point_surface_2d[0]-2*Consts::PI)); + const double normal = std::fabs(point_list[i_section_min_distance+static_cast(std::round(fraction_CPL_P1P2))][0]-check_point_surface_2d[0]); + const double plus = std::fabs(point_list[i_section_min_distance+static_cast(std::round(fraction_CPL_P1P2))][0]-(check_point_surface_2d[0]+2*Consts::PI)); + const double min = std::fabs(point_list[i_section_min_distance+static_cast(std::round(fraction_CPL_P1P2))][0]-(check_point_surface_2d[0]-2*Consts::PI)); // find out whether the check point, checkpoint + 2pi or check point -2 pi is closest to the point list. if (plus < normal) @@ -1485,24 +1485,45 @@ namespace WorldBuilder WBAssert(ridge_parameters.size() == 4, "Internal error: ridge_parameters have the wrong size: " << ridge_parameters.size() << " instead of 4."); const double seconds_in_year = 60.0 * 60.0 * 24.0 * 365.25; // sec/y const double spreading_velocity = ridge_parameters[0] * seconds_in_year; // m/yr - double subducting_velocity = ridge_parameters[2] * seconds_in_year; // m/yr + const double distance_ridge = ridge_parameters[1]; + const double subducting_velocity = ridge_parameters[2] * seconds_in_year; // m/yr - if (subducting_velocity <= 0) - subducting_velocity = spreading_velocity; - - const double age_at_trench = ridge_parameters[1] / spreading_velocity; // m/(m/y) = yr - const double plate_age_sec = age_at_trench * seconds_in_year; // y --> seconds + WBAssertThrow(subducting_velocity >= 0, "The subducting velocity is less than 0. " + "Subducting velocity: " << subducting_velocity); // Plate age increases with distance along the slab in the mantle - double effective_plate_age = plate_age_sec + (distance_along_plane / subducting_velocity) * seconds_in_year; // m/(m/y) = y(seconds_in_year) - WBAssertThrow(effective_plate_age >= 0, "The age of the subducting plate is less than or equal to 0. " - "Effective plate age: " << effective_plate_age); + double effective_plate_age = (distance_ridge + distance_along_plane) / spreading_velocity; // m/(m/y) = yr + + // Age of trench when the query point was at the trench + const double age_at_trench = effective_plate_age - distance_along_plane / subducting_velocity; // m/(m/y) = yr + WBAssertThrow(age_at_trench >= 0, "The age of trench at subducting initiation is less than 0. " + "Age at trench: " << age_at_trench); + std::vector result; result.push_back(age_at_trench); result.push_back(effective_plate_age); return result; } + + std::array,3> + multiply_3x3_matrices(const std::array,3> mat1, const std::array,3> mat2) + { + std::array,3> result; + for (size_t i = 0; i < 3; i++) + { + for (size_t j = 0; j < 3; j++) + { + result[i][j] = 0; + for (size_t k = 0; k < 3; k++) + { + result[i][j] += mat1[i][k] * mat2[k][j]; + } + } + } + + return result; + } } // namespace Utilities } // namespace WorldBuilder diff --git a/contrib/world_builder/source/world_builder/world.cc b/contrib/world_builder/source/world_builder/world.cc index 6871f29ea9c..f182edd1d44 100644 --- a/contrib/world_builder/source/world_builder/world.cc +++ b/contrib/world_builder/source/world_builder/world.cc @@ -163,12 +163,8 @@ namespace WorldBuilder * version number of the program. */ - WBAssertThrow((Version::MAJOR == "0" - && prm.get("version") == Version::MAJOR + "." + Version::MINOR) - || (Version::MAJOR != "0" - && prm.get("version") == Version::MAJOR), - "The major and minor version combination (for major version 0) or the major " - "version (for major versions after 0) for which is input file was written " + WBAssertThrow((prm.get("version") == Version::MAJOR + "." + Version::MINOR), + "The major and minor version combination for which is input file was written " "is not the same as the version of the World Builder you are running. This means " "That there may have been incompatible changes made between the versions. \n\n" "Verify those changes and whether they affect your model. If this is not " diff --git a/contrib/world_builder/tests/data/continental_plate.wb b/contrib/world_builder/tests/data/continental_plate.wb index c7e0955322d..3d519acda2e 100644 --- a/contrib/world_builder/tests/data/continental_plate.wb +++ b/contrib/world_builder/tests/data/continental_plate.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/data/fault_constant_angles_cartesian.wb b/contrib/world_builder/tests/data/fault_constant_angles_cartesian.wb index 275bfd549cb..8654738b1a1 100644 --- a/contrib/world_builder/tests/data/fault_constant_angles_cartesian.wb +++ b/contrib/world_builder/tests/data/fault_constant_angles_cartesian.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/data/fault_constant_angles_cartesian_2.wb b/contrib/world_builder/tests/data/fault_constant_angles_cartesian_2.wb index 04b1f4a8eec..8875bbc62c7 100644 --- a/contrib/world_builder/tests/data/fault_constant_angles_cartesian_2.wb +++ b/contrib/world_builder/tests/data/fault_constant_angles_cartesian_2.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[750e3,500e3],[500e3,0e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/data/fault_constant_angles_cartesian_force_temp.wb b/contrib/world_builder/tests/data/fault_constant_angles_cartesian_force_temp.wb index c991f528a89..caa9af69742 100644 --- a/contrib/world_builder/tests/data/fault_constant_angles_cartesian_force_temp.wb +++ b/contrib/world_builder/tests/data/fault_constant_angles_cartesian_force_temp.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/data/fault_different_angles_cartesian.wb b/contrib/world_builder/tests/data/fault_different_angles_cartesian.wb index aba4a432d6f..d070d75c7a7 100644 --- a/contrib/world_builder/tests/data/fault_different_angles_cartesian.wb +++ b/contrib/world_builder/tests/data/fault_different_angles_cartesian.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/data/interpolation_monotone_spline_cartesian.wb b/contrib/world_builder/tests/data/interpolation_monotone_spline_cartesian.wb index ba5c4659473..69f52a3e73c 100644 --- a/contrib/world_builder/tests/data/interpolation_monotone_spline_cartesian.wb +++ b/contrib/world_builder/tests/data/interpolation_monotone_spline_cartesian.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/data/mantle_layer_cartesian.wb b/contrib/world_builder/tests/data/mantle_layer_cartesian.wb index 9313f4610bd..114d7b64f32 100644 --- a/contrib/world_builder/tests/data/mantle_layer_cartesian.wb +++ b/contrib/world_builder/tests/data/mantle_layer_cartesian.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/data/oceanic_plate_cartesian.wb b/contrib/world_builder/tests/data/oceanic_plate_cartesian.wb index 388c1c2da0a..dd26b8509b1 100644 --- a/contrib/world_builder/tests/data/oceanic_plate_cartesian.wb +++ b/contrib/world_builder/tests/data/oceanic_plate_cartesian.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[0,0],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/data/oceanic_plate_spherical.wb b/contrib/world_builder/tests/data/oceanic_plate_spherical.wb index 9d834ea1a44..b670305846b 100644 --- a/contrib/world_builder/tests/data/oceanic_plate_spherical.wb +++ b/contrib/world_builder/tests/data/oceanic_plate_spherical.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"spherical", "depth method":"starting point"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/data/simple_wb1.json b/contrib/world_builder/tests/data/simple_wb1.json index 921c31a2ab5..64eb634303e 100644 --- a/contrib/world_builder/tests/data/simple_wb1.json +++ b/contrib/world_builder/tests/data/simple_wb1.json @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[100e3,100e3],[400e3,500e3]], diff --git a/contrib/world_builder/tests/data/simple_wb2.json b/contrib/world_builder/tests/data/simple_wb2.json index 8dcdf8b3100..f072d0048a7 100644 --- a/contrib/world_builder/tests/data/simple_wb2.json +++ b/contrib/world_builder/tests/data/simple_wb2.json @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "features": [ diff --git a/contrib/world_builder/tests/data/simple_wb3.json b/contrib/world_builder/tests/data/simple_wb3.json index 8b838770349..361ed39d3ee 100644 --- a/contrib/world_builder/tests/data/simple_wb3.json +++ b/contrib/world_builder/tests/data/simple_wb3.json @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "surface rotation point": ["165e3","166e3"], "surface rotation angle": "0", diff --git a/contrib/world_builder/tests/data/spherical_depth_method_begin_segment.wb b/contrib/world_builder/tests/data/spherical_depth_method_begin_segment.wb index 17d0b51a0c2..b861809450d 100644 --- a/contrib/world_builder/tests/data/spherical_depth_method_begin_segment.wb +++ b/contrib/world_builder/tests/data/spherical_depth_method_begin_segment.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"spherical", "depth method":"begin segment"}, diff --git a/contrib/world_builder/tests/data/spherical_depth_method_starting_point.wb b/contrib/world_builder/tests/data/spherical_depth_method_starting_point.wb index c0b5e66a8eb..8a41bd076af 100644 --- a/contrib/world_builder/tests/data/spherical_depth_method_starting_point.wb +++ b/contrib/world_builder/tests/data/spherical_depth_method_starting_point.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"spherical", "depth method":"starting point"}, diff --git a/contrib/world_builder/tests/data/subducting_plate_composition_smooth_by_tag.wb b/contrib/world_builder/tests/data/subducting_plate_composition_smooth_by_tag.wb index 49ca6082e06..5e4b952b916 100644 --- a/contrib/world_builder/tests/data/subducting_plate_composition_smooth_by_tag.wb +++ b/contrib/world_builder/tests/data/subducting_plate_composition_smooth_by_tag.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,50e3],[50e3,0]], "features": diff --git a/contrib/world_builder/tests/data/subducting_plate_composition_smooth_filtered.wb b/contrib/world_builder/tests/data/subducting_plate_composition_smooth_filtered.wb index 49ca6082e06..5e4b952b916 100644 --- a/contrib/world_builder/tests/data/subducting_plate_composition_smooth_filtered.wb +++ b/contrib/world_builder/tests/data/subducting_plate_composition_smooth_filtered.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,50e3],[50e3,0]], "features": diff --git a/contrib/world_builder/tests/data/subducting_plate_constant_angles_cartesian.wb b/contrib/world_builder/tests/data/subducting_plate_constant_angles_cartesian.wb index 87c4d187d4b..7c5431c558a 100644 --- a/contrib/world_builder/tests/data/subducting_plate_constant_angles_cartesian.wb +++ b/contrib/world_builder/tests/data/subducting_plate_constant_angles_cartesian.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section": [[100e3,100e3],[400e3,100e3]], "coordinate system":{"model":"cartesian"}, diff --git a/contrib/world_builder/tests/data/subducting_plate_different_angles_cartesian.wb b/contrib/world_builder/tests/data/subducting_plate_different_angles_cartesian.wb index ba2f98aeca6..544127f1947 100644 --- a/contrib/world_builder/tests/data/subducting_plate_different_angles_cartesian.wb +++ b/contrib/world_builder/tests/data/subducting_plate_different_angles_cartesian.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, diff --git a/contrib/world_builder/tests/data/subducting_plate_different_angles_cartesian_2.wb b/contrib/world_builder/tests/data/subducting_plate_different_angles_cartesian_2.wb index 820d1cd948b..108b9e354ea 100644 --- a/contrib/world_builder/tests/data/subducting_plate_different_angles_cartesian_2.wb +++ b/contrib/world_builder/tests/data/subducting_plate_different_angles_cartesian_2.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, diff --git a/contrib/world_builder/tests/data/subducting_plate_different_angles_spherical.wb b/contrib/world_builder/tests/data/subducting_plate_different_angles_spherical.wb index a3842da8836..d5ce54e6f71 100644 --- a/contrib/world_builder/tests/data/subducting_plate_different_angles_spherical.wb +++ b/contrib/world_builder/tests/data/subducting_plate_different_angles_spherical.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"spherical", "depth method":"starting point"}, diff --git a/contrib/world_builder/tests/gwb-dat/2d_cartesian_plume_points.wb b/contrib/world_builder/tests/gwb-dat/2d_cartesian_plume_points.wb index a3f4e1c455c..50b22a4d4b7 100644 --- a/contrib/world_builder/tests/gwb-dat/2d_cartesian_plume_points.wb +++ b/contrib/world_builder/tests/gwb-dat/2d_cartesian_plume_points.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section":[[0,0],[100,0]], "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/app_continental_plate_2d.wb b/contrib/world_builder/tests/gwb-dat/app_continental_plate_2d.wb index fbaa65fa045..39aed2add9a 100644 --- a/contrib/world_builder/tests/gwb-dat/app_continental_plate_2d.wb +++ b/contrib/world_builder/tests/gwb-dat/app_continental_plate_2d.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/gwb-dat/app_continental_plate_3d.wb b/contrib/world_builder/tests/gwb-dat/app_continental_plate_3d.wb index 176b1424bed..6763a852bf4 100644 --- a/contrib/world_builder/tests/gwb-dat/app_continental_plate_3d.wb +++ b/contrib/world_builder/tests/gwb-dat/app_continental_plate_3d.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/gwb-dat/app_continental_plate_cartesian.wb b/contrib/world_builder/tests/gwb-dat/app_continental_plate_cartesian.wb index 177c11ae5ff..a02c7593d01 100644 --- a/contrib/world_builder/tests/gwb-dat/app_continental_plate_cartesian.wb +++ b/contrib/world_builder/tests/gwb-dat/app_continental_plate_cartesian.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/gwb-dat/app_oceanic_plate_cartesian.wb b/contrib/world_builder/tests/gwb-dat/app_oceanic_plate_cartesian.wb index 2fd3a624086..b9c37f2d9fa 100644 --- a/contrib/world_builder/tests/gwb-dat/app_oceanic_plate_cartesian.wb +++ b/contrib/world_builder/tests/gwb-dat/app_oceanic_plate_cartesian.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[100e3,100e3],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, diff --git a/contrib/world_builder/tests/gwb-dat/app_oceanic_plate_constant_age.wb b/contrib/world_builder/tests/gwb-dat/app_oceanic_plate_constant_age.wb index 9e35d9db3f4..2891cbac691 100644 --- a/contrib/world_builder/tests/gwb-dat/app_oceanic_plate_constant_age.wb +++ b/contrib/world_builder/tests/gwb-dat/app_oceanic_plate_constant_age.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[1000e3,0]],"surface temperature":273, "force surface temperature":true, diff --git a/contrib/world_builder/tests/gwb-dat/app_operations_add.wb b/contrib/world_builder/tests/gwb-dat/app_operations_add.wb index bfd65c8bffd..af93a935ccb 100644 --- a/contrib/world_builder/tests/gwb-dat/app_operations_add.wb +++ b/contrib/world_builder/tests/gwb-dat/app_operations_add.wb @@ -1,6 +1,6 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[100e3,100e3],[400e3,500e3]], "maximum distance between coordinates": 5, diff --git a/contrib/world_builder/tests/gwb-dat/app_operations_replace.wb b/contrib/world_builder/tests/gwb-dat/app_operations_replace.wb index 383b96eb009..adacbe92ced 100644 --- a/contrib/world_builder/tests/gwb-dat/app_operations_replace.wb +++ b/contrib/world_builder/tests/gwb-dat/app_operations_replace.wb @@ -1,6 +1,6 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[100e3,100e3],[400e3,500e3]], "maximum distance between coordinates": 5, diff --git a/contrib/world_builder/tests/gwb-dat/app_operations_subtract.wb b/contrib/world_builder/tests/gwb-dat/app_operations_subtract.wb index 26ad58b8194..0a92aead731 100644 --- a/contrib/world_builder/tests/gwb-dat/app_operations_subtract.wb +++ b/contrib/world_builder/tests/gwb-dat/app_operations_subtract.wb @@ -1,6 +1,6 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[100e3,100e3],[400e3,500e3]], "maximum distance between coordinates": 5, diff --git a/contrib/world_builder/tests/gwb-dat/app_spherical_2d.wb b/contrib/world_builder/tests/gwb-dat/app_spherical_2d.wb index de3a0d55522..6e41a36f0d2 100644 --- a/contrib/world_builder/tests/gwb-dat/app_spherical_2d.wb +++ b/contrib/world_builder/tests/gwb-dat/app_spherical_2d.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"spherical","depth method":"starting point"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section": [[100e3,100e3],[400e3,500e3]], diff --git a/contrib/world_builder/tests/gwb-dat/app_spherical_3d.wb b/contrib/world_builder/tests/gwb-dat/app_spherical_3d.wb index de3a0d55522..6e41a36f0d2 100644 --- a/contrib/world_builder/tests/gwb-dat/app_spherical_3d.wb +++ b/contrib/world_builder/tests/gwb-dat/app_spherical_3d.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"spherical","depth method":"starting point"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section": [[100e3,100e3],[400e3,500e3]], diff --git a/contrib/world_builder/tests/gwb-dat/app_wb1.wb b/contrib/world_builder/tests/gwb-dat/app_wb1.wb index ae20fef6e5f..65f85e9b79d 100644 --- a/contrib/world_builder/tests/gwb-dat/app_wb1.wb +++ b/contrib/world_builder/tests/gwb-dat/app_wb1.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[100e3,100e3],[400e3,500e3]], "maximum distance between coordinates": 5, diff --git a/contrib/world_builder/tests/gwb-dat/app_wb2.wb b/contrib/world_builder/tests/gwb-dat/app_wb2.wb index b0b3807993c..f7989b3efae 100644 --- a/contrib/world_builder/tests/gwb-dat/app_wb2.wb +++ b/contrib/world_builder/tests/gwb-dat/app_wb2.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "features": [ {"model":"continental plate", "name":"Caribbean", "max depth":250e3, "coordinates":[[-1e3,500e3],[500e3,500e3],[500e3,1000e3],[-1e3,1000e3]], diff --git a/contrib/world_builder/tests/gwb-dat/app_wb3.wb b/contrib/world_builder/tests/gwb-dat/app_wb3.wb index b0b3807993c..f7989b3efae 100644 --- a/contrib/world_builder/tests/gwb-dat/app_wb3.wb +++ b/contrib/world_builder/tests/gwb-dat/app_wb3.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "features": [ {"model":"continental plate", "name":"Caribbean", "max depth":250e3, "coordinates":[[-1e3,500e3],[500e3,500e3],[500e3,1000e3],[-1e3,1000e3]], diff --git a/contrib/world_builder/tests/gwb-dat/cartesian_fault_x_and_y_direction.wb b/contrib/world_builder/tests/gwb-dat/cartesian_fault_x_and_y_direction.wb index 6af3b6efc9c..a1c162ce1c8 100644 --- a/contrib/world_builder/tests/gwb-dat/cartesian_fault_x_and_y_direction.wb +++ b/contrib/world_builder/tests/gwb-dat/cartesian_fault_x_and_y_direction.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "interpolation":"continuous monotone spline", "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/cartesian_multiridge.wb b/contrib/world_builder/tests/gwb-dat/cartesian_multiridge.wb index cf9b98258ea..ab505a98da6 100644 --- a/contrib/world_builder/tests/gwb-dat/cartesian_multiridge.wb +++ b/contrib/world_builder/tests/gwb-dat/cartesian_multiridge.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "cross section": [[0,0],[400e3,500e3]], "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, @@ -22,7 +22,7 @@ "segments":[{"length":200e3,"thickness":[300e3],"top truncation":[-100e3],"angle":[90]}, {"length":460e3,"thickness":[300e3],"top truncation":[-300e3],"angle":[90]}], "temperature models":[{"model":"mass conserving", "density":3300, "thermal conductivity":3.3, - "adiabatic heating":true,"plate velocity":0.125, + "adiabatic heating":true,"spreading velocity":0.125, "subducting velocity": 0.125, "ridge coordinates":[[[1500e3,1500e3],[1500e3,2250e3]],[[1000e3,2250e3],[1000e3,3000e3]]], "coupling depth":100e3, "taper distance":100e3, "min distance slab top":-300e3, "max distance slab top":300e3}], diff --git a/contrib/world_builder/tests/gwb-dat/cartesian_no_ridge_drift.wb b/contrib/world_builder/tests/gwb-dat/cartesian_no_ridge_drift.wb index 8bc20540c08..527b7c5b9d9 100644 --- a/contrib/world_builder/tests/gwb-dat/cartesian_no_ridge_drift.wb +++ b/contrib/world_builder/tests/gwb-dat/cartesian_no_ridge_drift.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, @@ -72,7 +72,7 @@ "density": 3300, "thermal conductivity": 3.3, "adiabatic heating": true, - "plate velocity": 0.05, + "spreading velocity": 0.05, "subducting velocity": [[0.05, 0.05]], "ridge coordinates": [[[-100e3, 1000.0], [-100e3, -1000.0]]], "coupling depth": 50000.0, diff --git a/contrib/world_builder/tests/gwb-dat/cartesian_slab_linear_adiabat.wb b/contrib/world_builder/tests/gwb-dat/cartesian_slab_linear_adiabat.wb index 8ae69fe295d..c0fc93fbaa7 100644 --- a/contrib/world_builder/tests/gwb-dat/cartesian_slab_linear_adiabat.wb +++ b/contrib/world_builder/tests/gwb-dat/cartesian_slab_linear_adiabat.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[1000e3,0]],"surface temperature":273, "force surface temperature":true, diff --git a/contrib/world_builder/tests/gwb-dat/cartesian_slab_mass_conserving.wb b/contrib/world_builder/tests/gwb-dat/cartesian_slab_mass_conserving.wb index c1cc7e56be3..ca0ac263a85 100644 --- a/contrib/world_builder/tests/gwb-dat/cartesian_slab_mass_conserving.wb +++ b/contrib/world_builder/tests/gwb-dat/cartesian_slab_mass_conserving.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[0,0],[1000e3,0]],"surface temperature":273, "force surface temperature":true, "potential mantle temperature":1623, "thermal expansion coefficient":3.1e-5, @@ -17,7 +17,8 @@ "temperature models":[ {"model":"mass conserving", "density":3300, "thermal conductivity":3.3,"adiabatic heating":true, - "plate velocity":0.05, + "spreading velocity":0.05, + "subducting velocity":0.05, "ridge coordinates":[[[6500e3,-100e3],[6500e3,100e3]]], "coupling depth":80e3, "forearc cooling factor":20.0, diff --git a/contrib/world_builder/tests/gwb-dat/cartesian_slab_spline_complex.wb b/contrib/world_builder/tests/gwb-dat/cartesian_slab_spline_complex.wb index 98382b3e07a..cc43be20a02 100644 --- a/contrib/world_builder/tests/gwb-dat/cartesian_slab_spline_complex.wb +++ b/contrib/world_builder/tests/gwb-dat/cartesian_slab_spline_complex.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section":[[0,50e3],[50e3,0]], "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/cartesian_slab_x_and_y_direction.wb b/contrib/world_builder/tests/gwb-dat/cartesian_slab_x_and_y_direction.wb index f87247d5552..c67e518d231 100644 --- a/contrib/world_builder/tests/gwb-dat/cartesian_slab_x_and_y_direction.wb +++ b/contrib/world_builder/tests/gwb-dat/cartesian_slab_x_and_y_direction.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "interpolation":"continuous monotone spline", "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/cartesian_young_slab_mass_conserving.wb b/contrib/world_builder/tests/gwb-dat/cartesian_young_slab_mass_conserving.wb index ad3ef4402fe..25f2e402dcb 100644 --- a/contrib/world_builder/tests/gwb-dat/cartesian_young_slab_mass_conserving.wb +++ b/contrib/world_builder/tests/gwb-dat/cartesian_young_slab_mass_conserving.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[0,0],[1000e3,0]],"surface temperature":273, "force surface temperature":true, "potential mantle temperature":1623, "thermal expansion coefficient":3.1e-5, @@ -15,7 +15,7 @@ "temperature models":[ {"model":"mass conserving", "density":3300, "thermal conductivity":3.3,"adiabatic heating":true, - "plate velocity":0.04, + "spreading velocity":0.04, "subducting velocity": 0.04, "ridge coordinates":[[[2900e3,-100e3],[2900e3,100e3]]], "coupling depth":120e3, "forearc cooling factor":10.0, diff --git a/contrib/world_builder/tests/gwb-dat/chunk_slab_mass_conserving.wb b/contrib/world_builder/tests/gwb-dat/chunk_slab_mass_conserving.wb index 880cb3c5344..b41596305d9 100644 --- a/contrib/world_builder/tests/gwb-dat/chunk_slab_mass_conserving.wb +++ b/contrib/world_builder/tests/gwb-dat/chunk_slab_mass_conserving.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin at end segment", "radius":6371000.0}, "cross section":[[0,0],[45,0]],"surface temperature":273, "force surface temperature":true, "potential mantle temperature":1673, "thermal expansion coefficient":3.1e-5, @@ -17,7 +17,7 @@ "temperature models":[ {"model":"mass conserving", "density":3300, "thermal conductivity":3.3,"adiabatic heating":true, - "plate velocity":0.05, + "spreading velocity":0.05, "subducting velocity":0.05, "ridge coordinates": [[[45,-5],[45,5]]], "coupling depth":80e3, "forearc cooling factor":10.0, diff --git a/contrib/world_builder/tests/gwb-dat/continental_min_max_surface.wb b/contrib/world_builder/tests/gwb-dat/continental_min_max_surface.wb index 9d005767abb..6e7cbe00bd5 100644 --- a/contrib/world_builder/tests/gwb-dat/continental_min_max_surface.wb +++ b/contrib/world_builder/tests/gwb-dat/continental_min_max_surface.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "features":[ { diff --git a/contrib/world_builder/tests/gwb-dat/continental_min_max_surface_spherical.wb b/contrib/world_builder/tests/gwb-dat/continental_min_max_surface_spherical.wb index a88363ec185..c0c1da34577 100644 --- a/contrib/world_builder/tests/gwb-dat/continental_min_max_surface_spherical.wb +++ b/contrib/world_builder/tests/gwb-dat/continental_min_max_surface_spherical.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin at end segment"}, "features":[ { diff --git a/contrib/world_builder/tests/gwb-dat/depth_method_slab_begin_at_end_segment.wb b/contrib/world_builder/tests/gwb-dat/depth_method_slab_begin_at_end_segment.wb index 159f958d703..0b014475716 100644 --- a/contrib/world_builder/tests/gwb-dat/depth_method_slab_begin_at_end_segment.wb +++ b/contrib/world_builder/tests/gwb-dat/depth_method_slab_begin_at_end_segment.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical","depth method":"begin at end segment"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[45,0]],"surface temperature":273, "force surface temperature":true, diff --git a/contrib/world_builder/tests/gwb-dat/fault_complex_spherical.wb b/contrib/world_builder/tests/gwb-dat/fault_complex_spherical.wb index 52614be3491..b175d23414d 100644 --- a/contrib/world_builder/tests/gwb-dat/fault_complex_spherical.wb +++ b/contrib/world_builder/tests/gwb-dat/fault_complex_spherical.wb @@ -1,4 +1,4 @@ -{"version": "0.6", "interpolation": "continuous monotone spline", "coordinate system": {"model": "spherical", "depth method": "starting point"}, "features": [{"model": "fault", "name": "fault_2", "coordinates": [[144.8, 41.0], [143.0, 42.0], [142.2, 43.0], [142.0, 44.0], [142.0, 46.0], [142.2, 48.0], [142.5, 50.0], [142.5, 52.5], [142.5, 55.0], [147.0, 61.9], [146.2, 63.3], [146.1, 63.9], [142.1, 66.2], [140.0, 67.7], [126.2, 70.2], [122.8, 75.5], [126.7, 78.2], [122.0, 80.7], [98.5, 85.0], [43.0, 86.5], [7.5, 84.9], [0.0, 84.1], [-4.5, 83.4], [-6.0, 82.1], [-3.5, 80.9], [-2.0, 80.38], [4.25, 79.6], [3.0, 79.04], [7.0, 78.45], [7.6, 77.9], [7.4, 76.75], [7.2, 76.55], [7.3, 75.6], [8.4, 74.8], [8.4, 74.6], [8.7, 74.35], [8.8, 73.95], [8.25, 73.55], [7.8, 73.4], [6.8, 73.25], [4.4, 72.8], [1.1, 72.2], [-4.699999999999989, 71.4], [-6.5, 70.92], [-12.0, 71.7], [-13.199999999999989, 70.92], [-13.800000000000011, 70.97], [-14.699999999999989, 70.55], [-15.399999999999977, 70.0], [-16.5, 68.9], [-17.30000000000001, 68.98], [-18.100000000000023, 68.4], [-18.5, 67.7], [-19.5, 66.7], [-16.5, 66.4], [-17.0, 66.0], [-17.0, 65.0], [-19.0, 63.7], [-22.5, 64.1], [-24.600000000000023, 63.0], [-27.0, 61.6], [-29.5, 60.0], [-34.0, 57.0], [-35.30000000000001, 55.2], [-35.19999999999999, 53.0], [-35.0, 52.7], [-31.80000000000001, 52.6], [-31.80000000000001, 52.2], [-30.0, 52.1], [-30.0, 51.2], [-29.0, 49.8], [-27.5, 47.8], [-27.399999999999977, 46.5], [-28.0, 45.0], [-28.19999999999999, 44.5], [-28.5, 43.8], [-29.0, 43.3], [-29.30000000000001, 42.9], [-29.30000000000001, 42.7], [-29.30000000000001, 42.3], [-29.30000000000001, 41.7], [-29.69999999999999, 40.0], [-29.75, 39.45]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [0], "max distance fault center": 50000.0}]}, +{"version": "1.0", "interpolation": "continuous monotone spline", "coordinate system": {"model": "spherical", "depth method": "starting point"}, "features": [{"model": "fault", "name": "fault_2", "coordinates": [[144.8, 41.0], [143.0, 42.0], [142.2, 43.0], [142.0, 44.0], [142.0, 46.0], [142.2, 48.0], [142.5, 50.0], [142.5, 52.5], [142.5, 55.0], [147.0, 61.9], [146.2, 63.3], [146.1, 63.9], [142.1, 66.2], [140.0, 67.7], [126.2, 70.2], [122.8, 75.5], [126.7, 78.2], [122.0, 80.7], [98.5, 85.0], [43.0, 86.5], [7.5, 84.9], [0.0, 84.1], [-4.5, 83.4], [-6.0, 82.1], [-3.5, 80.9], [-2.0, 80.38], [4.25, 79.6], [3.0, 79.04], [7.0, 78.45], [7.6, 77.9], [7.4, 76.75], [7.2, 76.55], [7.3, 75.6], [8.4, 74.8], [8.4, 74.6], [8.7, 74.35], [8.8, 73.95], [8.25, 73.55], [7.8, 73.4], [6.8, 73.25], [4.4, 72.8], [1.1, 72.2], [-4.699999999999989, 71.4], [-6.5, 70.92], [-12.0, 71.7], [-13.199999999999989, 70.92], [-13.800000000000011, 70.97], [-14.699999999999989, 70.55], [-15.399999999999977, 70.0], [-16.5, 68.9], [-17.30000000000001, 68.98], [-18.100000000000023, 68.4], [-18.5, 67.7], [-19.5, 66.7], [-16.5, 66.4], [-17.0, 66.0], [-17.0, 65.0], [-19.0, 63.7], [-22.5, 64.1], [-24.600000000000023, 63.0], [-27.0, 61.6], [-29.5, 60.0], [-34.0, 57.0], [-35.30000000000001, 55.2], [-35.19999999999999, 53.0], [-35.0, 52.7], [-31.80000000000001, 52.6], [-31.80000000000001, 52.2], [-30.0, 52.1], [-30.0, 51.2], [-29.0, 49.8], [-27.5, 47.8], [-27.399999999999977, 46.5], [-28.0, 45.0], [-28.19999999999999, 44.5], [-28.5, 43.8], [-29.0, 43.3], [-29.30000000000001, 42.9], [-29.30000000000001, 42.7], [-29.30000000000001, 42.3], [-29.30000000000001, 41.7], [-29.69999999999999, 40.0], [-29.75, 39.45]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [0], "max distance fault center": 50000.0}]}, {"model": "fault", "name": "fault_3", "coordinates": [[-29.75, 39.45], [-29.100000000000023, 39.3], [-28.100000000000023, 39.0], [-27.399999999999977, 38.8], [-26.80000000000001, 38.4], [-26.19999999999999, 38.1], [-25.399999999999977, 37.7], [-24.69999999999999, 37.3], [-24.100000000000023, 36.82], [-23.19999999999999, 36.97], [-21.5, 37.07], [-21.30000000000001, 37.1], [-20.899999999999977, 37.14], [-20.5, 37.13], [-20.19999999999999, 37.12], [-18.0, 37.8], [-16.0, 37.8], [-14.0, 37.0], [-10.0, 36.0], [-6.0, 36.0], [1.4, 36.2], [6.8, 36.4], [14.2, 38.5], [15.1, 38.5], [16.6, 38.3], [17.3, 38.9], [18.2, 39.7], [18.9, 40.2], [19.4, 39.9], [19.7, 39.1], [20.0, 38.2], [20.5, 37.3], [20.9, 36.5], [21.6, 35.8], [22.2, 35.2], [23.0, 34.7], [23.7, 34.4], [24.6, 34.2], [25.7, 34.3], [26.7, 34.4], [27.4, 34.5], [28.2, 34.8], [29.2, 35.2], [29.8, 35.7], [30.3, 35.8], [30.9, 35.4], [31.4, 34.9], [32.3, 34.3], [32.9, 34.2], [34.0, 34.6], [34.5, 35.0], [35.2, 35.6], [35.6, 35.9]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [0], "max distance fault center": 50000.0}]}, {"model": "fault", "name": "fault_4", "coordinates": [[-29.75, 39.45], [-29.94999999999999, 39.45], [-30.30000000000001, 38.4], [-30.649999999999977, 38.3], [-30.80000000000001, 38.0], [-31.149999999999977, 37.9], [-32.0, 37.5], [-33.19999999999999, 36.8], [-33.69999999999999, 36.5], [-34.10000000000002, 36.0], [-35.0, 35.0], [-36.39999999999998, 35.3], [-37.80000000000001, 33.5], [-39.30000000000001, 33.8], [-40.5, 31.9], [-41.69999999999999, 30.9], [-41.89999999999998, 30.5], [-42.0, 30.0], [-42.69999999999999, 30.1], [-43.14999999999998, 28.75], [-43.75, 28.75], [-44.19999999999999, 27.5], [-44.5, 26.9], [-44.80000000000001, 26.2], [-45.0, 25.7], [-45.39999999999998, 25.2], [-46.10000000000002, 24.5], [-46.30000000000001, 24.2], [-46.30000000000001, 23.9], [-46.30000000000001, 23.9], [-44.89999999999998, 23.7], [-45.0, 23.0], [-45.0, 22.8], [-45.5, 22.0], [-45.60000000000002, 21.3], [-45.69999999999999, 20.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [0], "max distance fault center": 50000.0}]}, {"model": "fault", "name": "fault_5", "coordinates": [[-45.7, 20.3], [-59.39999999999998, 16.3], [-59.80000000000001, 16.9], [-60.30000000000001, 17.4], [-61, 18.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [0], "max distance fault center": 50000.0}]}, diff --git a/contrib/world_builder/tests/gwb-dat/geodynamic_world_builder_mar.json b/contrib/world_builder/tests/gwb-dat/geodynamic_world_builder_mar.json index 90d51ff3e35..9674df9a9de 100644 --- a/contrib/world_builder/tests/gwb-dat/geodynamic_world_builder_mar.json +++ b/contrib/world_builder/tests/gwb-dat/geodynamic_world_builder_mar.json @@ -1 +1 @@ -{"version": "0.6", "coordinate system": {"model": "spherical", "depth method": "starting point"}, "features": [{"model": "fault", "name": "fault_1", "coordinates": [[-24.612, -1.103], [-24.603095, -1.101906], [-24.59419, -1.100811], [-24.585285, -1.099717], [-24.57638, -1.098622], [-24.567475, -1.097528], [-24.55857, -1.096433], [-24.549665, -1.095338], [-24.540761, -1.094244], [-24.531856, -1.093149], [-24.522951, -1.092055], [-24.514046, -1.09096], [-24.505141, -1.089865], [-24.496236, -1.08877], [-24.487331, -1.087676], [-24.478426, -1.086581], [-24.469521, -1.085486], [-24.460617, -1.084391], [-24.451712, -1.083296], [-24.442807, -1.082201], [-24.433902, -1.081106], [-24.424997, -1.080012], [-24.416092, -1.078917], [-24.407188, -1.077822], [-24.398283, -1.076726], [-24.389378, -1.075631], [-24.380473, -1.074536], [-24.371568, -1.073441], [-24.362664, -1.072346], [-24.353759, -1.071251], [-24.344854, -1.070156], [-24.335949, -1.069061], [-24.327044, -1.067965], [-24.31814, -1.06687], [-24.309235, -1.065775], [-24.30033, -1.064679], [-24.291426, -1.063584], [-24.282521, -1.062489], [-24.273616, -1.061393], [-24.264711, -1.060298], [-24.255807, -1.059202], [-24.246902, -1.058107], [-24.237997, -1.057011], [-24.229093, -1.055916], [-24.220188, -1.05482], [-24.211283, -1.053725], [-24.202378, -1.052629], [-24.193474, -1.051534], [-24.184569, -1.050438], [-24.175665, -1.049342], [-24.16676, -1.048246], [-24.157855, -1.047151], [-24.148951, -1.046055], [-24.140046, -1.044959], [-24.131141, -1.043863], [-24.122237, -1.042768], [-24.113332, -1.041672], [-24.104428, -1.040576], [-24.095523, -1.03948], [-24.086618, -1.038384], [-24.077714, -1.037288], [-24.068809, -1.036192], [-24.059905, -1.035096], [-24.051, -1.034]], "dip point": [0.9698279114934465, 0.24379052911928262], "min depth": -100.0, "max depth": 20000.0, "segments": [{"length": 20000.0, "thickness": [100000.0], "angle": [90.0, 90.0]}], "composition models": [{"model": "smooth", "compositions": [0], "side distance fault center": 500000.0}]}, {"model": "fault", "name": "fault_2", "coordinates": [[-24.051, -1.034], [-24.042095, -1.03289], [-24.03319, -1.031779], [-24.024285, -1.030669], [-24.01538, -1.029558], [-24.006475, -1.028448], [-23.99757, -1.027338], [-23.988665, -1.026227], [-23.979761, -1.025117], [-23.970856, -1.024006], [-23.961951, -1.022895], [-23.953046, -1.021785], [-23.944141, -1.020674], [-23.935236, -1.019564], [-23.926331, -1.018453], [-23.917426, -1.017342], [-23.908522, -1.016231], [-23.899617, -1.015121], [-23.890712, -1.01401], [-23.881807, -1.012899], [-23.872902, -1.011788], [-23.863997, -1.010677], [-23.855093, -1.009567], [-23.846188, -1.008456], [-23.837283, -1.007345], [-23.828378, -1.006234], [-23.819473, -1.005123], [-23.810569, -1.004012], [-23.801664, -1.002901], [-23.792759, -1.00179], [-23.783854, -1.000679], [-23.774949, -0.999568], [-23.766045, -0.998456], [-23.75714, -0.997345], [-23.748235, -0.996234], [-23.73933, -0.995123], [-23.730426, -0.994012], [-23.721521, -0.992901], [-23.712616, -0.991789], [-23.703711, -0.990678], [-23.694807, -0.989567], [-23.685902, -0.988455], [-23.676997, -0.987344], [-23.668093, -0.986233], [-23.659188, -0.985121], [-23.650283, -0.98401], [-23.641379, -0.982898], [-23.632474, -0.981787], [-23.623569, -0.980675], [-23.614665, -0.979564], [-23.60576, -0.978452], [-23.596855, -0.977341], [-23.587951, -0.976229], [-23.579046, -0.975117], [-23.570141, -0.974006], [-23.561237, -0.972894], [-23.552332, -0.971782], [-23.543428, -0.970671], [-23.534523, -0.969559], [-23.525618, -0.968447], [-23.516714, -0.967335], [-23.507809, -0.966224], [-23.498905, -0.965112], [-23.49, -0.964]], "dip point": [0.9752552113408824, 0.22108204981963328], "min depth": -100.0, "max depth": 20000.0, "segments": [{"length": 20000.0, "thickness": [100000.0], "angle": [90.0, 90.0]}], "composition models": [{"model": "smooth", "compositions": [0], "side distance fault center": 500000.0}]}, {"model": "fault", "name": "fault_3", "coordinates": [[-23.49, -0.964], [-23.48119, -0.962667], [-23.472381, -0.961335], [-23.463571, -0.960002], [-23.454761, -0.958669], [-23.445951, -0.957337], [-23.437142, -0.956004], [-23.428332, -0.954671], [-23.419522, -0.953338], [-23.410713, -0.952005], [-23.401903, -0.950673], [-23.393093, -0.94934], [-23.384284, -0.948007], [-23.375474, -0.946674], [-23.366664, -0.945341], [-23.357855, -0.944008], [-23.349045, -0.942675], [-23.340236, -0.941342], [-23.331426, -0.940009], [-23.322616, -0.938676], [-23.313807, -0.937343], [-23.304997, -0.93601], [-23.296188, -0.934677], [-23.287378, -0.933343], [-23.278568, -0.93201], [-23.269759, -0.930677], [-23.260949, -0.929344], [-23.25214, -0.928011], [-23.24333, -0.926677], [-23.234521, -0.925344], [-23.225711, -0.924011], [-23.216902, -0.922678], [-23.208092, -0.921344], [-23.199282, -0.920011], [-23.190473, -0.918677], [-23.181663, -0.917344], [-23.172854, -0.916011], [-23.164044, -0.914677], [-23.155235, -0.913344], [-23.146426, -0.91201], [-23.137616, -0.910677], [-23.128807, -0.909343], [-23.119997, -0.90801], [-23.111188, -0.906676], [-23.102378, -0.905342], [-23.093569, -0.904009], [-23.084759, -0.902675], [-23.07595, -0.901342], [-23.067141, -0.900008], [-23.058331, -0.898674], [-23.049522, -0.89734], [-23.040712, -0.896007], [-23.031903, -0.894673], [-23.023094, -0.893339], [-23.014284, -0.892005], [-23.005475, -0.890671], [-22.996665, -0.889338], [-22.987856, -0.888004], [-22.979047, -0.88667], [-22.970237, -0.885336], [-22.961428, -0.884002], [-22.952619, -0.882668], [-22.943809, -0.881334], [-22.935, -0.88]], "dip point": [0.9708605070210597, 0.23964531271612796], "min depth": -100.0, "max depth": 20000.0, "segments": [{"length": 20000.0, "thickness": [100000.0], "angle": [90.0, 90.0]}], "composition models": [{"model": "smooth", "compositions": [0], "side distance fault center": 500000.0}]}]} +{"version": "1.0", "coordinate system": {"model": "spherical", "depth method": "starting point"}, "features": [{"model": "fault", "name": "fault_1", "coordinates": [[-24.612, -1.103], [-24.603095, -1.101906], [-24.59419, -1.100811], [-24.585285, -1.099717], [-24.57638, -1.098622], [-24.567475, -1.097528], [-24.55857, -1.096433], [-24.549665, -1.095338], [-24.540761, -1.094244], [-24.531856, -1.093149], [-24.522951, -1.092055], [-24.514046, -1.09096], [-24.505141, -1.089865], [-24.496236, -1.08877], [-24.487331, -1.087676], [-24.478426, -1.086581], [-24.469521, -1.085486], [-24.460617, -1.084391], [-24.451712, -1.083296], [-24.442807, -1.082201], [-24.433902, -1.081106], [-24.424997, -1.080012], [-24.416092, -1.078917], [-24.407188, -1.077822], [-24.398283, -1.076726], [-24.389378, -1.075631], [-24.380473, -1.074536], [-24.371568, -1.073441], [-24.362664, -1.072346], [-24.353759, -1.071251], [-24.344854, -1.070156], [-24.335949, -1.069061], [-24.327044, -1.067965], [-24.31814, -1.06687], [-24.309235, -1.065775], [-24.30033, -1.064679], [-24.291426, -1.063584], [-24.282521, -1.062489], [-24.273616, -1.061393], [-24.264711, -1.060298], [-24.255807, -1.059202], [-24.246902, -1.058107], [-24.237997, -1.057011], [-24.229093, -1.055916], [-24.220188, -1.05482], [-24.211283, -1.053725], [-24.202378, -1.052629], [-24.193474, -1.051534], [-24.184569, -1.050438], [-24.175665, -1.049342], [-24.16676, -1.048246], [-24.157855, -1.047151], [-24.148951, -1.046055], [-24.140046, -1.044959], [-24.131141, -1.043863], [-24.122237, -1.042768], [-24.113332, -1.041672], [-24.104428, -1.040576], [-24.095523, -1.03948], [-24.086618, -1.038384], [-24.077714, -1.037288], [-24.068809, -1.036192], [-24.059905, -1.035096], [-24.051, -1.034]], "dip point": [0.9698279114934465, 0.24379052911928262], "min depth": -100.0, "max depth": 20000.0, "segments": [{"length": 20000.0, "thickness": [100000.0], "angle": [90.0, 90.0]}], "composition models": [{"model": "smooth", "compositions": [0], "side distance fault center": 500000.0}]}, {"model": "fault", "name": "fault_2", "coordinates": [[-24.051, -1.034], [-24.042095, -1.03289], [-24.03319, -1.031779], [-24.024285, -1.030669], [-24.01538, -1.029558], [-24.006475, -1.028448], [-23.99757, -1.027338], [-23.988665, -1.026227], [-23.979761, -1.025117], [-23.970856, -1.024006], [-23.961951, -1.022895], [-23.953046, -1.021785], [-23.944141, -1.020674], [-23.935236, -1.019564], [-23.926331, -1.018453], [-23.917426, -1.017342], [-23.908522, -1.016231], [-23.899617, -1.015121], [-23.890712, -1.01401], [-23.881807, -1.012899], [-23.872902, -1.011788], [-23.863997, -1.010677], [-23.855093, -1.009567], [-23.846188, -1.008456], [-23.837283, -1.007345], [-23.828378, -1.006234], [-23.819473, -1.005123], [-23.810569, -1.004012], [-23.801664, -1.002901], [-23.792759, -1.00179], [-23.783854, -1.000679], [-23.774949, -0.999568], [-23.766045, -0.998456], [-23.75714, -0.997345], [-23.748235, -0.996234], [-23.73933, -0.995123], [-23.730426, -0.994012], [-23.721521, -0.992901], [-23.712616, -0.991789], [-23.703711, -0.990678], [-23.694807, -0.989567], [-23.685902, -0.988455], [-23.676997, -0.987344], [-23.668093, -0.986233], [-23.659188, -0.985121], [-23.650283, -0.98401], [-23.641379, -0.982898], [-23.632474, -0.981787], [-23.623569, -0.980675], [-23.614665, -0.979564], [-23.60576, -0.978452], [-23.596855, -0.977341], [-23.587951, -0.976229], [-23.579046, -0.975117], [-23.570141, -0.974006], [-23.561237, -0.972894], [-23.552332, -0.971782], [-23.543428, -0.970671], [-23.534523, -0.969559], [-23.525618, -0.968447], [-23.516714, -0.967335], [-23.507809, -0.966224], [-23.498905, -0.965112], [-23.49, -0.964]], "dip point": [0.9752552113408824, 0.22108204981963328], "min depth": -100.0, "max depth": 20000.0, "segments": [{"length": 20000.0, "thickness": [100000.0], "angle": [90.0, 90.0]}], "composition models": [{"model": "smooth", "compositions": [0], "side distance fault center": 500000.0}]}, {"model": "fault", "name": "fault_3", "coordinates": [[-23.49, -0.964], [-23.48119, -0.962667], [-23.472381, -0.961335], [-23.463571, -0.960002], [-23.454761, -0.958669], [-23.445951, -0.957337], [-23.437142, -0.956004], [-23.428332, -0.954671], [-23.419522, -0.953338], [-23.410713, -0.952005], [-23.401903, -0.950673], [-23.393093, -0.94934], [-23.384284, -0.948007], [-23.375474, -0.946674], [-23.366664, -0.945341], [-23.357855, -0.944008], [-23.349045, -0.942675], [-23.340236, -0.941342], [-23.331426, -0.940009], [-23.322616, -0.938676], [-23.313807, -0.937343], [-23.304997, -0.93601], [-23.296188, -0.934677], [-23.287378, -0.933343], [-23.278568, -0.93201], [-23.269759, -0.930677], [-23.260949, -0.929344], [-23.25214, -0.928011], [-23.24333, -0.926677], [-23.234521, -0.925344], [-23.225711, -0.924011], [-23.216902, -0.922678], [-23.208092, -0.921344], [-23.199282, -0.920011], [-23.190473, -0.918677], [-23.181663, -0.917344], [-23.172854, -0.916011], [-23.164044, -0.914677], [-23.155235, -0.913344], [-23.146426, -0.91201], [-23.137616, -0.910677], [-23.128807, -0.909343], [-23.119997, -0.90801], [-23.111188, -0.906676], [-23.102378, -0.905342], [-23.093569, -0.904009], [-23.084759, -0.902675], [-23.07595, -0.901342], [-23.067141, -0.900008], [-23.058331, -0.898674], [-23.049522, -0.89734], [-23.040712, -0.896007], [-23.031903, -0.894673], [-23.023094, -0.893339], [-23.014284, -0.892005], [-23.005475, -0.890671], [-22.996665, -0.889338], [-22.987856, -0.888004], [-22.979047, -0.88667], [-22.970237, -0.885336], [-22.961428, -0.884002], [-22.952619, -0.882668], [-22.943809, -0.881334], [-22.935, -0.88]], "dip point": [0.9708605070210597, 0.23964531271612796], "min depth": -100.0, "max depth": 20000.0, "segments": [{"length": 20000.0, "thickness": [100000.0], "angle": [90.0, 90.0]}], "composition models": [{"model": "smooth", "compositions": [0], "side distance fault center": 500000.0}]}]} diff --git a/contrib/world_builder/tests/gwb-dat/half_space_plate_model.wb b/contrib/world_builder/tests/gwb-dat/half_space_plate_model.wb index a44c2d8c749..7413ae237e4 100644 --- a/contrib/world_builder/tests/gwb-dat/half_space_plate_model.wb +++ b/contrib/world_builder/tests/gwb-dat/half_space_plate_model.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[1000e3,0]],"surface temperature":273, "force surface temperature":true, diff --git a/contrib/world_builder/tests/gwb-dat/half_space_variable_spreading.wb b/contrib/world_builder/tests/gwb-dat/half_space_variable_spreading.wb index 88e7706b382..86eb003322c 100644 --- a/contrib/world_builder/tests/gwb-dat/half_space_variable_spreading.wb +++ b/contrib/world_builder/tests/gwb-dat/half_space_variable_spreading.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "surface temperature":273, "force surface temperature":true, diff --git a/contrib/world_builder/tests/gwb-dat/mantle_layer_min_max_surface.wb b/contrib/world_builder/tests/gwb-dat/mantle_layer_min_max_surface.wb index 68285ba8984..118b5a82b7f 100644 --- a/contrib/world_builder/tests/gwb-dat/mantle_layer_min_max_surface.wb +++ b/contrib/world_builder/tests/gwb-dat/mantle_layer_min_max_surface.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "features":[ diff --git a/contrib/world_builder/tests/gwb-dat/mantle_layer_min_max_surface_spherical.wb b/contrib/world_builder/tests/gwb-dat/mantle_layer_min_max_surface_spherical.wb index 28e6ea93854..bceeabc9341 100644 --- a/contrib/world_builder/tests/gwb-dat/mantle_layer_min_max_surface_spherical.wb +++ b/contrib/world_builder/tests/gwb-dat/mantle_layer_min_max_surface_spherical.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin at end segment"}, "gravity model":{"model":"uniform", "magnitude":10}, "features":[ diff --git a/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_plate_model_old.wb b/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_plate_model_old.wb index 38e826083ea..b7ce37f0a11 100644 --- a/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_plate_model_old.wb +++ b/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_plate_model_old.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, @@ -137,7 +137,8 @@ "density": 3300, "thermal conductivity": 3.3, "adiabatic heating": true, - "plate velocity": 0.05, + "spreading velocity": 0.05, + "subducting velocity": 0.05, "ridge coordinates": [ [ [ diff --git a/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_plate_model_young.wb b/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_plate_model_young.wb index cc3b53e474f..5234c29dda3 100644 --- a/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_plate_model_young.wb +++ b/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_plate_model_young.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, @@ -137,7 +137,8 @@ "density": 3300, "thermal conductivity": 3.3, "adiabatic heating": true, - "plate velocity": 0.05, + "spreading velocity": 0.05, + "subducting velocity": 0.05, "ridge coordinates": [ [ [ diff --git a/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_spline.wb b/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_spline.wb index b5eb710882d..4550cf90726 100644 --- a/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_spline.wb +++ b/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_temperature_spline.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, @@ -137,7 +137,8 @@ "density": 3300, "thermal conductivity": 3.3, "adiabatic heating": true, - "plate velocity": 0.05, + "spreading velocity": 0.05, + "subducting velocity": 0.05, "ridge coordinates": [ [ [ diff --git a/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_with_variable_spreading.wb b/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_with_variable_spreading.wb index 970e2e9a1b7..0ae1222b076 100644 --- a/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_with_variable_spreading.wb +++ b/contrib/world_builder/tests/gwb-dat/mass_conserving_slab_with_variable_spreading.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, @@ -137,7 +137,8 @@ "density": 3300, "thermal conductivity": 3.3, "adiabatic heating": true, - "plate velocity": [ [1,[[0.000005, 0.05]]] ], + "spreading velocity": [ [1,[[0.000005, 0.05]]] ], + "subducting velocity": [[0.000005, 0.05]], "ridge coordinates": [ [ [ diff --git a/contrib/world_builder/tests/gwb-dat/oceanic_min_max_surface.wb b/contrib/world_builder/tests/gwb-dat/oceanic_min_max_surface.wb index 153f40ad672..cf092788ded 100644 --- a/contrib/world_builder/tests/gwb-dat/oceanic_min_max_surface.wb +++ b/contrib/world_builder/tests/gwb-dat/oceanic_min_max_surface.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "features":[ diff --git a/contrib/world_builder/tests/gwb-dat/oceanic_min_max_surface_spherical.wb b/contrib/world_builder/tests/gwb-dat/oceanic_min_max_surface_spherical.wb index 33c451f5e88..25aeae315f3 100644 --- a/contrib/world_builder/tests/gwb-dat/oceanic_min_max_surface_spherical.wb +++ b/contrib/world_builder/tests/gwb-dat/oceanic_min_max_surface_spherical.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin at end segment"}, "gravity model":{"model":"uniform", "magnitude":10}, "features":[ diff --git a/contrib/world_builder/tests/gwb-dat/plate_model_variable_spreading.wb b/contrib/world_builder/tests/gwb-dat/plate_model_variable_spreading.wb index 3d994e44b1c..830efb70e0d 100644 --- a/contrib/world_builder/tests/gwb-dat/plate_model_variable_spreading.wb +++ b/contrib/world_builder/tests/gwb-dat/plate_model_variable_spreading.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"cartesian"}, "gravity model":{"model":"uniform", "magnitude":10}, "surface temperature":273, "force surface temperature":true, diff --git a/contrib/world_builder/tests/gwb-dat/plume_gaussian.wb b/contrib/world_builder/tests/gwb-dat/plume_gaussian.wb index 6c74bc87e49..1c42877aa0f 100644 --- a/contrib/world_builder/tests/gwb-dat/plume_gaussian.wb +++ b/contrib/world_builder/tests/gwb-dat/plume_gaussian.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "surface temperature":273.15, "potential mantle temperature":1573.15, "features": diff --git a/contrib/world_builder/tests/gwb-dat/plume_gaussian_spherical.wb b/contrib/world_builder/tests/gwb-dat/plume_gaussian_spherical.wb index a57c814a401..3db7e624aa4 100644 --- a/contrib/world_builder/tests/gwb-dat/plume_gaussian_spherical.wb +++ b/contrib/world_builder/tests/gwb-dat/plume_gaussian_spherical.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"starting point"}, "maximum distance between coordinates":0.01, "thermal expansion coefficient":0.0, diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1.dat b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1.dat new file mode 100644 index 00000000000..99dd6303dba --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1.dat @@ -0,0 +1,14 @@ +# This is a comment in the data +# file. +# Now define parameters: +# dim = 3 +# compositions = 6 +# grain compositions = 2 +# number of grains = 1 +# x y z d c1 c2 c3 c4 c5 c6 +5 5 0 15 +1 5 0 5 +7 5 0 5 +5 3 0 0.1 +4.5 0 0 15 +5 6 0 0.1 \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1.wb b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1.wb new file mode 100644 index 00000000000..0cd87ce47a0 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1.wb @@ -0,0 +1,80 @@ +{ + "version": "1.0", + "coordinate system":{"model":"cartesian"}, + "random number seed":1, + "features": + [ + { + "model":"mantle layer", "name":"Mantle", "min depth":10, "max depth": 20, + "coordinates":[[0,0],[0,10],[10,10],[10,0]], + "temperature models":[{"model":"uniform", "temperature":293}], + "composition models":[{"model":"uniform", "compositions":[0]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[0,0,0]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"continental plate", "name":"CP", "min depth":0, "max depth": 10, + "coordinates":[[0,0],[0,10],[5,10],[5,0]], + "temperature models":[{"model":"uniform", "temperature":293}], + "composition models":[{"model":"uniform", "compositions":[1]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[0,30,0]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"oceanic plate", "name":"OP", "min depth":0, "max depth": 10, + "coordinates":[[5,0],[5,10],[10,10],[10,0]], + "temperature models":[{"model":"uniform", "temperature":293}], + "composition models":[{"model":"uniform", "compositions":[2]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[0,0,45]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"fault", "name":"Fault", "min depth":0, "max depth": 10, + "coordinates":[[0,3],[10,3]], "dip point":[0,0], + "segments":[{"length":10, "thickness":[1], "angle":[45]}], + "temperature models":[{"model":"uniform", "temperature":293}], + "composition models":[{"model":"uniform", "compositions":[3]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[60,60,60]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"plume", + "name":"Plume", + "coordinates":[[3, 0],[3.7, 0],[5.5, 0],[4.5, 0],[4, 0]], + "cross section depths":[0, 1, 2.5, 5, 7.5], + "semi-major axis":[0.5, 0.7, 0.3, 0.8, 1], + "eccentricity":[0, 0, 0, 0, 0], + "rotation angles":[0, 0, 0, 0, 0], + "temperature models":[{"model":"uniform", "min depth": 10, "max depth":20, "temperature":1800}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.5], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[0,90,90]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"subducting plate", "name":"SP", "min depth":0, "max depth": 10, + "coordinates":[[0,6],[10,6]], "dip point":[0,0], + "segments":[{"length":10, "thickness":[1], "angle":[45]}], + "temperature models":[{"model":"uniform", "temperature":150}], + "composition models":[{"model":"uniform", "compositions":[5]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[30,30,60]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + } + + ] +} \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1/screen-output.log b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1/screen-output.log new file mode 100644 index 00000000000..4c039fb16fd --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1/screen-output.log @@ -0,0 +1,7 @@ +# x y z d g T c0 c1 c2 c3 c4 c5 gs0-0 gm0-0[0:0] gm0-0[0:1] gm0-0[0:2] gm0-0[1:0] gm0-0[1:1] gm0-0[1:2] gm0-0[2:0] gm0-0[2:1] gm0-0[2:2] gs1-0 gm1-0[0:0] gm1-0[0:1] gm1-0[0:2] gm1-0[1:0] gm1-0[1:1] gm1-0[1:2] gm1-0[2:0] gm1-0[2:1] gm1-0[2:2] tag +5 5 0 15 293 1 0 0 0 0 0 1 0.499857 -0.0018567 -0.023828 -0.000554464 -0.999508 0.0313571 -0.0119373 -0.0313217 -0.999224 0 0 0 0 0 0 0 0 0 0 0 +1 5 0 5 293 0 1 0 0 0 0 1 0.499473 -0.00264771 -0.0458424 -0.00146095 -0.999978 -0.005915 -0.0229129 0.00604271 -0.998931 0 0 0 0 0 0 0 0 0 0 1 +7 5 0 5 293 0 0 1 0 0 0 1 0.499912 -0.00455493 0.0182169 -0.00222068 -0.99997 -0.00626999 0.00912247 0.00618798 -0.999814 0 0 0 0 0 0 0 0 0 0 2 +5 3 0 0.1 293 0 0 0 1 0 0 1 0.999529 -0.0039371 -0.0290701 -0.00342152 -0.825622 0.0162258 -0.0291353 -0.0161085 -0.825165 0 1 0 0 0 1 0 0 0 1 3 +4.5 0 0 15 1800 1 0 0 0 0 0 1 0.499757 -0.000725128 0.0311578 0.000175418 -0.999404 -0.0345134 0.0155821 0.0345076 -0.998918 0 0 0 0 0 0 0 0 0 0 4 +5 6 0 0.1 150 0 0 0 0 0 1 1 0.999996 -0.00262365 0.000402509 -0.0025966 -0.824507 -0.0517783 0.000550654 0.0517769 -0.824511 0 1 0 0 0 1 0 0 0 1 5 diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000.dat b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000.dat new file mode 100644 index 00000000000..99dd6303dba --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000.dat @@ -0,0 +1,14 @@ +# This is a comment in the data +# file. +# Now define parameters: +# dim = 3 +# compositions = 6 +# grain compositions = 2 +# number of grains = 1 +# x y z d c1 c2 c3 c4 c5 c6 +5 5 0 15 +1 5 0 5 +7 5 0 5 +5 3 0 0.1 +4.5 0 0 15 +5 6 0 0.1 \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000.wb b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000.wb new file mode 100644 index 00000000000..479bce67583 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000.wb @@ -0,0 +1,80 @@ +{ + "version": "1.0", + "coordinate system":{"model":"cartesian"}, + "random number seed":1000, + "features": + [ + { + "model":"mantle layer", "name":"Mantle", "min depth":10, "max depth": 20, + "coordinates":[[0,0],[0,10],[10,10],[10,0]], + "temperature models":[{"model":"uniform", "temperature":293}], + "composition models":[{"model":"uniform", "compositions":[0]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[0,0,0]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"continental plate", "name":"CP", "min depth":0, "max depth": 10, + "coordinates":[[0,0],[0,10],[5,10],[5,0]], + "temperature models":[{"model":"uniform", "temperature":293}], + "composition models":[{"model":"uniform", "compositions":[1]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[0,30,0]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"oceanic plate", "name":"OP", "min depth":0, "max depth": 10, + "coordinates":[[5,0],[5,10],[10,10],[10,0]], + "temperature models":[{"model":"uniform", "temperature":293}], + "composition models":[{"model":"uniform", "compositions":[2]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[0,0,45]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"fault", "name":"Fault", "min depth":0, "max depth": 10, + "coordinates":[[0,3],[10,3]], "dip point":[0,0], + "segments":[{"length":10, "thickness":[1], "angle":[45]}], + "temperature models":[{"model":"uniform", "temperature":293}], + "composition models":[{"model":"uniform", "compositions":[3]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[60,60,60]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"plume", + "name":"Plume", + "coordinates":[[3, 0],[3.7, 0],[5.5, 0],[4.5, 0],[4, 0]], + "cross section depths":[0, 1, 2.5, 5, 7.5], + "semi-major axis":[0.5, 0.7, 0.3, 0.8, 1], + "eccentricity":[0, 0, 0, 0, 0], + "rotation angles":[0, 0, 0, 0, 0], + "temperature models":[{"model":"uniform", "min depth": 10, "max depth":20, "temperature":1800}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.5], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[0,90,90]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + }, + + { + "model":"subducting plate", "name":"SP", "min depth":0, "max depth": 10, + "coordinates":[[0,6],[10,6]], "dip point":[0,0], + "segments":[{"length":10, "thickness":[1], "angle":[45]}], + "temperature models":[{"model":"uniform", "temperature":150}], + "composition models":[{"model":"uniform", "compositions":[5]}], + "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis Euler angles z-x-z": [[30,30,60]]}, + {"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], + "deflections": [0.001], "normalize grain sizes": [true], "basis rotation matrices": [[[-0.5,0,0],[0,1,0],[0,0,-1]]]}] + } + + ] +} \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000/screen-output.log b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000/screen-output.log new file mode 100644 index 00000000000..7956bb5c0ad --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/random_uniform_distribution_deflected_asrotation_seed1000/screen-output.log @@ -0,0 +1,7 @@ +# x y z d g T c0 c1 c2 c3 c4 c5 gs0-0 gm0-0[0:0] gm0-0[0:1] gm0-0[0:2] gm0-0[1:0] gm0-0[1:1] gm0-0[1:2] gm0-0[2:0] gm0-0[2:1] gm0-0[2:2] gs1-0 gm1-0[0:0] gm1-0[0:1] gm1-0[0:2] gm1-0[1:0] gm1-0[1:1] gm1-0[1:2] gm1-0[2:0] gm1-0[2:1] gm1-0[2:2] tag +5 5 0 15 293 1 0 0 0 0 0 1 0.499991 -0.00528206 -0.00316564 -0.00269775 -0.999302 -0.0369657 -0.00148409 0.0369821 -0.999312 0 0 0 0 0 0 0 0 0 0 0 +1 5 0 5 293 0 1 0 0 0 0 1 0.499984 -0.000140805 -0.00798551 -0.000308283 -0.998222 -0.0596069 -0.00398146 0.0596099 -0.99819 0 0 0 0 0 0 0 0 0 0 1 +7 5 0 5 293 0 0 1 0 0 0 1 0.499796 -0.00317139 0.0283707 -0.00140799 -0.999917 -0.0125586 0.0142041 0.0124735 -0.999519 0 0 0 0 0 0 0 0 0 0 2 +5 3 0 0.1 293 0 0 0 1 0 0 1 0.999858 -0.00458949 -0.0154063 -0.00475835 -0.825733 -0.00998195 -0.015355 0.0100607 -0.825615 0 1 0 0 0 1 0 0 0 1 3 +4.5 0 0 15 1800 1 0 0 0 0 0 1 0.499936 -0.00455961 -0.0152841 -0.00258492 -0.999181 -0.0401272 -0.00754431 0.0402011 -0.999078 0 0 0 0 0 0 0 0 0 0 4 +5 6 0 0.1 150 0 0 0 0 0 1 1 0.999991 -0.00293585 0.00292161 -0.0029854 -0.8257 0.0156096 0.00287097 -0.015619 -0.8257 0 1 0 0 0 1 0 0 0 1 5 diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1.dat b/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1.dat deleted file mode 100644 index d0c093e2ecb..00000000000 --- a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1.dat +++ /dev/null @@ -1,20 +0,0 @@ -# This is a comment in the data -# file. -# Now define parameters: -# dim = 3 -# compositions = 5 -# grain compositions = 1 -# number of grains = 1 -# x y z d c1 c2 c3 c4 -300e3 500e3 0 50e3 -1400e3 500e3 0 50e3 -1600e3 500e3 0 50e3 -1800e3 500e3 0 50e3 -500e3 500e3 0 300e3 -2000e3 500e3 0 400e3 -1500e3 500e3 0 50e3 -1400e3 500e3 0 200e3 -950e3 500e3 0 50e3 -1050e3 500e3 0 50e3 -950e3 500e3 0 210e3 -1050e3 500e3 0 210e3 diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1.wb b/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1.wb deleted file mode 100644 index 63e3fa94aec..00000000000 --- a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1.wb +++ /dev/null @@ -1,54 +0,0 @@ -{ - "version": "0.6", - "coordinate system":{"model":"cartesian"}, - "random number seed":1, - "features": - [ - { - "model":"continental plate", "name":"Overriding Plate", "max depth":100e3, - "coordinates":[[0,0],[0,1000e3],[1500e3,1000e3],[1500e3,0]], - "temperature models":[{"model":"uniform", "temperature":293}], - "composition models":[{"model":"uniform", "compositions":[0]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.1]}] - }, - - { - "model":"oceanic plate", "name":"Subducting Plate", "max depth":100e3, - "coordinates":[[1500e3,0],[1500e3,1000e3],[2500e3,1000e3],[2500e3,0]], - "temperature models":[{"model":"uniform", "temperature":293}], - "composition models":[{"model":"uniform", "compositions":[1]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.2]}] - }, - - { - "model":"mantle layer", "name":"Mantle", "min depth":100e3, - "coordinates":[[0,0],[0,1000e3],[2500e3,1000e3],[2500e3,0]], - "temperature models":[{"model":"uniform", "temperature":293}], - "composition models":[{"model":"uniform", "compositions":[2]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.3]}] - }, - - { - "model":"subducting plate", "name":"Slab", "min depth":0e3, - "coordinates":[[1500e3,0],[1500e3,500e3],[1500e3,1000e3]], "dip point":[10, 10], - "segments":[{"length":500e3, "thickness":[100e3], "angle":[50]}], - "temperature models":[{"model":"uniform", "temperature":10}], - "composition models":[{"model":"uniform", "compositions":[3]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.4]}] - }, - - { - "model":"fault", "name":"Fault", "min depth":0e3, - "coordinates":[[1000e3,0],[1000e3,500e3],[1000e3,1000e3]], "dip point":[10, 10], - "segments":[{"length":200e3, "thickness":[200e3], "angle":[90]}], - "temperature models":[{"model":"uniform", "temperature":10}], - "composition models":[{"model":"uniform", "compositions":[4]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.5]}] - } - ] -} \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1/screen-output.log b/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1/screen-output.log deleted file mode 100644 index e797cc6a96a..00000000000 --- a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1/screen-output.log +++ /dev/null @@ -1,13 +0,0 @@ -# x y z d g T c0 c1 c2 c3 c4 gs0-0 gm0-0[0:0] gm0-0[0:1] gm0-0[0:2] gm0-0[1:0] gm0-0[1:1] gm0-0[1:2] gm0-0[2:0] gm0-0[2:1] gm0-0[2:2] tag -300e3 500e3 0 50e3 293 1 0 0 0 0 1 -0.800914 -0.591593 -0.0924877 0.566088 -0.798439 0.205035 -0.195143 0.111859 0.974375 0 -1400e3 500e3 0 50e3 293 1 0 0 0 0 1 -0.955406 -0.180561 0.233658 0.103564 -0.945899 -0.307488 0.276538 -0.269578 0.922418 0 -1600e3 500e3 0 50e3 293 0 1 0 0 0 1 -0.298222 -0.867278 -0.398613 0.862937 -0.423456 0.275724 -0.407925 -0.261751 0.874691 1 -1800e3 500e3 0 50e3 293 0 1 0 0 0 1 -0.684602 -0.394635 0.612848 0.550037 -0.831389 0.0790752 0.478309 0.391224 0.786234 1 -500e3 500e3 0 300e3 293 0 0 1 0 0 1 -0.422225 -0.823232 0.379494 0.267122 -0.513044 -0.81574 0.86624 -0.243055 0.436523 2 -2000e3 500e3 0 400e3 293 0 0 1 0 0 1 -0.191783 -0.93082 -0.311117 0.966116 -0.234847 0.107082 -0.172739 -0.280039 0.94432 2 -1500e3 500e3 0 50e3 10 0 0 0 1 0 1 -0.46567 -0.645243 0.60565 0.87519 -0.437189 0.207144 0.131125 0.62652 0.768296 3 -1400e3 500e3 0 200e3 10 0 0 0 1 0 1 -0.9776 -0.197078 0.0738833 0.155499 -0.912865 -0.377488 0.14184 -0.357544 0.923062 3 -950e3 500e3 0 50e3 10 0 0 0 0 1 1 0.407186 -0.895089 -0.181701 0.733709 0.202085 0.648716 -0.54394 -0.397464 0.739021 4 -1050e3 500e3 0 50e3 10 0 0 0 0 1 1 -0.728705 -0.338593 -0.595268 -0.202176 -0.724117 0.659379 -0.654305 0.600841 0.459212 4 -950e3 500e3 0 210e3 293 0 0 1 0 0 1 -0.815387 -0.468934 -0.339477 0.54922 -0.441202 -0.709717 0.183032 -0.765142 0.617298 2 -1050e3 500e3 0 210e3 293 0 0 1 0 0 1 -0.328436 -0.805474 -0.493297 0.917498 -0.148023 -0.36917 0.224338 -0.573848 0.787637 2 diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000.dat b/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000.dat deleted file mode 100644 index d0c093e2ecb..00000000000 --- a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000.dat +++ /dev/null @@ -1,20 +0,0 @@ -# This is a comment in the data -# file. -# Now define parameters: -# dim = 3 -# compositions = 5 -# grain compositions = 1 -# number of grains = 1 -# x y z d c1 c2 c3 c4 -300e3 500e3 0 50e3 -1400e3 500e3 0 50e3 -1600e3 500e3 0 50e3 -1800e3 500e3 0 50e3 -500e3 500e3 0 300e3 -2000e3 500e3 0 400e3 -1500e3 500e3 0 50e3 -1400e3 500e3 0 200e3 -950e3 500e3 0 50e3 -1050e3 500e3 0 50e3 -950e3 500e3 0 210e3 -1050e3 500e3 0 210e3 diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000.wb b/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000.wb deleted file mode 100644 index 9372d2ea50a..00000000000 --- a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000.wb +++ /dev/null @@ -1,54 +0,0 @@ -{ - "version": "0.6", - "coordinate system":{"model":"cartesian"}, - "random number seed":1000, - "features": - [ - { - "model":"continental plate", "name":"Overriding Plate", "max depth":100e3, - "coordinates":[[0,0],[0,1000e3],[1500e3,1000e3],[1500e3,0]], - "temperature models":[{"model":"uniform", "temperature":293}], - "composition models":[{"model":"uniform", "compositions":[0]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.1]}] - }, - - { - "model":"oceanic plate", "name":"Subducting Plate", "max depth":100e3, - "coordinates":[[1500e3,0],[1500e3,1000e3],[2500e3,1000e3],[2500e3,0]], - "temperature models":[{"model":"uniform", "temperature":293}], - "composition models":[{"model":"uniform", "compositions":[1]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.2]}] - }, - - { - "model":"mantle layer", "name":"Mantle", "min depth":100e3, - "coordinates":[[0,0],[0,1000e3],[2500e3,1000e3],[2500e3,0]], - "temperature models":[{"model":"uniform", "temperature":293}], - "composition models":[{"model":"uniform", "compositions":[2]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.3]}] - }, - - { - "model":"subducting plate", "name":"Slab", "min depth":0e3, - "coordinates":[[1500e3,0],[1500e3,500e3],[1500e3,1000e3]], "dip point":[10, 10], - "segments":[{"length":500e3, "thickness":[100e3], "angle":[50]}], - "temperature models":[{"model":"uniform", "temperature":10}], - "composition models":[{"model":"uniform", "compositions":[3]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.4]}] - }, - - { - "model":"fault", "name":"Fault", "min depth":0e3, - "coordinates":[[1000e3,0],[1000e3,500e3],[1000e3,1000e3]], "dip point":[10, 10], - "segments":[{"length":200e3, "thickness":[200e3], "angle":[90]}], - "temperature models":[{"model":"uniform", "temperature":10}], - "composition models":[{"model":"uniform", "compositions":[4]}], - "grains models": [{"model":"random uniform distribution deflected", "compositions":[0], "grain sizes":[-1], - "normalize grain sizes":[true], "deflections":[0.5]}] - } - ] -} \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000/screen-output.log b/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000/screen-output.log deleted file mode 100644 index 3ecc838490f..00000000000 --- a/contrib/world_builder/tests/gwb-dat/random_uniform_texture_all_features_seed1000/screen-output.log +++ /dev/null @@ -1,13 +0,0 @@ -# x y z d g T c0 c1 c2 c3 c4 gs0-0 gm0-0[0:0] gm0-0[0:1] gm0-0[0:2] gm0-0[1:0] gm0-0[1:1] gm0-0[1:2] gm0-0[2:0] gm0-0[2:1] gm0-0[2:2] tag -300e3 500e3 0 50e3 293 1 0 0 0 0 1 -0.990972 -0.127666 -0.0409292 0.129618 -0.990341 -0.0492332 -0.0342484 -0.0540939 0.997948 0 -1400e3 500e3 0 50e3 293 1 0 0 0 0 1 -0.863294 -0.503742 0.0311121 0.479282 -0.798937 0.363301 -0.158154 0.328547 0.931152 0 -1600e3 500e3 0 50e3 293 0 1 0 0 0 1 -0.55876 -0.762818 -0.325417 0.720801 -0.252629 -0.645465 0.410162 -0.595221 0.690999 1 -1800e3 500e3 0 50e3 293 0 1 0 0 0 1 -0.994372 -0.0277444 0.102248 0.0963064 -0.638921 0.76322 0.0441535 0.768772 0.637997 1 -500e3 500e3 0 300e3 293 0 0 1 0 0 1 -0.88545 -0.216658 -0.411142 0.0819602 -0.943615 0.32074 -0.45745 0.250302 0.853281 2 -2000e3 500e3 0 400e3 293 0 0 1 0 0 1 -0.505877 -0.721112 -0.473377 0.730473 -0.65 0.209545 -0.4588 -0.239785 0.855573 2 -1500e3 500e3 0 50e3 10 0 0 0 1 0 1 0.277217 -0.320014 -0.905948 0.59042 0.800607 -0.102137 0.757994 -0.506575 0.410885 3 -1400e3 500e3 0 200e3 10 0 0 0 1 0 1 0.784316 -0.497925 -0.370026 0.616522 0.559361 0.55409 -0.0689168 -0.662711 0.745697 3 -950e3 500e3 0 50e3 10 0 0 0 0 1 1 -0.459173 -0.634613 -0.621632 -0.305909 -0.544008 0.781329 -0.834014 0.548928 0.05566 4 -1050e3 500e3 0 50e3 10 0 0 0 0 1 1 0.615449 -0.728911 0.299852 0.271936 0.553452 0.787237 -0.739779 -0.402964 0.538839 4 -950e3 500e3 0 210e3 293 0 0 1 0 0 1 -0.577637 -0.64995 -0.493863 0.410363 -0.754211 0.51261 -0.705647 0.0934395 0.702375 2 -1050e3 500e3 0 210e3 293 0 0 1 0 0 1 0.248301 -0.967981 0.0368649 0.636139 0.134242 -0.759807 0.73053 0.212112 0.649103 2 diff --git a/contrib/world_builder/tests/gwb-dat/slab_complex_spherical.wb b/contrib/world_builder/tests/gwb-dat/slab_complex_spherical.wb index 49cf69cea24..d8df77734da 100644 --- a/contrib/world_builder/tests/gwb-dat/slab_complex_spherical.wb +++ b/contrib/world_builder/tests/gwb-dat/slab_complex_spherical.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin at end segment"}, "cross section":[[0,0],[10,0]], "features": diff --git a/contrib/world_builder/tests/gwb-dat/slab_interpolation_180pm_CMS.wb b/contrib/world_builder/tests/gwb-dat/slab_interpolation_180pm_CMS.wb index c7ae9ddc7b7..3b642267fb9 100644 --- a/contrib/world_builder/tests/gwb-dat/slab_interpolation_180pm_CMS.wb +++ b/contrib/world_builder/tests/gwb-dat/slab_interpolation_180pm_CMS.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"begin segment"}, "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,0],[10,0]], diff --git a/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_CMS.wb b/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_CMS.wb index 5522cdfd11e..7df3d6580aa 100644 --- a/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_CMS.wb +++ b/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_CMS.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,50e3],[50e3,0]], "interpolation":"continuous monotone spline", diff --git a/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_curved_CMS.wb b/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_curved_CMS.wb index 36ebef7f87d..590802d1534 100644 --- a/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_curved_CMS.wb +++ b/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_curved_CMS.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section":[[0,50e3],[50e3,0]], "interpolation":"continuous monotone spline", "features": diff --git a/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_curved_none.wb b/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_curved_none.wb index 2c58e6b758e..09dfdd05776 100644 --- a/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_curved_none.wb +++ b/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_curved_none.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section":[[0,50e3],[50e3,0]], "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_none.wb b/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_none.wb index b5d0ef15e67..8002a112177 100644 --- a/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_none.wb +++ b/contrib/world_builder/tests/gwb-dat/slab_interpolation_simple_none.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section":[[0,50e3],[50e3,0]], "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance.dat b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance.dat new file mode 100644 index 00000000000..184a1d3316d --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance.dat @@ -0,0 +1,18 @@ +# 2 profiles across a slab, one at 500 km depth +# and one at 200 km depth +# Now define parameters: +# dim = 2 +# compositions = 0 +# x z d T +8000e3 0 500e3 +8050e3 0 500e3 +8100e3 0 500e3 +8150e3 0 500e3 +8200e3 0 500e3 +8300e3 0 500e3 +7800e3 0 200e3 +7850e3 0 200e3 +7900e3 0 200e3 +7950e3 0 200e3 +8000e3 0 200e3 +8200e3 0 200e3 \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance.wb b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance.wb new file mode 100644 index 00000000000..85811dfbbc1 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance.wb @@ -0,0 +1,163 @@ +{ + "version":"1.0", + "coordinate system":{"model":"cartesian"}, + "gravity model":{"model":"uniform", "magnitude":10}, + "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, + "potential mantle temperature":1673, "thermal expansion coefficient":3.1e-5, + "specific heat":1000, "thermal diffusivity":1.0e-6, + "features": + [ + { + "model": "oceanic plate", + "name": "sp plate", + "max depth": 150000.0, + "min depth": -100000.0, + "coordinates": [ + [ + 0.0, + -1000e3 + ], + [ + 0.0, + 1000e3 + ], + [ + 7500000.0, + 1000e3 + ], + [ + 7500000.0, + -1000e3 + ] + ], + "temperature models": [ + { + "model": "plate model", + "min depth": -10000.0, + "max depth": 150000.0, + "spreading velocity": 0.05, + "ridge coordinates": [ + [ + [ + 0, + -1000.0 + ], + [ + 0, + 1000.0 + ] + ] + ] + } + ], + "composition models": [ + { + "model": "uniform", + "min depth": -10000.0, + "max depth": 7500.0, + "compositions": [ + 0 + ] + }, + { + "model": "uniform", + "min depth": 7500.0, + "max depth": 35200.0, + "compositions": [ + 1 + ] + } + ] + }, + { + "model": "subducting plate", + "name": "initial slab", + "coordinates": [ + [ + 7500000.0, + -1000e3 + ], + [ + 7500000.0, + 1000e3 + ] + ], + "dip point": [ + 40000000.0, + 0.0 + ], + "segments": [ + { + "length": 1000000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 0, + 80 + ], + "composition models": [ + { + "model": "uniform", + "compositions": [ + 0 + ], + "max distance slab top": 7500.0 + }, + { + "model": "uniform", + "compositions": [ + 1 + ], + "min distance slab top": 7500.0, + "max distance slab top": 35200.0 + } + ] + }, + { + "length": 300000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 80, + 80 + ] + } + ], + "temperature models": [ + { + "model": "mass conserving", + "density": 3300, + "thermal conductivity": 3.3, + "adiabatic heating": true, + "spreading velocity": 0.05, + "subducting velocity": 0.02, + "ridge coordinates": [ + [ + [ + 0, + -1000.0e3 + ], + [ + 0, + 1000.0e3 + ] + ] + ], + "coupling depth": 50000.0, + "taper distance": 100000.0, + "min distance slab top": -100000.0, + "max distance slab top": 150000.0, + "reference model name": "plate model" + } + ] + } + ] +} diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance/screen-output.log b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance/screen-output.log new file mode 100644 index 00000000000..cefd7498196 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance/screen-output.log @@ -0,0 +1,13 @@ +# x z d T tag +8000e3 0 500e3 1953.49 1 +8050e3 0 500e3 1658.69 1 +8100e3 0 500e3 1356.3 1 +8150e3 0 500e3 1010.07 1 +8200e3 0 500e3 1537.87 1 +8300e3 0 500e3 1953.49 -1 +7800e3 0 200e3 1485.07 1 +7850e3 0 200e3 1276.68 1 +7900e3 0 200e3 1024.7 1 +7950e3 0 200e3 734.792 1 +8000e3 0 200e3 1430.21 1 +8200e3 0 200e3 1780.01 -1 diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1.dat b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1.dat new file mode 100644 index 00000000000..184a1d3316d --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1.dat @@ -0,0 +1,18 @@ +# 2 profiles across a slab, one at 500 km depth +# and one at 200 km depth +# Now define parameters: +# dim = 2 +# compositions = 0 +# x z d T +8000e3 0 500e3 +8050e3 0 500e3 +8100e3 0 500e3 +8150e3 0 500e3 +8200e3 0 500e3 +8300e3 0 500e3 +7800e3 0 200e3 +7850e3 0 200e3 +7900e3 0 200e3 +7950e3 0 200e3 +8000e3 0 200e3 +8200e3 0 200e3 \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1.wb b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1.wb new file mode 100644 index 00000000000..8e7565fac81 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1.wb @@ -0,0 +1,163 @@ +{ + "version":"1.0", + "coordinate system":{"model":"cartesian"}, + "gravity model":{"model":"uniform", "magnitude":10}, + "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, + "potential mantle temperature":1673, "thermal expansion coefficient":3.1e-5, + "specific heat":1000, "thermal diffusivity":1.0e-6, + "features": + [ + { + "model": "oceanic plate", + "name": "sp plate", + "max depth": 150000.0, + "min depth": -100000.0, + "coordinates": [ + [ + 0.0, + -1000e3 + ], + [ + 0.0, + 1000e3 + ], + [ + 12000000.0, + 1000e3 + ], + [ + 12000000.0, + -1000e3 + ] + ], + "temperature models": [ + { + "model": "plate model", + "min depth": -10000.0, + "max depth": 150000.0, + "spreading velocity": 0.15, + "ridge coordinates": [ + [ + [ + 0, + -1000.0 + ], + [ + 0, + 1000.0 + ] + ] + ] + } + ], + "composition models": [ + { + "model": "uniform", + "min depth": -10000.0, + "max depth": 7500.0, + "compositions": [ + 0 + ] + }, + { + "model": "uniform", + "min depth": 7500.0, + "max depth": 35200.0, + "compositions": [ + 1 + ] + } + ] + }, + { + "model": "subducting plate", + "name": "initial slab", + "coordinates": [ + [ + 12000000.0, + -1000e3 + ], + [ + 12000000.0, + 1000e3 + ] + ], + "dip point": [ + 40000000.0, + 0.0 + ], + "segments": [ + { + "length": 1000000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 0, + 80 + ], + "composition models": [ + { + "model": "uniform", + "compositions": [ + 0 + ], + "max distance slab top": 7500.0 + }, + { + "model": "uniform", + "compositions": [ + 1 + ], + "min distance slab top": 7500.0, + "max distance slab top": 35200.0 + } + ] + }, + { + "length": 300000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 80, + 80 + ] + } + ], + "temperature models": [ + { + "model": "mass conserving", + "density": 3300, + "thermal conductivity": 3.3, + "adiabatic heating": true, + "spreading velocity": 0.15, + "subducting velocity": 0.1, + "ridge coordinates": [ + [ + [ + 0, + -1000.0e3 + ], + [ + 0, + 1000.0e3 + ] + ] + ], + "coupling depth": 50000.0, + "taper distance": 100000.0, + "min distance slab top": -100000.0, + "max distance slab top": 150000.0, + "reference model name": "plate model" + } + ] + } + ] +} diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1/screen-output.log b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1/screen-output.log new file mode 100644 index 00000000000..5a880c28e4e --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_advance_1/screen-output.log @@ -0,0 +1,13 @@ +# x z d T tag +8000e3 0 500e3 1953.49 -1 +8050e3 0 500e3 1953.49 -1 +8100e3 0 500e3 1953.49 -1 +8150e3 0 500e3 1953.49 -1 +8200e3 0 500e3 1953.49 -1 +8300e3 0 500e3 1953.49 -1 +7800e3 0 200e3 1780.01 -1 +7850e3 0 200e3 1780.01 -1 +7900e3 0 200e3 1780.01 -1 +7950e3 0 200e3 1780.01 -1 +8000e3 0 200e3 1780.01 -1 +8200e3 0 200e3 1780.01 -1 diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat.dat b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat.dat new file mode 100644 index 00000000000..184a1d3316d --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat.dat @@ -0,0 +1,18 @@ +# 2 profiles across a slab, one at 500 km depth +# and one at 200 km depth +# Now define parameters: +# dim = 2 +# compositions = 0 +# x z d T +8000e3 0 500e3 +8050e3 0 500e3 +8100e3 0 500e3 +8150e3 0 500e3 +8200e3 0 500e3 +8300e3 0 500e3 +7800e3 0 200e3 +7850e3 0 200e3 +7900e3 0 200e3 +7950e3 0 200e3 +8000e3 0 200e3 +8200e3 0 200e3 \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat.wb b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat.wb new file mode 100644 index 00000000000..234d18cbd61 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat.wb @@ -0,0 +1,163 @@ +{ + "version":"1.0", + "coordinate system":{"model":"cartesian"}, + "gravity model":{"model":"uniform", "magnitude":10}, + "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, + "potential mantle temperature":1673, "thermal expansion coefficient":3.1e-5, + "specific heat":1000, "thermal diffusivity":1.0e-6, + "features": + [ + { + "model": "oceanic plate", + "name": "sp plate", + "max depth": 150000.0, + "min depth": -100000.0, + "coordinates": [ + [ + 0.0, + -1000e3 + ], + [ + 0.0, + 1000e3 + ], + [ + 7500000.0, + 1000e3 + ], + [ + 7500000.0, + -1000e3 + ] + ], + "temperature models": [ + { + "model": "plate model", + "min depth": -10000.0, + "max depth": 150000.0, + "spreading velocity": 0.05, + "ridge coordinates": [ + [ + [ + 0, + -1000.0 + ], + [ + 0, + 1000.0 + ] + ] + ] + } + ], + "composition models": [ + { + "model": "uniform", + "min depth": -10000.0, + "max depth": 7500.0, + "compositions": [ + 0 + ] + }, + { + "model": "uniform", + "min depth": 7500.0, + "max depth": 35200.0, + "compositions": [ + 1 + ] + } + ] + }, + { + "model": "subducting plate", + "name": "initial slab", + "coordinates": [ + [ + 7500000.0, + -1000e3 + ], + [ + 7500000.0, + 1000e3 + ] + ], + "dip point": [ + 40000000.0, + 0.0 + ], + "segments": [ + { + "length": 1000000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 0, + 80 + ], + "composition models": [ + { + "model": "uniform", + "compositions": [ + 0 + ], + "max distance slab top": 7500.0 + }, + { + "model": "uniform", + "compositions": [ + 1 + ], + "min distance slab top": 7500.0, + "max distance slab top": 35200.0 + } + ] + }, + { + "length": 300000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 80, + 80 + ] + } + ], + "temperature models": [ + { + "model": "mass conserving", + "density": 3300, + "thermal conductivity": 3.3, + "adiabatic heating": true, + "spreading velocity": 0.05, + "subducting velocity": 0.1, + "ridge coordinates": [ + [ + [ + 0, + -1000.0e3 + ], + [ + 0, + 1000.0e3 + ] + ] + ], + "coupling depth": 50000.0, + "taper distance": 100000.0, + "min distance slab top": -100000.0, + "max distance slab top": 150000.0, + "reference model name": "plate model" + } + ] + } + ] +} diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat/screen-output.log b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat/screen-output.log new file mode 100644 index 00000000000..ff5bbbaeaad --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat/screen-output.log @@ -0,0 +1,13 @@ +# x z d T tag +8000e3 0 500e3 1953.49 1 +8050e3 0 500e3 1641.46 1 +8100e3 0 500e3 1319.64 1 +8150e3 0 500e3 949.56 1 +8200e3 0 500e3 1524.33 1 +8300e3 0 500e3 1953.49 -1 +7800e3 0 200e3 1480.6 1 +7850e3 0 200e3 1265.16 1 +7900e3 0 200e3 1004.25 1 +7950e3 0 200e3 703.495 1 +8000e3 0 200e3 1405.63 1 +8200e3 0 200e3 1780.01 -1 diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1.dat b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1.dat new file mode 100644 index 00000000000..184a1d3316d --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1.dat @@ -0,0 +1,18 @@ +# 2 profiles across a slab, one at 500 km depth +# and one at 200 km depth +# Now define parameters: +# dim = 2 +# compositions = 0 +# x z d T +8000e3 0 500e3 +8050e3 0 500e3 +8100e3 0 500e3 +8150e3 0 500e3 +8200e3 0 500e3 +8300e3 0 500e3 +7800e3 0 200e3 +7850e3 0 200e3 +7900e3 0 200e3 +7950e3 0 200e3 +8000e3 0 200e3 +8200e3 0 200e3 \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1.wb b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1.wb new file mode 100644 index 00000000000..d71a1fe15c0 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1.wb @@ -0,0 +1,163 @@ +{ + "version":"1.0", + "coordinate system":{"model":"cartesian"}, + "gravity model":{"model":"uniform", "magnitude":10}, + "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, + "potential mantle temperature":1673, "thermal expansion coefficient":3.1e-5, + "specific heat":1000, "thermal diffusivity":1.0e-6, + "features": + [ + { + "model": "oceanic plate", + "name": "sp plate", + "max depth": 150000.0, + "min depth": -100000.0, + "coordinates": [ + [ + 0.0, + -1000e3 + ], + [ + 0.0, + 1000e3 + ], + [ + 4000000.0, + 1000e3 + ], + [ + 4000000.0, + -1000e3 + ] + ], + "temperature models": [ + { + "model": "plate model", + "min depth": -10000.0, + "max depth": 150000.0, + "spreading velocity": 0.05, + "ridge coordinates": [ + [ + [ + 0, + -1000.0 + ], + [ + 0, + 1000.0 + ] + ] + ] + } + ], + "composition models": [ + { + "model": "uniform", + "min depth": -10000.0, + "max depth": 7500.0, + "compositions": [ + 0 + ] + }, + { + "model": "uniform", + "min depth": 7500.0, + "max depth": 35200.0, + "compositions": [ + 1 + ] + } + ] + }, + { + "model": "subducting plate", + "name": "initial slab", + "coordinates": [ + [ + 4000000.0, + -1000e3 + ], + [ + 4000000.0, + 1000e3 + ] + ], + "dip point": [ + 40000000.0, + 0.0 + ], + "segments": [ + { + "length": 1000000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 0, + 80 + ], + "composition models": [ + { + "model": "uniform", + "compositions": [ + 0 + ], + "max distance slab top": 7500.0 + }, + { + "model": "uniform", + "compositions": [ + 1 + ], + "min distance slab top": 7500.0, + "max distance slab top": 35200.0 + } + ] + }, + { + "length": 300000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 80, + 80 + ] + } + ], + "temperature models": [ + { + "model": "mass conserving", + "density": 3300, + "thermal conductivity": 3.3, + "adiabatic heating": true, + "spreading velocity": 0.05, + "subducting velocity": 0.1, + "ridge coordinates": [ + [ + [ + 0, + -1000.0e3 + ], + [ + 0, + 1000.0e3 + ] + ] + ], + "coupling depth": 50000.0, + "taper distance": 100000.0, + "min distance slab top": -100000.0, + "max distance slab top": 150000.0, + "reference model name": "plate model" + } + ] + } + ] +} diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1/screen-output.log b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1/screen-output.log new file mode 100644 index 00000000000..5a880c28e4e --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_retreat_1/screen-output.log @@ -0,0 +1,13 @@ +# x z d T tag +8000e3 0 500e3 1953.49 -1 +8050e3 0 500e3 1953.49 -1 +8100e3 0 500e3 1953.49 -1 +8150e3 0 500e3 1953.49 -1 +8200e3 0 500e3 1953.49 -1 +8300e3 0 500e3 1953.49 -1 +7800e3 0 200e3 1780.01 -1 +7850e3 0 200e3 1780.01 -1 +7900e3 0 200e3 1780.01 -1 +7950e3 0 200e3 1780.01 -1 +8000e3 0 200e3 1780.01 -1 +8200e3 0 200e3 1780.01 -1 diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static.dat b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static.dat new file mode 100644 index 00000000000..184a1d3316d --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static.dat @@ -0,0 +1,18 @@ +# 2 profiles across a slab, one at 500 km depth +# and one at 200 km depth +# Now define parameters: +# dim = 2 +# compositions = 0 +# x z d T +8000e3 0 500e3 +8050e3 0 500e3 +8100e3 0 500e3 +8150e3 0 500e3 +8200e3 0 500e3 +8300e3 0 500e3 +7800e3 0 200e3 +7850e3 0 200e3 +7900e3 0 200e3 +7950e3 0 200e3 +8000e3 0 200e3 +8200e3 0 200e3 \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static.wb b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static.wb new file mode 100644 index 00000000000..1da08c5f405 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static.wb @@ -0,0 +1,163 @@ +{ + "version":"1.0", + "coordinate system":{"model":"cartesian"}, + "gravity model":{"model":"uniform", "magnitude":10}, + "cross section":[[0,0],[10000e3,0]],"surface temperature":273, "force surface temperature":true, + "potential mantle temperature":1673, "thermal expansion coefficient":3.1e-5, + "specific heat":1000, "thermal diffusivity":1.0e-6, + "features": + [ + { + "model": "oceanic plate", + "name": "sp plate", + "max depth": 150000.0, + "min depth": -100000.0, + "coordinates": [ + [ + 0.0, + -1000e3 + ], + [ + 0.0, + 1000e3 + ], + [ + 8000000.0, + 1000e3 + ], + [ + 8000000.0, + -1000e3 + ] + ], + "temperature models": [ + { + "model": "plate model", + "min depth": -10000.0, + "max depth": 150000.0, + "spreading velocity": 0.1, + "ridge coordinates": [ + [ + [ + 0, + -1000.0 + ], + [ + 0, + 1000.0 + ] + ] + ] + } + ], + "composition models": [ + { + "model": "uniform", + "min depth": -10000.0, + "max depth": 7500.0, + "compositions": [ + 0 + ] + }, + { + "model": "uniform", + "min depth": 7500.0, + "max depth": 35200.0, + "compositions": [ + 1 + ] + } + ] + }, + { + "model": "subducting plate", + "name": "initial slab", + "coordinates": [ + [ + 8000000.0, + -1000e3 + ], + [ + 8000000.0, + 1000e3 + ] + ], + "dip point": [ + 40000000.0, + 0.0 + ], + "segments": [ + { + "length": 1000000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 0, + 80 + ], + "composition models": [ + { + "model": "uniform", + "compositions": [ + 0 + ], + "max distance slab top": 7500.0 + }, + { + "model": "uniform", + "compositions": [ + 1 + ], + "min distance slab top": 7500.0, + "max distance slab top": 35200.0 + } + ] + }, + { + "length": 300000.0, + "thickness": [ + 300000.0 + ], + "top truncation": [ + -100000.0 + ], + "angle": [ + 80, + 80 + ] + } + ], + "temperature models": [ + { + "model": "mass conserving", + "density": 3300, + "thermal conductivity": 3.3, + "adiabatic heating": true, + "spreading velocity": 0.1, + "subducting velocity": 0.1, + "ridge coordinates": [ + [ + [ + 0, + -1000.0e3 + ], + [ + 0, + 1000.0e3 + ] + ] + ], + "coupling depth": 50000.0, + "taper distance": 100000.0, + "min distance slab top": -100000.0, + "max distance slab top": 150000.0, + "reference model name": "plate model" + } + ] + } + ] +} diff --git a/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static/screen-output.log b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static/screen-output.log new file mode 100644 index 00000000000..a4d27f98ef4 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/slab_temperature_trench_static/screen-output.log @@ -0,0 +1,13 @@ +# x z d T tag +8000e3 0 500e3 1953.49 -1 +8050e3 0 500e3 1953.49 -1 +8100e3 0 500e3 1953.49 -1 +8150e3 0 500e3 1953.49 -1 +8200e3 0 500e3 1953.49 -1 +8300e3 0 500e3 1953.49 -1 +7800e3 0 200e3 1780.01 -1 +7850e3 0 200e3 1780.01 -1 +7900e3 0 200e3 1780.01 -1 +7950e3 0 200e3 1780.01 -1 +8000e3 0 200e3 1780.01 1 +8200e3 0 200e3 1780.01 1 diff --git a/contrib/world_builder/tests/gwb-dat/smooth_composition_fault.wb b/contrib/world_builder/tests/gwb-dat/smooth_composition_fault.wb index 3db416f1e97..1649c1a03c2 100644 --- a/contrib/world_builder/tests/gwb-dat/smooth_composition_fault.wb +++ b/contrib/world_builder/tests/gwb-dat/smooth_composition_fault.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system": {"model": "spherical", "depth method": "starting point"}, "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/spherical_fault_interpolation_simple_none.wb b/contrib/world_builder/tests/gwb-dat/spherical_fault_interpolation_simple_none.wb index 7dcf1bb9493..4d21799ef48 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_fault_interpolation_simple_none.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_fault_interpolation_simple_none.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical","depth method":"starting point"}, "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/spherical_half_space_model_ridge.wb b/contrib/world_builder/tests/gwb-dat/spherical_half_space_model_ridge.wb index e79e7ca6e91..c014da9df28 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_half_space_model_ridge.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_half_space_model_ridge.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"spherical", "depth method":"begin at end segment"}, "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/spherical_mc_slab_and_half_space_plate_model.wb b/contrib/world_builder/tests/gwb-dat/spherical_mc_slab_and_half_space_plate_model.wb index 76ae2b82742..8a73f5362f3 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_mc_slab_and_half_space_plate_model.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_mc_slab_and_half_space_plate_model.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical","depth method":"begin at end segment", "radius":665e3}, "cross section":[[0,0],[45,0]],"surface temperature":273, "force surface temperature":true, "potential mantle temperature":1673, "thermal expansion coefficient":3.1e-5, @@ -21,7 +21,7 @@ {"length":700e3, "thickness":[300e3], "top truncation":[-300e3], "angle":[50,50]}, {"length":300e3, "thickness":[300e3], "top truncation":[-300e3], "angle":[50,10]}], "temperature models":[{"model":"mass conserving", "density":3300, "thermal conductivity":3.3, - "adiabatic heating":true, "plate velocity":0.03, "ridge coordinates": [[[45,-5],[45,5]]], + "adiabatic heating":true, "spreading velocity":0.03, "subducting velocity":0.03, "ridge coordinates": [[[45,-5],[45,5]]], "coupling depth":100e3, "taper distance":100e3, "min distance slab top":-300e3, "max distance slab top":300e3}] } diff --git a/contrib/world_builder/tests/gwb-dat/spherical_plate_cooling_model_ridge.wb b/contrib/world_builder/tests/gwb-dat/spherical_plate_cooling_model_ridge.wb index a9de7e1e729..4965470d2e4 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_plate_cooling_model_ridge.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_plate_cooling_model_ridge.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"spherical", "depth method":"begin at end segment"}, "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/spherical_ridge_distance_check.wb b/contrib/world_builder/tests/gwb-dat/spherical_ridge_distance_check.wb index b2a75f137a4..a325e7e6ca5 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_ridge_distance_check.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_ridge_distance_check.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"starting point"}, "gravity model":{"model":"uniform", "magnitude":10}, "surface temperature":273, "force surface temperature":true, diff --git a/contrib/world_builder/tests/gwb-dat/spherical_slab_A1.wb b/contrib/world_builder/tests/gwb-dat/spherical_slab_A1.wb index 8fddae64619..345d2cb6a10 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_slab_A1.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_slab_A1.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical","depth method":"starting point"}, "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/spherical_slab_A2.wb b/contrib/world_builder/tests/gwb-dat/spherical_slab_A2.wb index 8fddae64619..345d2cb6a10 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_slab_A2.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_slab_A2.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical","depth method":"starting point"}, "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_CMS.wb b/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_CMS.wb index dbf986fd4fe..5bd1f3f4589 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_CMS.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_CMS.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical","depth method":"starting point"}, "interpolation":"continuous monotone spline", "features": diff --git a/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_none.wb b/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_none.wb index 8fddae64619..345d2cb6a10 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_none.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_none.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical","depth method":"starting point"}, "features": [ diff --git a/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_subdiv.wb b/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_subdiv.wb index c568f9be462..d2e7f8e34d8 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_subdiv.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_slab_interpolation_simple_subdiv.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical","depth method":"starting point"}, "gravity model":{"model":"uniform", "magnitude":10}, "interpolation":"continuous monotone spline", diff --git a/contrib/world_builder/tests/gwb-dat/spherical_slab_plate_model.wb b/contrib/world_builder/tests/gwb-dat/spherical_slab_plate_model.wb index 1a9af19e3bf..9964ffffa8e 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_slab_plate_model.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_slab_plate_model.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical","depth method":"begin at end segment", "radius":665e3}, "cross section":[[0,0],[45,0]],"surface temperature":273, "force surface temperature":true, "potential mantle temperature":1673, "thermal expansion coefficient":3.1e-5, diff --git a/contrib/world_builder/tests/gwb-dat/spherical_variable_spreading.wb b/contrib/world_builder/tests/gwb-dat/spherical_variable_spreading.wb index 04969e0734b..8e093932694 100644 --- a/contrib/world_builder/tests/gwb-dat/spherical_variable_spreading.wb +++ b/contrib/world_builder/tests/gwb-dat/spherical_variable_spreading.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"starting point"}, "gravity model":{"model":"uniform", "magnitude":10}, "surface temperature":273, "force surface temperature":true, diff --git a/contrib/world_builder/tests/gwb-dat/testing_continent_no_coordinates.wb b/contrib/world_builder/tests/gwb-dat/testing_continent_no_coordinates.wb index 7e464458372..f8084fd9244 100644 --- a/contrib/world_builder/tests/gwb-dat/testing_continent_no_coordinates.wb +++ b/contrib/world_builder/tests/gwb-dat/testing_continent_no_coordinates.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[100e3,100e3],[400e3,500e3]], "maximum distance between coordinates": 5, diff --git a/contrib/world_builder/tests/gwb-dat/testing_fault_no_coordinates.wb b/contrib/world_builder/tests/gwb-dat/testing_fault_no_coordinates.wb index a21eda8ac0c..d56323d6a65 100644 --- a/contrib/world_builder/tests/gwb-dat/testing_fault_no_coordinates.wb +++ b/contrib/world_builder/tests/gwb-dat/testing_fault_no_coordinates.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[100e3,100e3],[400e3,500e3]], "maximum distance between coordinates": 5, diff --git a/contrib/world_builder/tests/gwb-dat/testing_mantle_layer_no_coordinates.wb b/contrib/world_builder/tests/gwb-dat/testing_mantle_layer_no_coordinates.wb index c3dadfd1980..40c3b72584a 100644 --- a/contrib/world_builder/tests/gwb-dat/testing_mantle_layer_no_coordinates.wb +++ b/contrib/world_builder/tests/gwb-dat/testing_mantle_layer_no_coordinates.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[100e3,100e3],[400e3,500e3]], "maximum distance between coordinates": 5, diff --git a/contrib/world_builder/tests/gwb-dat/testing_oceanic_no_coordinates.wb b/contrib/world_builder/tests/gwb-dat/testing_oceanic_no_coordinates.wb index 2b2c3d17a45..36d8ddedb6b 100644 --- a/contrib/world_builder/tests/gwb-dat/testing_oceanic_no_coordinates.wb +++ b/contrib/world_builder/tests/gwb-dat/testing_oceanic_no_coordinates.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[100e3,100e3],[400e3,500e3]], "maximum distance between coordinates": 5, diff --git a/contrib/world_builder/tests/gwb-dat/testing_subducting_no_coordinates.wb b/contrib/world_builder/tests/gwb-dat/testing_subducting_no_coordinates.wb index 8b57793d4a0..0a113059916 100644 --- a/contrib/world_builder/tests/gwb-dat/testing_subducting_no_coordinates.wb +++ b/contrib/world_builder/tests/gwb-dat/testing_subducting_no_coordinates.wb @@ -1,5 +1,5 @@ { -"version": "0.6", +"version": "1.0", "coordinate system":{"model":"cartesian"}, "cross section":[[100e3,100e3],[400e3,500e3]], "maximum distance between coordinates": 5, diff --git a/contrib/world_builder/tests/gwb-dat/water_content_subducting_plate.dat b/contrib/world_builder/tests/gwb-dat/water_content_subducting_plate.dat new file mode 100644 index 00000000000..0a66e195d8d --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/water_content_subducting_plate.dat @@ -0,0 +1,29 @@ +# This is a comment in the data +# file. +# Now define parameters: +# dim = 2 +# compositions = 1 +# x y d T C0 +50e3 0e3 1e3 +50e3 0e3 4e3 +50e3 0e3 8e3 +50e3 0e3 11e3 +210e3 0e3 55e3 +210e3 0e3 57.5e3 +210e3 0e3 60e3 +210e3 0e3 62.5e3 +210e3 0e3 65e3 +210e3 0e3 67.5e3 +210e3 0e3 70e3 +210e3 0e3 72.5e3 +210e3 0e3 75e3 +210e3 0e3 77.5e3 +210e3 0e3 80e3 +210e3 0e3 82.5e3 +210e3 0e3 85e3 +210e3 0e3 87.5e3 +210e3 0e3 90e3 +210e3 0e3 92.5e3 +210e3 0e3 95e3 +210e3 0e3 97.5e3 +210e3 0e3 100e3 \ No newline at end of file diff --git a/contrib/world_builder/tests/gwb-dat/water_content_subducting_plate.wb b/contrib/world_builder/tests/gwb-dat/water_content_subducting_plate.wb new file mode 100644 index 00000000000..372a421705a --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/water_content_subducting_plate.wb @@ -0,0 +1,55 @@ +{ + "version": "1.0", + "gravity model":{"model":"uniform", "magnitude":10}, + "cross section":[[0,0],[50e3,0]], + "surface temperature":273, "potential mantle temperature":1573, + "thermal expansion coefficient":3.1e-5, "specific heat":1000, "thermal diffusivity":1.0e-6, + "features": + [ + + {"model": "oceanic plate", "name": "test", + "coordinates": [[-110e3, -100e3], [-110e3, 100e3], [100e3, 100e3], [100e3, -100e3]], + "min depth":0.0, "max depth":100e3, + "composition models": [{"model":"tian water content", "compositions":[0], "min depth": 0, "max depth": 2e3, "lithology":"sediment", "initial water content":3, "cutoff pressure":1}, + {"model":"tian water content", "compositions":[0], "min depth": 2e3, "max depth": 6e3, "lithology":"MORB", "initial water content":1, "cutoff pressure":16}, + {"model":"tian water content", "compositions":[0], "min depth": 6e3, "max depth": 10e3, "lithology":"gabbro", "initial water content":0.5, "cutoff pressure":26}, + {"model":"tian water content", "compositions":[0], "min depth": 10e3, "max depth": 20e3, "lithology":"peridotite", "initial water content":2, "cutoff pressure":10}], + "temperature models": [{"model":"plate model", "bottom temperature": -1, "top temperature": 273, "max depth":100e3, "min depth": 0.0, + "ridge coordinates": [[[-500e3,-100e3],[-500e3,100e3]]], "spreading velocity": 0.05}]}, + + {"model": "oceanic plate", "name": "test", + "coordinates": [[1100e3, -100e3], [1100e3, 100e3], [100e3, 100e3], [100e3, -100e3]], + "min depth":0.0, "max depth":100e3, + "temperature models": [{"model": "plate model", "bottom temperature": -1, "top temperature": 273, "max depth":100e3, "min depth": 0.0, + "ridge coordinates": [[[1100e3,-100e3],[1100e3,100e3]]], "spreading velocity": 0.05}]}, + + {"model":"subducting plate", "name":"Slab", + + "coordinates":[[100e3,-100e3],[100e3,100e3]], + + "dip point":[1e7,0],"max depth":1000e3, + + "segments":[{"length":200e3,"thickness":[100e3],"top truncation":[-50e3],"angle":[0,85]}, + {"length":200e3,"thickness":[100e3],"top truncation":[-50e3],"angle":[85,0]}, + {"length":100e3,"thickness":[100e3],"top truncation":[-50e3],"angle":[0,90]}, + {"length":200e3,"thickness":[100e3],"top truncation":[-50e3],"angle":[90,90]}], + + "composition models":[ + {"model":"tian water content", "compositions":[0], "density":3300, "min distance slab top":0, "max distance slab top":2e3, "lithology":"sediment", "initial water content":3, "cutoff pressure":1}, + {"model":"tian water content", "compositions":[0], "density":3300, "min distance slab top":2e3, "max distance slab top":6e3, "lithology":"MORB", "initial water content":1, "cutoff pressure":16}, + {"model":"tian water content", "compositions":[0], "density":3300, "min distance slab top":6e3, "max distance slab top":10e3, "lithology":"gabbro", "initial water content":0.5, "cutoff pressure":26}, + {"model":"tian water content", "compositions":[0], "density":3300, "min distance slab top":10e3, "max distance slab top":20e3, "lithology":"peridotite", "initial water content":2, "cutoff pressure":10}], + + "temperature models":[{"model":"mass conserving", + "reference model name": "plate model", + "adiabatic heating":true, + "subducting velocity":0.05, + "spreading velocity":0.05, + "ridge coordinates":[[[-500e3,-100e3],[-500e3,100e3]]], + "coupling depth":80e3, + "forearc cooling factor":1.0, + "taper distance":0, + "min distance slab top":-200e3, "max distance slab top":300e3}] + } + ] +} diff --git a/contrib/world_builder/tests/gwb-dat/water_content_subducting_plate/screen-output.log b/contrib/world_builder/tests/gwb-dat/water_content_subducting_plate/screen-output.log new file mode 100644 index 00000000000..385f3c40011 --- /dev/null +++ b/contrib/world_builder/tests/gwb-dat/water_content_subducting_plate/screen-output.log @@ -0,0 +1,24 @@ +# x z d T c0 tag +50e3 0e3 1e3 312.405 3 0 +50e3 0e3 4e3 430.229 1 0 +50e3 0e3 8e3 584.338 0.5 0 +50e3 0e3 11e3 695.831 2 0 +210e3 0e3 55e3 1322.25 0 1 +210e3 0e3 57.5e3 1203.62 0.372427 1 +210e3 0e3 60e3 1034.33 0.510104 1 +210e3 0e3 62.5e3 849.688 0.689769 1 +210e3 0e3 65e3 697.68 1 1 +210e3 0e3 67.5e3 614.688 1 1 +210e3 0e3 70e3 616.639 0.5 1 +210e3 0e3 72.5e3 652.908 0.5 1 +210e3 0e3 75e3 687.783 0.5 1 +210e3 0e3 77.5e3 721.222 2 1 +210e3 0e3 80e3 753.193 2 1 +210e3 0e3 82.5e3 783.675 2 1 +210e3 0e3 85e3 812.658 2 1 +210e3 0e3 87.5e3 839.142 2 1 +210e3 0e3 90e3 863.691 2 1 +210e3 0e3 92.5e3 886.838 1.91775 1 +210e3 0e3 95e3 908.585 1.30946 1 +210e3 0e3 97.5e3 928.938 0.908444 1 +210e3 0e3 100e3 947.908 0.640881 1 diff --git a/contrib/world_builder/tests/gwb-grid/2d_cartesian_plume.wb b/contrib/world_builder/tests/gwb-grid/2d_cartesian_plume.wb index cb5f1970dec..b9c01622b57 100644 --- a/contrib/world_builder/tests/gwb-grid/2d_cartesian_plume.wb +++ b/contrib/world_builder/tests/gwb-grid/2d_cartesian_plume.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "cross section":[[0,0],[100,0]], "features": [ diff --git a/contrib/world_builder/tests/gwb-grid/3d_annulus_plume.wb b/contrib/world_builder/tests/gwb-grid/3d_annulus_plume.wb index 93a0d2c8265..badb4f9d700 100644 --- a/contrib/world_builder/tests/gwb-grid/3d_annulus_plume.wb +++ b/contrib/world_builder/tests/gwb-grid/3d_annulus_plume.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"starting point"}, "cross section":[[0,0],[10,0]], "maximum distance between coordinates":0.01, diff --git a/contrib/world_builder/tests/gwb-grid/3d_plume.wb b/contrib/world_builder/tests/gwb-grid/3d_plume.wb index 1b476e744cf..abe0cfb630b 100644 --- a/contrib/world_builder/tests/gwb-grid/3d_plume.wb +++ b/contrib/world_builder/tests/gwb-grid/3d_plume.wb @@ -6,7 +6,7 @@ // in clockwise direction from top to bottom. This rotation crosses from 360 // to zero degrees, making sure this crossover works correctly. { - "version": "0.6", + "version": "1.0", "surface temperature":273.15, "potential mantle temperature":1573.15, "features": diff --git a/contrib/world_builder/tests/gwb-grid/3d_plume_tip.wb b/contrib/world_builder/tests/gwb-grid/3d_plume_tip.wb index fecd3d54b6a..d5671873a1a 100644 --- a/contrib/world_builder/tests/gwb-grid/3d_plume_tip.wb +++ b/contrib/world_builder/tests/gwb-grid/3d_plume_tip.wb @@ -6,7 +6,7 @@ // in clockwise direction from top to bottom. This rotation crosses from 360 // to zero degrees, making sure this crossover works correctly. { - "version": "0.6", + "version": "1.0", "surface temperature":273.15, "potential mantle temperature":1573.15, "features": diff --git a/contrib/world_builder/tests/gwb-grid/3d_sphere_plume.wb b/contrib/world_builder/tests/gwb-grid/3d_sphere_plume.wb index fcf2994f3d2..02b40480103 100644 --- a/contrib/world_builder/tests/gwb-grid/3d_sphere_plume.wb +++ b/contrib/world_builder/tests/gwb-grid/3d_sphere_plume.wb @@ -8,7 +8,7 @@ // the same direction the center axis is curved, but the eccentricity stays // the same. { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"starting point"}, "cross section":[[0,0],[10,0]], "maximum distance between coordinates":0.01, diff --git a/contrib/world_builder/tests/gwb-grid/3d_spherical_plume.wb b/contrib/world_builder/tests/gwb-grid/3d_spherical_plume.wb index 88e78b876a4..1be2f3ec324 100644 --- a/contrib/world_builder/tests/gwb-grid/3d_spherical_plume.wb +++ b/contrib/world_builder/tests/gwb-grid/3d_spherical_plume.wb @@ -8,7 +8,7 @@ // the same direction the center axis is curved, but the eccentricity stays // the same. { - "version": "0.6", + "version": "1.0", "coordinate system":{"model":"spherical", "depth method":"starting point"}, "cross section":[[0,0],[10,0]], "maximum distance between coordinates":0.01, diff --git a/contrib/world_builder/tests/gwb-grid/composition_operations.wb b/contrib/world_builder/tests/gwb-grid/composition_operations.wb index d630f416feb..94e8a992450 100644 --- a/contrib/world_builder/tests/gwb-grid/composition_operations.wb +++ b/contrib/world_builder/tests/gwb-grid/composition_operations.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,50e3],[50e3,0]], "features": diff --git a/contrib/world_builder/tests/gwb-grid/continental_plate_composition_random.wb b/contrib/world_builder/tests/gwb-grid/continental_plate_composition_random.wb index fe96baa646d..4ff3597de5a 100644 --- a/contrib/world_builder/tests/gwb-grid/continental_plate_composition_random.wb +++ b/contrib/world_builder/tests/gwb-grid/continental_plate_composition_random.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,50e3],[50e3,0]], "features": diff --git a/contrib/world_builder/tests/gwb-grid/fault.wb b/contrib/world_builder/tests/gwb-grid/fault.wb index ea64beb1349..83cc3dfa2cb 100644 --- a/contrib/world_builder/tests/gwb-grid/fault.wb +++ b/contrib/world_builder/tests/gwb-grid/fault.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,50e3],[50e3,0]], "features": diff --git a/contrib/world_builder/tests/gwb-grid/fault_edge_limits.wb b/contrib/world_builder/tests/gwb-grid/fault_edge_limits.wb index 355634277eb..d7700110fb3 100644 --- a/contrib/world_builder/tests/gwb-grid/fault_edge_limits.wb +++ b/contrib/world_builder/tests/gwb-grid/fault_edge_limits.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "features": [ diff --git a/contrib/world_builder/tests/gwb-grid/spherical_grid_fault.json b/contrib/world_builder/tests/gwb-grid/spherical_grid_fault.json index 76f7a59bc44..6f73e7285f6 100644 --- a/contrib/world_builder/tests/gwb-grid/spherical_grid_fault.json +++ b/contrib/world_builder/tests/gwb-grid/spherical_grid_fault.json @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "interpolation": "continuous monotone spline", "coordinate system": {"model": "spherical", "depth method": "starting point"}, "features": [{ "model": "fault", diff --git a/contrib/world_builder/tests/gwb-grid/subducting_plate_composition_smooth.wb b/contrib/world_builder/tests/gwb-grid/subducting_plate_composition_smooth.wb index d7ca52ff017..83b4541a5db 100644 --- a/contrib/world_builder/tests/gwb-grid/subducting_plate_composition_smooth.wb +++ b/contrib/world_builder/tests/gwb-grid/subducting_plate_composition_smooth.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,50e3],[50e3,0]], "features": diff --git a/contrib/world_builder/tests/gwb-grid/subducting_plate_manual3.wb b/contrib/world_builder/tests/gwb-grid/subducting_plate_manual3.wb index f77b413f23e..f5afae18570 100644 --- a/contrib/world_builder/tests/gwb-grid/subducting_plate_manual3.wb +++ b/contrib/world_builder/tests/gwb-grid/subducting_plate_manual3.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "gravity model":{"model":"uniform", "magnitude":10}, "cross section":[[0,50e3],[50e3,0]], "features": diff --git a/contrib/world_builder/tests/python/run_python_tests.cmake b/contrib/world_builder/tests/python/run_python_tests.cmake index 999e9e1c6d3..8e6dc793e3d 100644 --- a/contrib/world_builder/tests/python/run_python_tests.cmake +++ b/contrib/world_builder/tests/python/run_python_tests.cmake @@ -20,7 +20,7 @@ set(EXECUTE_COMMAND ${TEST_PROGRAM} ${TEST_ARGS}) # run the test program, capture the stdout/stderr and the result var ${TEST_ARGS} execute_process( COMMAND ${TEST_PROGRAM} ${TEST_ARGS} -i ${TEST_INPUT} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/fortran/ + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/python/ OUTPUT_FILE ${TEST_OUTPUT} ERROR_VARIABLE TEST_ERROR_VAR RESULT_VARIABLE TEST_RESULT_VAR @@ -29,7 +29,7 @@ execute_process( # if the return value is !=0 bail out if( TEST_RESULT_VAR ) - message( FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != 0.\n Test args where: ${TEST_ARGS}\n${TEST_ERROR_VAR} \n The test outpup was: \n ${TEST_OUTPUT_VAR}" ) + message( FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != 0 (${TEST_RESULT_VAR}).\n Test args where: ${TEST_ARGS}\n${TEST_ERROR_VAR} \n The test outpup was: \n ${TEST_OUTPUT_VAR}" ) endif( TEST_RESULT_VAR ) if( !TEST_NO_DIFF ) diff --git a/contrib/world_builder/tests/unit_tests/approval_tests/approved/unit_test_world_builder.WorldBuilder_Utilities_function__calculate_effective_trench_and_plate_ages.txt b/contrib/world_builder/tests/unit_tests/approval_tests/approved/unit_test_world_builder.WorldBuilder_Utilities_function__calculate_effective_trench_and_plate_ages.txt new file mode 100644 index 00000000000..766860dcadb --- /dev/null +++ b/contrib/world_builder/tests/unit_tests/approval_tests/approved/unit_test_world_builder.WorldBuilder_Utilities_function__calculate_effective_trench_and_plate_ages.txt @@ -0,0 +1,8 @@ +TITLE + + +[0] = 6.96779e+07 +[1] = 1.36348e+08 +[2] = 1.03013e+08 +[3] = 1.36348e+08 + diff --git a/contrib/world_builder/tests/unit_tests/unit_test_world_builder.cc b/contrib/world_builder/tests/unit_tests/unit_test_world_builder.cc index c3fe430775a..a8d7aa44fb3 100644 --- a/contrib/world_builder/tests/unit_tests/unit_test_world_builder.cc +++ b/contrib/world_builder/tests/unit_tests/unit_test_world_builder.cc @@ -890,7 +890,7 @@ TEST_CASE("WorldBuilder World random") approval_tests.emplace_back(dist(world1.get_random_number_engine())); approval_tests.emplace_back(dist(world1.get_random_number_engine())); - // test whether the seed indeed changes the resuls + // test whether the seed indeed changes the results WorldBuilder::World world2(file_name, false, "", 2); approval_tests.emplace_back(world2.get_random_number_engine()()); approval_tests.emplace_back(world2.get_random_number_engine()()); diff --git a/contrib/world_builder/tests/unit_tests/utilities.cc b/contrib/world_builder/tests/unit_tests/utilities.cc new file mode 100644 index 00000000000..670cb86bf6c --- /dev/null +++ b/contrib/world_builder/tests/unit_tests/utilities.cc @@ -0,0 +1,96 @@ +/* + Copyright (C) 2021 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . + */ + +#define DOCTEST_CONFIG_SUPER_FAST_ASSERTS + +#include "doctest/doctest.h" + +#include "world_builder/utilities.h" + +using namespace WorldBuilder; +using doctest::Approx; + + +TEST_CASE("multiply 3x3 matrices") +{ + std::array,3> mat1 = {{{{1,2,3}},{{4,5,6}},{{7,8,9}}}}; + std::array,3> mat2 = {{{{9,8,7}},{{6,5,4}},{{3,2,1}}}}; + std::array,3> mat3 = {{{{0.1,10,-7}},{{4,-0.5,9}},{{-9,0.3,-5}}}}; + std::array,3> result1 = {{{{30,24,18}},{{84,69,54}},{{138,114,90}}}}; //mat1*mat2 + std::array,3> result2 = {{{{90,114,138}},{{54,69,84}},{{18,24,30}}}}; //mat2*mat1 + std::array,3> result3 = {{{{-18.9,9.9,-4}},{{-33.6,39.3,-13}},{{-48.3,68.7,-22}}}}; //mat1*mat3 + std::array,3> result4 = {{{{-8.9,-5.8,-2.7}},{{65,77.5,90}},{{-42.8,-56.5,-70.2}}}}; //mat3*mat1 + std::array,3> result5 = {{{{-30.1,88.1,-26}},{{-15.4,58.7,-17}},{{-0.7,29.3,-8}}}}; //mat2*mat3 + std::array,3> result6 = {{{{39.9,36.8,33.7}},{{60,47.5,35}},{{-94.2,-80.5,-66.8}}}}; //mat3*mat2 + + std::array,3> result7 = Utilities::multiply_3x3_matrices(mat1, mat2); + for (size_t i = 0; i < 3; i++) + { + for (size_t j = 0; j < 3; j++) + { + CHECK(result1[i][j] == Approx(result7[i][j])); + } + } + + std::array,3> result8 = Utilities::multiply_3x3_matrices(mat2, mat1); + for (size_t i = 0; i < 3; i++) + { + for (size_t j = 0; j < 3; j++) + { + CHECK(result2[i][j] == Approx(result8[i][j])); + } + } + + std::array,3> result9 = Utilities::multiply_3x3_matrices(mat1, mat3); + for (size_t i = 0; i < 3; i++) + { + for (size_t j = 0; j < 3; j++) + { + CHECK(result3[i][j] == Approx(result9[i][j])); + } + } + + std::array,3> result10 = Utilities::multiply_3x3_matrices(mat3, mat1); + for (size_t i = 0; i < 3; i++) + { + for (size_t j = 0; j < 3; j++) + { + CHECK(result4[i][j] == Approx(result10[i][j])); + } + } + + std::array,3> result11 = Utilities::multiply_3x3_matrices(mat2, mat3); + for (size_t i = 0; i < 3; i++) + { + for (size_t j = 0; j < 3; j++) + { + CHECK(result5[i][j] == Approx(result11[i][j])); + } + } + + std::array,3> result12 = Utilities::multiply_3x3_matrices(mat3, mat2); + for (size_t i = 0; i < 3; i++) + { + for (size_t j = 0; j < 3; j++) + { + CHECK(result6[i][j] == Approx(result12[i][j])); + } + } + +} \ No newline at end of file From c9be6aee0f0e9ab5da9f0b8f905b90e0a4570e97 Mon Sep 17 00:00:00 2001 From: Menno Fraters Date: Wed, 21 Aug 2024 08:57:04 +0200 Subject: [PATCH 2/3] update world builder version number in ASPECT tests and cookbooks. --- .../mantle_convection_with_continents_in_annulus/world.wb | 2 +- .../input_data/world_builder_smac_cratons_faults_2D.json | 2 +- tests/entropy_initial_lookup_wb.wb | 5 +++-- tests/world_builder_select_composition.wb | 2 +- tests/world_builder_select_grains.wb | 2 +- tests/world_builder_simple.wb | 2 +- tests/world_builder_simple_2d_cartesian_sticky_air.wb | 2 +- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/cookbooks/mantle_convection_with_continents_in_annulus/world.wb b/cookbooks/mantle_convection_with_continents_in_annulus/world.wb index 1dcbe4721f3..3774ac7b14f 100644 --- a/cookbooks/mantle_convection_with_continents_in_annulus/world.wb +++ b/cookbooks/mantle_convection_with_continents_in_annulus/world.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "coordinate system":{"model":"spherical", "depth method":"begin segment"}, "cross section":[[0,0],[360,0]], "features": diff --git a/cookbooks/tomography_based_plate_motions/input_data/world_builder_smac_cratons_faults_2D.json b/cookbooks/tomography_based_plate_motions/input_data/world_builder_smac_cratons_faults_2D.json index bf87c2c29f8..2a06f250742 100644 --- a/cookbooks/tomography_based_plate_motions/input_data/world_builder_smac_cratons_faults_2D.json +++ b/cookbooks/tomography_based_plate_motions/input_data/world_builder_smac_cratons_faults_2D.json @@ -1 +1 @@ -{"version": "0.6", "cross section":[[0, 0], [180, 0]], "interpolation": "continuous monotone spline", "coordinate system": {"model": "spherical", "depth method": "starting point"}, "features": [{"model": "continental plate", "name": "craton_2", "coordinates": [[7.7, 5.978], [8.994, 8.115], [10.795, 8.059], [12.651, 9.128], [14.283, 9.634], [15.914, 11.491], [17.94, 13.179], [19.402, 13.629], [20.752, 12.616], [21.54, 10.985], [23.678, 11.322], [25.141, 10.31], [27.11, 9.016], [28.91, 8.509], [30.71, 7.778], [32.173, 6.821], [32.623, 5.753], [32.511, 2.602], [32.117, 1.027], [32.342, -0.605], [32.511, -2.63], [32.848, -3.924], [34.48, -4.487], [36.505, -5.781], [36.787, -6.906], [36.618, -8.144], [35.493, -9.606], [34.255, -10.225], [33.58, -11.575], [33.017, -13.545], [31.779, -14.051], [29.81, -12.813], [28.01, -11.801], [27.447, -9.663], [26.716, -9.888], [26.604, -12.307], [27.054, -14.782], [28.179, -16.751], [29.445, -19.396], [31.414, -21.252], [32.651, -23.221], [32.37, -26.147], [30.851, -28.228], [29.051, -29.354], [28.038, -31.041], [27.082, -32.167], [25.338, -30.816], [23.087, -30.085], [21.512, -29.297], [21.906, -26.653], [22.75, -24.234], [23.875, -22.377], [24.381, -19.789], [22.581, -19.902], [22.018, -21.646], [20.949, -22.546], [18.361, -21.984], [15.323, -21.027], [13.917, -20.633], [12.623, -19.677], [12.173, -17.033], [12.454, -14.557], [14.311, -12.026], [14.367, -10.0], [13.411, -6.287], [12.454, -4.656], [10.429, -3.362], [9.191, -1.111], [10.204, 1.533], [10.598, 3.615], [7.56, 5.077], [7.728, 5.865], [7.728, 5.921], [7.7, 5.978]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_3", "coordinates": [[19.599, 47.582], [21.962, 46.822], [25.056, 45.191], [30.514, 45.753], [39.403, 46.034], [45.985, 46.203], [51.555, 46.091], [51.555, 46.091], [54.311, 45.359], [56.562, 48.622], [57.912, 50.085], [58.081, 52.954], [58.643, 55.036], [58.306, 57.061], [61.006, 57.737], [60.5, 59.368], [59.487, 61.225], [57.124, 61.843], [56.168, 63.419], [54.874, 64.713], [53.524, 65.838], [51.723, 66.344], [49.586, 67.019], [46.773, 68.37], [45.591, 69.945], [43.285, 71.351], [40.021, 71.576], [36.421, 71.801], [31.639, 72.026], [27.025, 71.745], [22.975, 71.689], [20.499, 70.62], [17.743, 69.213], [15.042, 67.638], [12.904, 66.232], [8.91, 64.375], [6.041, 62.575], [3.621, 61.112], [3.621, 59.424], [3.621, 57.511], [4.747, 56.161], [5.253, 54.755], [4.69, 53.63], [5.872, 51.717], [9.022, 50.873], [13.129, 50.423], [15.38, 49.916], [18.474, 48.876], [19.599, 47.582]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_4", "coordinates": [[84.115, 67.301], [87.097, 69.382], [89.46, 70.395], [91.71, 71.183], [93.679, 71.408], [96.323, 71.576], [99.361, 71.408], [99.586, 73.602], [100.937, 73.996], [103.3, 73.939], [105.719, 72.758], [106.9, 72.364], [108.982, 72.983], [111.007, 73.377], [113.145, 73.827], [115.283, 73.377], [117.815, 73.208], [121.303, 72.477], [125.691, 72.533], [127.097, 72.42], [127.548, 71.351], [127.154, 69.382], [126.76, 67.301], [126.704, 65.838], [128.448, 65.275], [128.729, 64.375], [129.404, 62.069], [129.404, 60.212], [131.148, 61.506], [133.736, 61.562], [135.255, 60.099], [136.662, 58.468], [136.999, 55.936], [136.718, 52.954], [133.23, 52.279], [121.584, 52.223], [117.871, 53.405], [118.546, 55.542], [118.152, 57.624], [115.677, 59.424], [113.651, 59.762], [110.895, 58.58], [110.051, 57.118], [109.376, 55.205], [108.813, 53.067], [108.926, 51.154], [106.113, 50.141], [101.949, 50.817], [98.405, 50.648], [95.311, 51.323], [92.892, 53.798], [89.516, 54.755], [86.534, 57.23], [85.747, 60.156], [85.24, 64.15], [84.171, 67.357], [84.171, 67.357], [84.115, 67.301]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_5", "coordinates": [[70.613, 24.093], [72.919, 24.037], [75.17, 23.756], [77.139, 24.318], [78.827, 23.531], [80.402, 21.111], [81.64, 19.592], [82.202, 18.073], [81.415, 16.104], [78.995, 17.004], [78.433, 15.936], [79.389, 15.148], [79.783, 13.685], [79.389, 11.491], [77.701, 9.297], [77.026, 8.397], [75.62, 11.097], [73.819, 14.473], [73.538, 17.173], [73.032, 20.324], [72.188, 21.393], [70.444, 21.393], [70.556, 23.024], [70.556, 23.024], [70.613, 24.093]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_6", "coordinates": [[114.411, -21.815], [116.478, -20.633], [119.432, -19.536], [121.457, -18.228], [122.934, -16.414], [124.706, -14.979], [126.479, -14.388], [128.251, -14.726], [129.432, -14.135], [131.373, -12.743], [134.116, -11.561], [134.285, -12.743], [132.681, -15.275], [131.5, -16.245], [129.474, -16.625], [126.268, -18.144], [125.424, -19.41], [123.905, -19.536], [122.554, -19.916], [122.428, -22.321], [123.441, -23.376], [124.495, -23.882], [124.833, -25.528], [125.93, -26.963], [126.521, -27.933], [127.491, -28.861], [129.77, -29.916], [131.247, -30.465], [133.441, -31.224], [133.989, -32.363], [130.656, -31.646], [127.112, -31.52], [125.171, -32.363], [123.905, -33.503], [120.74, -33.292], [119.516, -34.515], [118.293, -35.655], [116.225, -35.612], [115.424, -34.558], [115.846, -31.562], [114.369, -29.536], [113.229, -28.102], [113.44, -23.587], [114.411, -21.773], [114.411, -21.773], [114.411, -21.815]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_7", "coordinates": [[292.304, 77.343], [298.38, 75.993], [302.768, 75.486], [307.832, 72.617], [309.688, 68.398], [310.195, 64.009], [313.233, 62.828], [319.815, 64.853], [325.722, 69.073], [330.279, 70.761], [332.811, 74.136], [332.811, 76.837], [330.786, 81.056], [326.904, 82.406], [321.672, 82.575], [316.946, 82.069], [305.469, 81.056], [297.199, 81.056], [290.448, 79.2], [290.448, 79.2], [292.304, 77.343]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_8", "coordinates": [[228.506, 68.904], [228.674, 64.516], [230.362, 62.659], [235.932, 59.621], [237.957, 55.571], [238.295, 51.013], [243.865, 47.132], [247.071, 42.912], [248.928, 39.03], [253.316, 37.005], [261.418, 38.861], [268.675, 41.562], [273.232, 40.887], [276.945, 41.731], [281.84, 42.743], [287.072, 44.769], [293.317, 48.313], [295.849, 52.026], [297.368, 55.064], [296.692, 58.271], [292.979, 62.828], [293.317, 65.36], [292.304, 68.06], [287.578, 69.917], [280.996, 71.436], [274.751, 71.436], [272.388, 73.799], [271.376, 77.174], [269.519, 78.018], [257.029, 76.33], [246.059, 76.162], [238.295, 74.305], [234.75, 73.292], [234.75, 73.292], [228.506, 68.904]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_9", "coordinates": [[268.675, 80.55], [274.245, 79.537], [274.414, 77.005], [279.477, 76.499], [285.722, 78.187], [292.304, 81.225], [279.814, 82.069], [279.814, 82.069], [268.675, 80.55]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_10", "coordinates": [[289.266, 3.587], [289.941, -1.983], [292.304, -5.865], [294.836, -9.916], [297.874, -15.317], [300.574, -18.017], [305.131, -17.511], [311.207, -13.123], [312.895, -9.747], [311.545, -0.464], [307.663, 5.949], [303.106, 7.468], [298.043, 9.325], [292.473, 7.3], [292.473, 7.3], [289.266, 3.587]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_11", "coordinates": [[312.051, -16.667], [313.739, -20.718], [318.127, -22.574], [320.659, -21.73], [322.347, -16.329], [323.191, -12.11], [319.14, -8.397], [314.921, -8.903], [311.883, -12.954], [311.883, -12.954], [312.051, -16.667]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_12", "coordinates": [[347.326, 25.697], [350.027, 28.228], [353.402, 31.604], [357.622, 32.448], [359.478, 30.591], [358.803, 24.178], [359.309, 21.983], [361.166, 19.114], [360.153, 14.22], [360.66, 5.274], [357.284, 5.443], [352.896, 5.106], [346.82, 10.844], [346.313, 15.063], [345.807, 21.308], [345.807, 21.308], [347.326, 25.697]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "fault", "name": "fault_2", "coordinates": [[144.8, 41.0], [143.0, 42.0], [142.2, 43.0], [142.0, 44.0], [142.0, 46.0], [142.2, 48.0], [142.5, 50.0], [142.5, 52.5], [142.5, 55.0], [147.0, 61.9], [146.2, 63.3], [146.1, 63.9], [142.1, 66.2], [140.0, 67.7], [126.2, 70.2], [122.8, 75.5], [126.7, 78.2], [122.0, 80.7], [98.5, 85.0], [43.0, 86.5], [7.5, 84.9], [0.0, 84.1], [-4.5, 83.4], [-6.0, 82.1], [-3.5, 80.9], [-2.0, 80.38], [4.25, 79.6], [3.0, 79.04], [7.0, 78.45], [7.6, 77.9], [7.4, 76.75], [7.2, 76.55], [7.3, 75.6], [8.4, 74.8], [8.4, 74.6], [8.7, 74.35], [8.8, 73.95], [8.25, 73.55], [7.8, 73.4], [6.8, 73.25], [4.4, 72.8], [1.1, 72.2], [-4.699999999999989, 71.4], [-6.5, 70.92], [-12.0, 71.7], [-13.199999999999989, 70.92], [-13.800000000000011, 70.97], [-14.699999999999989, 70.55], [-15.399999999999977, 70.0], [-16.5, 68.9], [-17.30000000000001, 68.98], [-18.100000000000023, 68.4], [-18.5, 67.7], [-19.5, 66.7], [-16.5, 66.4], [-17.0, 66.0], [-17.0, 65.0], [-19.0, 63.7], [-22.5, 64.1], [-24.600000000000023, 63.0], [-27.0, 61.6], [-29.5, 60.0], [-34.0, 57.0], [-35.30000000000001, 55.2], [-35.19999999999999, 53.0], [-35.0, 52.7], [-31.80000000000001, 52.6], [-31.80000000000001, 52.2], [-30.0, 52.1], [-30.0, 51.2], [-29.0, 49.8], [-27.5, 47.8], [-27.399999999999977, 46.5], [-28.0, 45.0], [-28.19999999999999, 44.5], [-28.5, 43.8], [-29.0, 43.3], [-29.30000000000001, 42.9], [-29.30000000000001, 42.7], [-29.30000000000001, 42.3], [-29.30000000000001, 41.7], [-29.69999999999999, 40.0], [-29.75, 39.45]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_3", "coordinates": [[-29.75, 39.45], [-29.100000000000023, 39.3], [-28.100000000000023, 39.0], [-27.399999999999977, 38.8], [-26.80000000000001, 38.4], [-26.19999999999999, 38.1], [-25.399999999999977, 37.7], [-24.69999999999999, 37.3], [-24.100000000000023, 36.82], [-23.19999999999999, 36.97], [-21.5, 37.07], [-21.30000000000001, 37.1], [-20.899999999999977, 37.14], [-20.5, 37.13], [-20.19999999999999, 37.12], [-18.0, 37.8], [-16.0, 37.8], [-14.0, 37.0], [-10.0, 36.0], [-6.0, 36.0], [1.4, 36.2], [6.8, 36.4], [14.2, 38.5], [15.1, 38.5], [16.6, 38.3], [17.3, 38.9], [18.2, 39.7], [18.9, 40.2], [19.4, 39.9], [19.7, 39.1], [20.0, 38.2], [20.5, 37.3], [20.9, 36.5], [21.6, 35.8], [22.2, 35.2], [23.0, 34.7], [23.7, 34.4], [24.6, 34.2], [25.7, 34.3], [26.7, 34.4], [27.4, 34.5], [28.2, 34.8], [29.2, 35.2], [29.8, 35.7], [30.3, 35.8], [30.9, 35.4], [31.4, 34.9], [32.3, 34.3], [32.9, 34.2], [34.0, 34.6], [34.5, 35.0], [35.2, 35.6], [35.6, 35.9]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_4", "coordinates": [[-29.75, 39.45], [-29.94999999999999, 39.45], [-30.30000000000001, 38.4], [-30.649999999999977, 38.3], [-30.80000000000001, 38.0], [-31.149999999999977, 37.9], [-32.0, 37.5], [-33.19999999999999, 36.8], [-33.69999999999999, 36.5], [-34.10000000000002, 36.0], [-35.0, 35.0], [-36.39999999999998, 35.3], [-37.80000000000001, 33.5], [-39.30000000000001, 33.8], [-40.5, 31.9], [-41.69999999999999, 30.9], [-41.89999999999998, 30.5], [-42.0, 30.0], [-42.69999999999999, 30.1], [-43.14999999999998, 28.75], [-43.75, 28.75], [-44.19999999999999, 27.5], [-44.5, 26.9], [-44.80000000000001, 26.2], [-45.0, 25.7], [-45.39999999999998, 25.2], [-46.10000000000002, 24.5], [-46.30000000000001, 24.2], [-46.30000000000001, 23.9], [-46.30000000000001, 23.9], [-44.89999999999998, 23.7], [-45.0, 23.0], [-45.0, 22.8], [-45.5, 22.0], [-45.60000000000002, 21.3], [-45.69999999999999, 20.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_5", "coordinates": [[-45.7, 20.3], [-59.39999999999998, 16.3], [-59.80000000000001, 16.9], [-60.30000000000001, 17.4], [-61, 18.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_6", "coordinates": [[-61.0, 18.0], [-61.80000000000001, 18.6], [-62.5, 19.0], [-63.39999999999998, 19.4], [-64.10000000000002, 19.6], [-65.0, 19.7], [-66.0, 19.8], [-66.0, 19.8], [-67.10000000000002, 20.0], [-67.89999999999998, 20.1], [-68.80000000000001, 20.1], [-69.69999999999999, 20.1], [-70.80000000000001, 20.1], [-71.89999999999998, 20.1], [-72.80000000000001, 19.9], [-73.60000000000002, 19.9], [-75.0, 19.7], [-77.0, 19.7], [-80.0, 19.2], [-81.5, 18.8], [-81.5, 17.8], [-83.0, 17.5], [-85.0, 16.9], [-87.0, 16.4], [-89.30000000000001, 15.3], [-95.80000000000001, 15.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_7", "coordinates": [[-78.10000000000002, 3.6], [-77.5, 3.8], [-76.39999999999998, 4.3], [-75.39999999999998, 4.9], [-74.39999999999998, 5.5], [-73.5, 6.2], [-72.69999999999999, 7.0], [-72.0, 7.7], [-71.39999999999998, 8.4], [-70.69999999999999, 9.2], [-70.10000000000002, 9.9], [-69.30000000000001, 10.3], [-68.10000000000002, 10.4], [-66.60000000000002, 10.5], [-65.19999999999999, 10.4], [-64.0, 10.4], [-62.60000000000002, 10.4], [-61.69999999999999, 10.4], [-59.89999999999998, 13.1], [-59.69999999999999, 13.6], [-59.60000000000002, 14.1], [-59.39999999999998, 14.5], [-59.30000000000001, 14.9], [-59.30000000000001, 15.6], [-59.39999999999998, 16.3], [-59.80000000000001, 16.9], [-60.30000000000001, 17.4], [-61.0, 18.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_8", "coordinates": [[-45.69999999999999, 20.3], [-45.80000000000001, 19.8], [-46.10000000000002, 19.0], [-46.39999999999998, 18.5], [-46.60000000000002, 16.8], [-46.69999999999999, 15.4], [-45.0, 15.3], [-45.0, 13.7], [-44.80000000000001, 13.5], [-44.80000000000001, 12.6], [-44.10000000000002, 12.6], [-44.10000000000002, 12.1], [-43.69999999999999, 12.1], [-43.69999999999999, 10.8], [-40.89999999999998, 10.7], [-40.69999999999999, 9.5], [-40.19999999999999, 8.8], [-39.39999999999998, 8.7], [-39.19999999999999, 8.1], [-37.80000000000001, 8.1], [-37.39999999999998, 7.6], [-34.0, 7.2], [-32.60000000000002, 5.2], [-32.60000000000002, 4.0], [-31.399999999999977, 3.9], [-30.399999999999977, 0.9], [-26.5, 0.9], [-26.19999999999999, 0.6], [-25.0, 0.5], [-24.600000000000023, -1.2], [-16.30000000000001, 0.1], [-15.800000000000011, -1.4], [-12.800000000000011, -0.9], [-11.5, -6.8], [-13.399999999999977, -7.2], [-13.5, -8.0], [-13.0, -10.5], [-12.899999999999977, -11.5], [-14.899999999999977, -11.9], [-14.5, -13.5], [-14.300000000000011, -14.1], [-13.600000000000023, -14.0], [-13.5, -15.0], [-13.199999999999989, -16.1], [-14.300000000000011, -16.2], [-14.0, -17.0], [-14.100000000000023, -17.9], [-13.0, -17.8], [-12.0, -19.2], [-11.600000000000023, -21.1], [-12.5, -22.6], [-13.5, -23.1], [-13.399999999999977, -24.7], [-13.699999999999989, -25.1], [-13.800000000000011, -26.9], [-13.199999999999989, -27.3], [-12.899999999999977, -29.0], [-13.699999999999989, -29.2], [-13.399999999999977, -31.1], [-13.399999999999977, -31.7], [-13.300000000000011, -32.3], [-14.5, -32.5], [-14.5, -33.0], [-14.600000000000023, -33.9], [-15.199999999999989, -34.3], [-15.300000000000011, -35.3], [-17.80000000000001, -35.5], [-17.5, -37.3], [-16.0, -39.1], [-15.899999999999977, -40.1], [-16.80000000000001, -40.3], [-16.5, -41.7], [-16.0, -44.1], [-15.199999999999989, -45.2], [-13.800000000000011, -46.2], [-13.300000000000011, -47.4], [-10.699999999999989, -46.9], [-9.800000000000011, -48.2], [-8.0, -49.3], [-7.0, -50.1], [-4.800000000000011, -52.2], [-3.0, -53.5], [-2.3999999999999773, -54.3], [-1.5, -54.0], [-1.0, -54.6], [-0.6999999999999886, -54.8]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_9", "coordinates": [[-76.19999999999999, -45.3], [-76.19999999999999, -45.8], [-76.0, -46.9], [-75.89999999999998, -47.7], [-75.69999999999999, -48.8], [-75.39999999999998, -49.6], [-75.39999999999998, -50.7], [-75.30000000000001, -51.9], [-75.19999999999999, -53.0], [-74.30000000000001, -53.6], [-73.10000000000002, -54.4], [-72.0, -54.9], [-70.80000000000001, -55.4], [-69.0, -55.6], [-66.89999999999998, -55.6], [-65.69999999999999, -55.5], [-64.80000000000001, -55.6], [-63.39999999999998, -55.7], [-62.30000000000001, -55.8], [-60.10000000000002, -56.0], [-60.0, -56.0], [-57.5, -55.9], [-55.0, -55.7], [-52.5, -55.6], [-50.0, -55.5], [-48.19999999999999, -55.4], [-46.5, -55.2], [-44.69999999999999, -55.1], [-43.0, -55.0], [-42.19999999999999, -55.0], [-41.5, -54.9], [-40.69999999999999, -54.8], [-40.0, -54.8], [-37.5, -54.8], [-35.0, -54.8], [-32.5, -54.8], [-30.0, -54.8], [-29.30000000000001, -54.8], [-28.5, -54.9], [-27.0, -55.0], [-26.5, -55.2], [-26.0, -55.4], [-25.5, -55.5], [-25.0, -55.7], [-24.80000000000001, -55.8], [-24.5, -55.9], [-24.19999999999999, -56.0], [-24.0, -56.1], [-23.69999999999999, -56.6], [-23.399999999999977, -57.0], [-23.100000000000023, -57.5], [-22.80000000000001, -58.0], [-23.100000000000023, -58.4], [-23.399999999999977, -58.8], [-23.69999999999999, -59.2], [-24.0, -59.6], [-24.899999999999977, -60.7], [-25.600000000000023, -60.7], [-24.899999999999977, -60.8], [-24.399999999999977, -60.9], [-23.899999999999977, -61.0], [-23.30000000000001, -61.0], [-22.600000000000023, -61.0], [-21.899999999999977, -61.0], [-21.19999999999999, -61.0], [-20.5, -60.9], [-19.899999999999977, -60.9], [-19.399999999999977, -60.8], [-19.30000000000001, -60.5], [-19.0, -60.5], [-18.899999999999977, -60.2], [-18.5, -60.2], [-18.5, -59.6], [-18.0, -59.6], [-18.0, -59.1], [-16.19999999999999, -59.0], [-16.19999999999999, -58.3], [-7.0, -57.8], [-4.699999999999989, -55.8], [-1.6000000000000227, -55.6], [-1.6000000000000227, -55.3], [-1.3999999999999773, -55.1], [-1.1000000000000227, -54.8], [-0.6999999999999886, -54.8]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_10", "coordinates": [[-0.6999999999999886, -54.8], [-0.30000000000001137, -54.5], [0.8, -54.9], [3.0, -53.6], [4.0, -54.2], [5.0, -54.8], [7.6, -53.6], [8.3, -54.0], [11.5, -52.2], [12.7, -52.8], [13.9, -51.8], [15.1, -52.2], [15.9, -51.7], [18.5, -52.7], [20.0, -52.8], [22.5, -53.0], [25.5, -53.8], [26.2, -52.5], [27.8, -52.8], [29.5, -50.2], [30.5, -49.8], [32.5, -47.0], [34.8, -47.2], [35.7, -44.8], [39.3, -43.7], [42.4, -42.8], [42.7, -40.9], [46.0, -40.1], [46.2, -38.8], [49.0, -37.8], [52.2, -37.5], [52.3, -36.1], [53.3, -36.1], [53.4, -35.3], [54.1, -35.4], [54.2, -34.7], [55.1, -34.7], [57.0, -33.8], [57.0, -31.9], [58.3, -31.8], [59.0, -30.7], [60.8, -30.7], [61.0, -29.0], [63.2, -28.1], [66.1, -27.7], [67.8, -26.6], [68.9, -26.0], [69.3, -25.8], [70.05, -25.51]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_11", "coordinates": [[70.05, -25.51], [70.8, -26.3], [71.2, -26.2], [72.8, -27.5], [73.0, -27.4], [74.2, -28.2], [74.1, -28.4], [75.5, -29.5], [74.8, -30.2], [78.1, -32.9], [77.4, -33.7], [79.1, -35.1], [78.3, -35.8], [79.0, -36.3], [75.9, -39.1], [79.6, -42.2], [81.1, -41.2], [83.5, -43.2], [85.3, -41.8], [87.2, -43.0], [88.3, -42.0], [95.5, -46.0], [95.1, -46.3], [99.7, -48.2], [100.4, -47.6], [114.3, -51.2], [114.8, -50.4], [115.9, -50.7], [116.4, -49.8], [118.0, -50.1], [118.1, -49.8], [118.6, -49.9], [118.8, -49.7], [121.7, -50.2], [122.3, -49.2], [122.9, -49.3], [122.7, -49.8], [123.7, -50.0], [123.9, -49.6], [124.5, -49.7], [124.5, -49.4], [124.8, -49.4], [125.0, -49.1], [125.4, -49.2], [125.4, -49.3], [125.8, -49.4], [125.7, -49.6], [126.6, -49.7], [126.9, -48.9], [127.7, -49.0], [127.5, -49.9], [130.8, -50.3], [130.9, -50.1], [132.3, -50.1], [132.3, -50.3], [134.2, -50.3], [134.4, -50.4], [136.0, -50.4], [136.4, -50.8], [137.7, -50.6], [138.6, -52.0], [139.6, -51.9], [140.0, -52.8], [140.8, -52.7], [141.2, -54.2], [143.6, -54.1], [143.9, -54.4], [144.5, -54.3], [145.0, -54.7], [146.1, -54.7], [146.2, -55.7], [147.2, -55.6], [147.5, -57.6], [148.8, -57.5], [150.4, -60.5], [153.8, -60.1], [155.7, -62.9], [155.9, -63.0], [163.2, -61.8]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_12", "coordinates": [[58.3, 12.7], [57.9, 12.0], [57.4, 11.0], [56.75, 10.25], [57.22, 9.9], [57.5, 10.12], [58.15, 9.68], [58.06, 9.24], [58.44, 9.11], [58.28, 8.48], [59.04, 8.0], [59.24, 8.0], [59.8, 7.72], [59.56, 7.18], [60.0, 7.0], [60.16, 6.68], [60.32, 6.6], [60.4, 6.38], [60.76, 6.2], [61.6, 5.56], [61.54, 5.44], [62.2, 4.98], [62.06, 4.8], [62.56, 4.48], [62.52, 4.32], [63.08, 3.96], [63.32, 3.92], [63.52, 3.76], [64.14, 3.66], [65.12, 2.96], [65.88, 3.0], [66.76, 2.3], [66.66, 1.6], [67.04, 1.32], [67.25, 0.88], [66.8, 0.48], [67.02, 0.16], [67.02, 0.0], [67.22, -0.18], [67.0, -0.46], [67.34, -0.66], [67.34, -0.8], [67.58, -0.96], [67.34, -1.36], [68.04, -1.84], [67.92, -2.06], [68.19, -2.21], [67.88, -2.72], [68.21, -2.92], [67.98, -3.28], [68.61, -3.69], [68.28, -4.16], [68.73, -4.51], [68.73, -4.51], [68.36, -4.9], [68.6, -5.1], [68.78, -5.24], [67.98, -6.08], [68.5, -6.56], [67.92, -7.12], [68.25, -7.4], [67.86, -7.75], [68.28, -8.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_13", "coordinates": [[68.28, -8.2], [66.54, -9.64], [66.84, -9.88], [66.28, -10.4], [66.79, -10.78], [66.2, -11.3], [66.32, -11.56], [65.75, -12.0], [65.56, -12.14], [66.44, -12.88], [66.49, -13.12], [66.7, -13.34], [65.86, -13.99], [66.38, -14.8], [66.72, -14.9], [67.24, -15.44], [67.08, -15.68], [67.38, -16.0], [66.47, -16.61], [66.82, -16.96], [65.02, -17.98], [66.23, -20.25], [66.82, -19.95], [67.24, -20.38], [67.64, -20.13], [67.91, -20.64], [68.4, -20.46], [69.22, -22.13], [69.08, -22.2], [69.35, -22.69], [69.26, -22.74], [69.35, -22.91], [69.26, -22.96], [69.35, -23.13], [69.19, -23.25], [69.74, -24.22], [69.61, -24.3], [69.81, -24.62], [69.77, -24.65], [70.07, -25.19], [69.95, -25.32], [70.05, -25.51]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_14", "coordinates": [[68.73, -4.51], [80.0, -5.0], [89.0, -5.0], [89.5, 0.0], [90.0, 5.0], [91.8, 9.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_15", "coordinates": [[58.3, 12.7], [57.5, 13.5], [56.3, 14.5], [56.1, 14.3], [54.5, 15.2], [53.8, 14.3], [53.0, 14.6], [52.8, 14.4], [52.2, 14.6], [51.2, 13.1], [50.2, 13.4], [49.8, 13.1], [48.8, 13.0], [48.2, 12.6], [46.5, 12.5], [46.3, 12.2], [43.7, 11.9], [43.5, 12.2], [42.5, 13.2], [41.6, 14.3], [40.5, 16.0], [39.4, 18.1], [38.5, 19.8], [37.2, 22.0], [36.2, 23.8], [35.3, 25.3], [34.6, 26.6], [34.2, 27.1], [34.2, 27.9], [34.5, 28.4], [34.7, 29.0], [34.9, 29.5], [34.9, 30.0], [34.9, 30.8], [35.0, 31.3], [35.0, 32.1], [35.2, 32.9], [35.5, 34.0], [35.7, 34.9], [35.8, 35.7], [35.6, 35.9]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_16", "coordinates": [[35.6, 35.9], [35.9, 36.4], [36.3, 36.7], [36.8, 37.2], [37.4, 37.5], [37.9, 37.9], [38.5, 38.2], [39.0, 38.4], [39.5, 38.7], [40.1, 39.0], [40.7, 39.2], [41.6, 39.2], [42.3, 38.9], [43.0, 38.3], [43.6, 38.0], [43.6, 38.0], [44.0, 37.6], [44.3, 37.2], [44.9, 36.4], [45.4, 36.0], [45.9, 35.5], [46.4, 35.0], [47.1, 34.1], [47.7, 33.5], [48.1, 32.8], [48.7, 32.1], [49.3, 31.3], [49.8, 30.4], [50.4, 29.7], [51.2, 28.7], [51.8, 28.0], [52.4, 27.3], [53.3, 26.5], [54.3, 26.3], [55.1, 26.2], [56.0, 26.0], [57.0, 25.8], [58.1, 25.6], [58.7, 25.4], [59.0, 25.4], [59.8, 25.2], [60.0, 25.2], [61.0, 25.0], [62.0, 24.9], [63.0, 25.0], [64.0, 25.2], [65.0, 25.2], [65.8, 25.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_17", "coordinates": [[58.3, 12.7], [58.6, 13.0], [58.9, 13.5], [59.1, 14.0], [59.5, 14.5], [59.8, 15.0], [59.9, 15.5], [60.0, 16.0], [60.0, 16.5], [60.1, 17.0], [60.2, 17.5], [60.3, 18.0], [60.45, 18.5], [60.8, 19.0], [61.2, 20.0], [61.6, 20.5], [62.0, 21.0], [62.25, 21.5], [62.5, 22.0], [63.0, 22.5], [63.5, 23.0], [63.8, 23.2], [64.8, 23.3], [65.2, 24.0], [65.7, 25.0], [65.8, 25.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_18", "coordinates": [[65.8, 25.2], [66.1, 26.0], [66.0, 27.0], [65.9, 28.0], [65.9, 29.0], [66.1, 30.0], [66.5, 31.0], [67.2, 32.0], [68.0, 33.0], [68.8, 34.0], [69.2, 34.4], [70.0, 34.0], [71.0, 33.9], [72.0, 33.6], [73.0, 33.6], [73.7, 34.0], [74.0, 33.7], [75.0, 33.1], [76.0, 32.3], [77.0, 31.0], [78.0, 30.4], [79.0, 29.7], [80.0, 29.2], [81.0, 29.0], [82.0, 28.3], [83.0, 27.9], [84.0, 27.8], [85.0, 27.5], [86.0, 27.3], [87.0, 26.9], [88.0, 26.8], [89.0, 26.9], [90.0, 26.7], [91.0, 26.8], [92.0, 26.9], [93.0, 27.2], [93.3, 27.1], [93.6, 27.1], [94.0, 27.1], [94.2, 27.1], [94.4, 27.1], [94.6, 27.1], [94.8, 27.1], [95.0, 27.1], [95.3, 27.2], [95.5, 27.2], [95.7, 27.2], [95.7, 26.8], [95.6, 26.5], [95.4, 26.3], [95.3, 26.1], [95.2, 25.9], [95.1, 25.8], [95.0, 25.7], [94.8, 25.5], [94.7, 25.3], [94.5, 24.9], [94.5, 24.7], [94.4, 24.4], [94.3, 23.9], [94.2, 23.5], [94.2, 23.4], [94.2, 23.1], [94.1, 22.7], [94.1, 22.6], [94.0, 22.4], [94.0, 21.8], [94.0, 21.8], [93.9, 21.1], [93.9, 21.0], [93.9, 20.9], [93.9, 20.6], [93.9, 20.6], [93.8, 20.3], [93.8, 20.2], [93.8, 20.1], [93.8, 20.0], [93.9, 19.6], [93.9, 19.1], [93.9, 18.7], [94.0, 18.3], [94.0, 17.9], [94.1, 17.4], [94.1, 17.0], [94.1, 16.8], [93.8, 16.6], [93.7, 16.0], [93.5, 15.0], [93.2, 14.4], [92.8, 13.8], [92.3, 13.1], [92.0, 12.5], [91.8, 11.7], [91.8, 11.1], [91.9, 10.3], [91.8, 9.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_19", "coordinates": [[91.8, 9.3], [92.0, 8.8], [92.4, 7.8], [93.0, 6.8], [93.0, 5.9], [92.9, 5.3], [93.1, 4.2], [93.6, 3.8], [94.5, 2.9], [94.9, 2.3], [95.4, 2.1], [96.2, 1.5], [96.8, 0.8], [97.4, -0.3], [97.9, -1.3], [98.6, -2.0], [99.1, -2.8], [99.5, -2.8], [99.7, -3.2], [100.2, -4.0], [100.8, -4.6], [101.4, -5.1], [102.3, -6.3], [102.8, -6.4], [103.4, -7.0], [104.1, -7.3], [104.4, -7.1], [105.0, -7.4], [105.7, -7.6], [106.1, -7.5], [106.4, -7.8], [107.0, -8.0], [107.8, -8.3], [108.5, -8.5], [109.3, -8.8], [110.3, -9.0], [110.9, -9.0], [111.6, -9.3], [112.6, -9.4], [113.2, -9.3], [113.5, -9.2], [114.4, -9.3], [114.9, -9.4], [116.4, -9.5], [118.1, -10.2], [119.9, -10.3], [122.4, -10.3], [123.3, -9.3], [124.5, -7.9], [125.8, -7.5], [127.9, -7.4], [130.0, -7.2], [131.3, -6.1], [131.1, -4.6], [130.7, -3.4], [130.6, -1.8], [130.7, -0.3], [130.9, 1.1]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_20", "coordinates": [[-198.8, -61.8], [-199.1, -61.6], [-201.2, -59.7], [-201.2, -59.6], [-201.4, -59.5], [-201.5, -59.4], [-201.5, -59.3], [-201.6, -59.2], [-201.7, -59.1], [-201.8, -59.0], [-201.9, -58.9], [-202.0, -58.8], [-202.1, -58.8], [-202.2, -58.7], [-202.2, -58.6], [-202.3, -58.5], [-202.4, -58.4], [-202.5, -58.3], [-202.7, -58.1], [-202.7, -57.9], [-202.7, -57.8], [-202.6, -57.7], [-202.6, -57.5], [-202.5, -57.4], [-202.4, -57.3], [-202.3, -57.2], [-202.3, -57.1], [-202.3, -56.9], [-202.1, -56.8], [-202.0, -56.6], [-201.9, -56.5], [-201.7, -56.4], [-201.6, -56.1], [-201.4, -55.9], [-201.5, -55.8], [-201.4, -55.6], [-201.3, -55.4], [-201.3, -55.3], [-201.2, -55.1], [-201.1, -54.9], [-200.9, -54.7], [-200.8, -54.4], [-200.7, -54.2], [-200.6, -54.1], [-200.5, -53.9], [-200.3, -53.7], [-200.1, -53.5], [-199.4, -52.7], [-198.9, -52.1], [-197.6, -50.9], [-196.7, -50.3], [-195.9, -49.7], [-195.7, -49.1], [-195.3, -48.6], [-194.7, -47.9], [-194.1, -47.0], [-193.5, -46.0], [-192.7, -45.2], [-192.2, -44.7], [-191.0, -44.1], [-190.1, -43.7], [-189.0, -43.2], [-187.8, -42.6], [-186.7, -42.0], [-185.6, -41.7], [-184.7, -41.6], [-183.6, -41.1], [-183.1, -40.7], [-181.8, -39.4], [-181.2, -38.7], [-180.4, -37.4], [-179.2, -35.8], [-178.5, -34.4], [-178.0, -33.3], [-177.1, -31.7], [-176.9, -31.1], [-176.2, -29.8], [-175.7, -28.6], [-175.1, -27.2], [-174.5, -25.4], [-173.8, -23.6], [-173.5, -22.6], [-172.9, -21.4], [-172.1, -19.7], [-171.4, -18.1], [-171.1, -16.8], [-171.1, -15.4], [-171.6, -14.5], [-171.6, -14.5], [-172.8, -14.5], [-173.9, -14.5], [-174.9, -14.5], [-176.2, -14.6], [-177.7, -14.7], [-178.9, -15.1], [-179.3, -15.2], [-180.3, -15.5], [-181.7, -16.1], [-182.8, -17.2], [-183.8, -18.3], [-184.4, -19.3], [-185.7, -21.1], [-186.5, -22.0], [-187.5, -22.9], [-188.5, -23.7], [-189.4, -23.7], [-190.1, -23.1], [-190.9, -22.1], [-191.6, -21.0], [-192.0, -20.0], [-192.6, -19.0], [-193.1, -17.8], [-193.6, -16.8], [-194.2, -15.0], [-194.6, -13.6], [-195.2, -12.2], [-196.2, -11.8], [-197.1, -11.7], [-198.3, -11.6], [-199.5, -11.0], [-200.5, -10.4], [-201.5, -10.0], [-202.3, -9.6], [-203.4, -8.9], [-204.7, -8.0], [-205.8, -7.2], [-206.8, -6.7], [-207.6, -6.7], [-208.7, -6.9], [-209.5, -7.1], [-210.3, -7.3], [-211.4, -7.5], [-212.5, -7.3], [-213.0, -6.7], [-213.4, -5.9], [-213.9, -5.2], [-214.5, -4.4], [-215.4, -3.6], [-216.2, -3.0], [-217.3, -2.3], [-218.6, -1.9], [-219.9, -1.7], [-220.9, -1.6], [-222.2, -1.4], [-223.2, -1.4], [-223.5, -1.2], [-223.8, -1.0], [-224.1, -0.7], [-224.3, -0.5], [-224.6, -0.2], [-224.9, 0.0], [-225.7, 0.2], [-226.6, 0.5], [-227.4, 0.7], [-228.2, 1.0], [-229.1, 1.1]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_21", "coordinates": [[-112.0, -34.9], [-111.69999999999999, -38.4], [-112.19999999999999, -40.7], [-112.69999999999999, -42.7], [-113.30000000000001, -45.2], [-114.1, -48.3], [-115.0, -50.0], [-116.4, -49.6], [-117.0, -50.8], [-118.4, -53.2], [-118.0, -53.3], [-119.0, -54.5], [-120.5, -54.3], [-122.30000000000001, -55.8], [-126.4, -54.7], [-127.0, -55.3], [-128.7, -54.9], [-132.4, -54.1], [-133.0, -54.9], [-136.9, -54.0], [-137.6, -55.0], [-137.9, -54.9], [-139.2, -56.2], [-139.9, -56.0], [-140.8, -56.8], [-144.7, -55.7], [-146.6, -57.3], [-147.1, -57.1], [-149.3, -58.7], [-149.1, -58.8], [-150.8, -60.0], [-152.1, -59.6], [-157.5, -63.1], [-161.3, -61.7], [-164.4, -63.3], [-165.9, -62.8], [-170.8, -65.1], [-171.9, -64.7], [-177.7, -66.7], [-185.2, -63.7], [-186.6, -64.1], [-189.5, -62.5], [-191.6, -63.0], [-192.6, -62.6], [-193.6, -62.9], [-195.0, -62.0], [-196.2, -62.3], [-196.8, -61.8], [-198.8, -61.8]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_22", "coordinates": [[-112.0, -34.9], [-110.9, -35.1], [-110.19999999999999, -35.2], [-108.9, -35.2], [-107.69999999999999, -35.3], [-106.6, -35.5], [-105.30000000000001, -35.7], [-103.69999999999999, -35.8], [-101.80000000000001, -35.9], [-100.30000000000001, -36.1], [-98.39999999999998, -36.3], [-97.0, -36.4], [-96.30000000000001, -36.5], [-96.30000000000001, -37.1], [-94.60000000000002, -37.2], [-93.60000000000002, -37.4], [-93.69999999999999, -38.4], [-92.5, -38.8], [-91.80000000000001, -39.1], [-91.69999999999999, -40.3], [-91.10000000000002, -41.2], [-88.69999999999999, -41.3], [-86.39999999999998, -41.5], [-84.69999999999999, -41.7], [-83.89999999999998, -41.8], [-83.10000000000002, -41.9], [-82.89999999999998, -43.3], [-82.69999999999999, -44.3], [-82.30000000000001, -44.8], [-80.60000000000002, -44.9], [-79.60000000000002, -45.0], [-78.5, -45.2], [-77.30000000000001, -45.6], [-76.60000000000002, -45.6], [-76.19999999999999, -45.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_23", "coordinates": [[-76.19999999999999, -45.3], [-76.19999999999999, -44.8], [-76.19999999999999, -43.9], [-75.89999999999998, -43.0], [-75.69999999999999, -41.8], [-75.60000000000002, -40.5], [-75.10000000000002, -38.9], [-74.30000000000001, -37.6], [-73.5, -36.4], [-73.10000000000002, -35.1], [-72.69999999999999, -33.7], [-72.60000000000002, -32.0], [-72.10000000000002, -30.2], [-71.60000000000002, -28.5], [-71.19999999999999, -26.6], [-70.80000000000001, -24.9], [-70.60000000000002, -23.4], [-70.80000000000001, -22.2], [-71.19999999999999, -21.2], [-71.60000000000002, -20.4], [-72.19999999999999, -19.5], [-73.10000000000002, -18.1], [-74.0, -17.4], [-75.0, -16.6], [-75.80000000000001, -15.9], [-76.80000000000001, -15.1], [-77.89999999999998, -13.9], [-78.69999999999999, -12.8], [-79.5, -11.7], [-80.10000000000002, -10.5], [-80.60000000000002, -9.4], [-81.0, -7.8], [-81.30000000000001, -6.5], [-81.30000000000001, -5.4], [-81.30000000000001, -4.1], [-81.0, -2.5], [-80.89999999999998, -1.2], [-80.30000000000001, 0.3], [-79.80000000000001, 1.0], [-79.10000000000002, 1.9], [-78.80000000000001, 2.2], [-78.30000000000001, 2.6], [-78.10000000000002, 3.6]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_24", "coordinates": [[-102.60000000000002, 2.3], [-102.60000000000002, -0.5], [-102.80000000000001, -2.9], [-102.80000000000001, -4.1], [-104.30000000000001, -4.3], [-105.69999999999999, -4.7], [-106.30000000000001, -4.9], [-107.0, -6.4], [-107.6, -8.1], [-107.80000000000001, -9.0], [-109.19999999999999, -9.3], [-109.9, -9.4], [-110.6, -11.0], [-111.19999999999999, -12.6], [-111.4, -13.6], [-112.19999999999999, -13.7], [-112.6, -15.7], [-113.1, -17.8], [-113.5, -19.4], [-113.69999999999999, -20.0], [-113.9, -20.7], [-114.19999999999999, -20.7], [-114.5, -22.7], [-115.19999999999999, -22.8], [-115.1, -24.1], [-114.9, -26.3], [-114.4, -26.8], [-113.9, -26.7], [-113.4, -27.2], [-112.1, -29.5], [-112.1, -31.1], [-112.1, -32.0], [-112.0, -33.8], [-112.0, -34.9]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_25", "coordinates": [[-102.60000000000002, 2.3], [-102.19999999999999, 2.2], [-101.30000000000001, 2.2], [-100.5, 2.1], [-99.69999999999999, 2.1], [-98.60000000000002, 2.1], [-97.60000000000002, 2.1], [-96.69999999999999, 2.1], [-95.80000000000001, 2.1], [-95.0, 2.1], [-94.19999999999999, 2.1], [-93.10000000000002, 2.0], [-92.10000000000002, 2.0], [-91.0, 1.9], [-90.60000000000002, 1.6], [-90.60000000000002, 1.1], [-89.60000000000002, 1.1], [-88.39999999999998, 1.1], [-87.39999999999998, 1.1], [-85.89999999999998, 1.0], [-85.19999999999999, 0.9], [-85.19999999999999, 1.4], [-85.19999999999999, 1.8], [-84.5, 1.8], [-84.5, 2.5], [-84.5, 3.4], [-83.69999999999999, 3.5], [-83.0, 3.5], [-82.39999999999998, 3.5], [-82.5, 4.0], [-82.39999999999998, 4.6], [-82.5, 5.2], [-82.5, 5.9], [-82.5, 6.5], [-82.5, 6.9], [-82.5, 7.0], [-82.39999999999998, 7.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_26", "coordinates": [[-107.69999999999999, 22.9], [-107.9, 22.7], [-108.1, 22.3], [-108.4, 21.7], [-108.80000000000001, 20.9], [-109.19999999999999, 20.2], [-109.4, 19.8], [-109.19999999999999, 19.7], [-108.6, 19.4], [-107.9, 19.2], [-107.1, 18.9], [-106.30000000000001, 18.5], [-105.6, 18.2], [-105.30000000000001, 18.1], [-105.4, 17.3], [-105.4, 16.5], [-105.4, 15.2], [-105.0, 15.2], [-104.4, 15.2], [-104.4, 14.3], [-104.4, 13.0], [-104.4, 11.9], [-104.4, 11.0], [-104.30000000000001, 10.4], [-104.0, 10.2], [-103.69999999999999, 10.1], [-103.69999999999999, 9.5], [-103.60000000000002, 8.9], [-103.60000000000002, 8.5], [-103.10000000000002, 8.5], [-102.60000000000002, 8.4], [-102.60000000000002, 7.9], [-102.60000000000002, 7.0], [-102.60000000000002, 6.2], [-102.60000000000002, 5.5], [-102.60000000000002, 4.9], [-102.60000000000002, 4.3], [-102.60000000000002, 3.5], [-102.60000000000002, 2.7], [-102.60000000000002, 2.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_27", "coordinates": [[-78.10000000000002, 3.6], [-77.89999999999998, 4.3], [-77.80000000000001, 4.9], [-77.80000000000001, 5.4], [-78.0, 6.0], [-78.10000000000002, 6.5], [-78.39999999999998, 7.1], [-78.69999999999999, 7.4], [-79.10000000000002, 7.5], [-79.5, 7.5], [-79.89999999999998, 7.2], [-80.30000000000001, 7.0], [-80.80000000000001, 6.9], [-81.30000000000001, 7.0], [-81.69999999999999, 7.1], [-82.0, 7.2], [-82.39999999999998, 7.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_28", "coordinates": [[-82.39999999999998, 7.2], [-82.69999999999999, 7.3], [-83.0, 7.5], [-83.39999999999998, 7.7], [-83.80000000000001, 8.0], [-84.19999999999999, 8.3], [-84.60000000000002, 8.7], [-85.19999999999999, 9.1], [-85.69999999999999, 9.5], [-86.19999999999999, 10.0], [-86.69999999999999, 10.4], [-87.19999999999999, 10.8], [-87.80000000000001, 11.1], [-88.5, 11.5], [-89.0, 11.7], [-89.60000000000002, 12.0], [-90.10000000000002, 12.2], [-90.5, 12.4], [-91.0, 12.7], [-91.0, 12.7], [-91.5, 13.0], [-92.10000000000002, 13.2], [-92.69999999999999, 13.6], [-93.30000000000001, 13.9], [-93.80000000000001, 14.3], [-94.5, 14.6], [-95.10000000000002, 14.8], [-95.80000000000001, 15.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_29", "coordinates": [[-95.80000000000001, 15.0], [-96.39999999999998, 15.1], [-97.0, 15.2], [-97.60000000000002, 15.3], [-98.30000000000001, 15.6], [-98.80000000000001, 15.8], [-99.39999999999998, 16.1], [-99.89999999999998, 16.3], [-100.69999999999999, 16.6], [-101.39999999999998, 16.9], [-102.10000000000002, 17.2], [-102.89999999999998, 17.6], [-103.60000000000002, 18.0], [-104.30000000000001, 18.4], [-104.80000000000001, 18.9], [-105.19999999999999, 19.2], [-105.6, 19.6], [-105.69999999999999, 20.2], [-105.69999999999999, 20.6], [-105.6, 21.2], [-105.9, 21.6], [-106.19999999999999, 21.9], [-106.80000000000001, 22.1], [-107.30000000000001, 22.4], [-107.6, 22.6], [-107.69999999999999, 22.9]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_30", "coordinates": [[-107.69999999999999, 22.9], [-108.0, 23.0], [-108.30000000000001, 23.5], [-108.69999999999999, 24.1], [-109.0, 24.5], [-109.1, 24.6], [-109.1, 24.7], [-109.19999999999999, 24.9], [-109.69999999999999, 25.1], [-109.80000000000001, 25.3], [-109.9, 25.5], [-110.0, 25.6], [-110.1, 25.8], [-110.30000000000001, 26.0], [-110.30000000000001, 26.1], [-110.4, 26.2], [-110.5, 26.4], [-110.69999999999999, 26.6], [-110.9, 26.8], [-111.1, 27.1], [-111.30000000000001, 27.3], [-111.5, 27.5], [-111.6, 27.7], [-111.80000000000001, 27.9], [-111.9, 28.0], [-112.1, 28.3], [-112.30000000000001, 28.5], [-112.5, 28.8], [-112.69999999999999, 29.1], [-113.1, 29.5], [-113.30000000000001, 29.7], [-113.5, 29.9], [-113.6, 30.1], [-113.9, 30.5], [-114.19999999999999, 30.8], [-114.30000000000001, 31.0], [-114.4, 31.3], [-114.5, 31.6], [-114.69999999999999, 31.8], [-114.69999999999999, 31.9], [-114.9, 32.1], [-115.1, 32.3], [-115.19999999999999, 32.5], [-115.5, 32.9], [-115.6, 33.3], [-116.55000000000001, 34.0], [-117.30000000000001, 34.15], [-118.5, 34.7], [-119.35, 34.9], [-120.05000000000001, 35.5], [-120.55000000000001, 36.0], [-121.1, 36.5], [-121.69999999999999, 37.0], [-122.30000000000001, 37.5], [-122.75, 38.0], [-123.19999999999999, 38.5], [-123.69999999999999, 39.0], [-123.9, 39.5], [-124.0, 40.0], [-124.4, 40.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_31", "coordinates": [[-129.2, 50.5], [-129.9, 51.0], [-130.7, 51.5], [-131.3, 52.0], [-132.8, 53.0], [-133.9, 54.0], [-134.5, 55.0], [-135.5, 56.0], [-136.1, 57.0], [-136.5, 58.0], [-137.0, 58.5], [-138.0, 59.0], [-139.0, 59.5], [-140.0, 59.9], [-141.0, 60.1], [-142.0, 59.8], [-143.0, 59.4], [-144.0, 59.3], [-145.0, 59.2], [-146.0, 59.0], [-147.0, 58.3], [-148.0, 57.8], [-150.0, 56.8], [-152.0, 56.0], [-154.0, 55.2], [-156.0, 54.7], [-158.0, 54.0], [-160.0, 53.7], [-162.0, 53.2], [-164.0, 52.8], [-166.0, 52.2], [-168.0, 51.7], [-170.0, 51.3], [-172.0, 51.0], [-174.0, 50.8], [-176.0, 50.5], [-178.0, 50.4], [-180.0, 50.5], [-182.0, 50.5], [-184.0, 50.8], [-186.0, 51.3], [-188.0, 51.9], [-190.0, 52.6], [-192.0, 53.6], [-194.0, 54.3], [-196.0, 55.5], [-197.0, 54.0], [-197.8, 53.0], [-199.0, 52.0], [-199.5, 51.0], [-200.5, 50.0], [-202.2, 49.0], [-203.8, 48.0], [-205.0, 47.0], [-206.2, 46.0], [-208.0, 45.0], [-210.0, 44.0], [-211.5, 43.0], [-213.0, 42.0], [-215.2, 41.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_32", "coordinates": [[-124.4, 40.2], [-125.0, 40.4], [-127.5, 40.4], [-127.4, 41.6], [-127.19999999999999, 41.6], [-126.9, 42.3], [-126.5, 43.0], [-127.80000000000001, 43.5], [-129.2, 44.0], [-130.5, 44.5], [-130.1, 45.5], [-129.6, 46.5], [-129.2, 47.5], [-128.8, 48.2], [-129.0, 48.5], [-130.5, 49.2], [-130.4, 49.5], [-129.7, 50.1], [-129.2, 50.5]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_33", "coordinates": [[-124.4, 40.2], [-124.69999999999999, 41.0], [-124.9, 42.0], [-125.0, 43.0], [-125.0, 44.0], [-125.0, 45.0], [-125.1, 46.0], [-125.5, 47.0], [-126.1, 48.0], [-127.0, 49.0], [-128.2, 50.0], [-129.2, 50.5]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_34", "coordinates": [[144.8, 41.0], [144.5, 40.0], [144.2, 39.0], [144.0, 38.0], [143.5, 37.0], [142.8, 36.0], [142.0, 35.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_35", "coordinates": [[142.0, 35.0], [138.3, 34.5], [136.5, 34.1], [135.3, 33.6], [133.7, 32.6], [132.4, 31.7], [131.0, 30.4], [130.5, 29.2], [129.9, 28.2], [129.0, 27.1], [128.1, 25.9], [127.2, 24.8], [125.9, 24.0], [124.8, 23.6], [123.2, 23.2], [121.9, 22.9], [121.6, 22.3], [121.8, 21.4], [122.2, 20.1], [122.4, 18.9], [122.5, 17.8], [122.5, 16.0], [123.6, 14.8], [124.3, 13.8], [125.1, 12.2], [125.9, 10.6], [126.4, 8.9], [126.7, 7.6], [126.9, 6.1], [128.1, 4.9], [128.7, 4.0], [130.0, 2.7], [130.5, 1.9], [130.9, 1.1]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_36", "coordinates": [[130.9, 1.1], [131.0, 1.2], [132.1, 3.1], [133.4, 4.5], [134.3, 5.9], [135.4, 7.8], [136.7, 8.1], [137.8, 8.8], [138.6, 10.1], [140.6, 10.7], [142.3, 11.2], [144.8, 12.3], [146.6, 13.9], [147.3, 15.6], [147.3, 17.5], [147.3, 18.8], [147.3, 20.0], [147.0, 21.0], [146.2, 22.0], [145.0, 23.0], [144.0, 24.0], [143.0, 25.0], [143.0, 26.0], [143.2, 27.0], [143.2, 28.0], [142.8, 29.0], [142.5, 30.0], [142.2, 31.0], [142.0, 33.0], [142.0, 34.0], [142.0, 35.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_37", "coordinates": [[-70.80000000000001, -55.4], [-69.0, -55.6], [-66.89999999999998, -55.6], [-65.69999999999999, -55.5], [-64.80000000000001, -55.6], [-63.39999999999998, -55.7], [-62.30000000000001, -55.8], [-60.10000000000002, -56.0], [-60.0, -56.0], [-57.5, -55.9], [-55.0, -55.7], [-52.5, -55.6], [-50.0, -55.5], [-48.19999999999999, -55.4], [-46.5, -55.2], [-44.69999999999999, -55.1], [-43.0, -55.0], [-42.19999999999999, -55.0], [-41.5, -54.9], [-40.69999999999999, -54.8], [-40.0, -54.8], [-37.5, -54.8], [-35.0, -54.8], [-32.5, -54.8], [-30.0, -54.8], [-29.30000000000001, -54.8], [-28.5, -54.9], [-27.0, -55.0], [-26.5, -55.2], [-26.0, -55.4], [-25.5, -55.5], [-25.0, -55.7], [-24.80000000000001, -55.8], [-24.5, -55.9], [-24.19999999999999, -56.0], [-24.0, -56.1], [-23.69999999999999, -56.6], [-23.399999999999977, -57.0], [-23.100000000000023, -57.5], [-22.80000000000001, -58.0], [-23.100000000000023, -58.4], [-23.399999999999977, -58.8], [-23.69999999999999, -59.2], [-24.0, -59.6], [-24.899999999999977, -60.7], [-25.600000000000023, -60.7], [-33.30000000000001, -60.0], [-37.5, -61.0], [-47.5, -60.0], [-56.0, -60.7], [-70.80000000000001, -55.4]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}]} +{"version": "1.0", "cross section":[[0, 0], [180, 0]], "interpolation": "continuous monotone spline", "coordinate system": {"model": "spherical", "depth method": "starting point"}, "features": [{"model": "continental plate", "name": "craton_2", "coordinates": [[7.7, 5.978], [8.994, 8.115], [10.795, 8.059], [12.651, 9.128], [14.283, 9.634], [15.914, 11.491], [17.94, 13.179], [19.402, 13.629], [20.752, 12.616], [21.54, 10.985], [23.678, 11.322], [25.141, 10.31], [27.11, 9.016], [28.91, 8.509], [30.71, 7.778], [32.173, 6.821], [32.623, 5.753], [32.511, 2.602], [32.117, 1.027], [32.342, -0.605], [32.511, -2.63], [32.848, -3.924], [34.48, -4.487], [36.505, -5.781], [36.787, -6.906], [36.618, -8.144], [35.493, -9.606], [34.255, -10.225], [33.58, -11.575], [33.017, -13.545], [31.779, -14.051], [29.81, -12.813], [28.01, -11.801], [27.447, -9.663], [26.716, -9.888], [26.604, -12.307], [27.054, -14.782], [28.179, -16.751], [29.445, -19.396], [31.414, -21.252], [32.651, -23.221], [32.37, -26.147], [30.851, -28.228], [29.051, -29.354], [28.038, -31.041], [27.082, -32.167], [25.338, -30.816], [23.087, -30.085], [21.512, -29.297], [21.906, -26.653], [22.75, -24.234], [23.875, -22.377], [24.381, -19.789], [22.581, -19.902], [22.018, -21.646], [20.949, -22.546], [18.361, -21.984], [15.323, -21.027], [13.917, -20.633], [12.623, -19.677], [12.173, -17.033], [12.454, -14.557], [14.311, -12.026], [14.367, -10.0], [13.411, -6.287], [12.454, -4.656], [10.429, -3.362], [9.191, -1.111], [10.204, 1.533], [10.598, 3.615], [7.56, 5.077], [7.728, 5.865], [7.728, 5.921], [7.7, 5.978]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_3", "coordinates": [[19.599, 47.582], [21.962, 46.822], [25.056, 45.191], [30.514, 45.753], [39.403, 46.034], [45.985, 46.203], [51.555, 46.091], [51.555, 46.091], [54.311, 45.359], [56.562, 48.622], [57.912, 50.085], [58.081, 52.954], [58.643, 55.036], [58.306, 57.061], [61.006, 57.737], [60.5, 59.368], [59.487, 61.225], [57.124, 61.843], [56.168, 63.419], [54.874, 64.713], [53.524, 65.838], [51.723, 66.344], [49.586, 67.019], [46.773, 68.37], [45.591, 69.945], [43.285, 71.351], [40.021, 71.576], [36.421, 71.801], [31.639, 72.026], [27.025, 71.745], [22.975, 71.689], [20.499, 70.62], [17.743, 69.213], [15.042, 67.638], [12.904, 66.232], [8.91, 64.375], [6.041, 62.575], [3.621, 61.112], [3.621, 59.424], [3.621, 57.511], [4.747, 56.161], [5.253, 54.755], [4.69, 53.63], [5.872, 51.717], [9.022, 50.873], [13.129, 50.423], [15.38, 49.916], [18.474, 48.876], [19.599, 47.582]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_4", "coordinates": [[84.115, 67.301], [87.097, 69.382], [89.46, 70.395], [91.71, 71.183], [93.679, 71.408], [96.323, 71.576], [99.361, 71.408], [99.586, 73.602], [100.937, 73.996], [103.3, 73.939], [105.719, 72.758], [106.9, 72.364], [108.982, 72.983], [111.007, 73.377], [113.145, 73.827], [115.283, 73.377], [117.815, 73.208], [121.303, 72.477], [125.691, 72.533], [127.097, 72.42], [127.548, 71.351], [127.154, 69.382], [126.76, 67.301], [126.704, 65.838], [128.448, 65.275], [128.729, 64.375], [129.404, 62.069], [129.404, 60.212], [131.148, 61.506], [133.736, 61.562], [135.255, 60.099], [136.662, 58.468], [136.999, 55.936], [136.718, 52.954], [133.23, 52.279], [121.584, 52.223], [117.871, 53.405], [118.546, 55.542], [118.152, 57.624], [115.677, 59.424], [113.651, 59.762], [110.895, 58.58], [110.051, 57.118], [109.376, 55.205], [108.813, 53.067], [108.926, 51.154], [106.113, 50.141], [101.949, 50.817], [98.405, 50.648], [95.311, 51.323], [92.892, 53.798], [89.516, 54.755], [86.534, 57.23], [85.747, 60.156], [85.24, 64.15], [84.171, 67.357], [84.171, 67.357], [84.115, 67.301]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_5", "coordinates": [[70.613, 24.093], [72.919, 24.037], [75.17, 23.756], [77.139, 24.318], [78.827, 23.531], [80.402, 21.111], [81.64, 19.592], [82.202, 18.073], [81.415, 16.104], [78.995, 17.004], [78.433, 15.936], [79.389, 15.148], [79.783, 13.685], [79.389, 11.491], [77.701, 9.297], [77.026, 8.397], [75.62, 11.097], [73.819, 14.473], [73.538, 17.173], [73.032, 20.324], [72.188, 21.393], [70.444, 21.393], [70.556, 23.024], [70.556, 23.024], [70.613, 24.093]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_6", "coordinates": [[114.411, -21.815], [116.478, -20.633], [119.432, -19.536], [121.457, -18.228], [122.934, -16.414], [124.706, -14.979], [126.479, -14.388], [128.251, -14.726], [129.432, -14.135], [131.373, -12.743], [134.116, -11.561], [134.285, -12.743], [132.681, -15.275], [131.5, -16.245], [129.474, -16.625], [126.268, -18.144], [125.424, -19.41], [123.905, -19.536], [122.554, -19.916], [122.428, -22.321], [123.441, -23.376], [124.495, -23.882], [124.833, -25.528], [125.93, -26.963], [126.521, -27.933], [127.491, -28.861], [129.77, -29.916], [131.247, -30.465], [133.441, -31.224], [133.989, -32.363], [130.656, -31.646], [127.112, -31.52], [125.171, -32.363], [123.905, -33.503], [120.74, -33.292], [119.516, -34.515], [118.293, -35.655], [116.225, -35.612], [115.424, -34.558], [115.846, -31.562], [114.369, -29.536], [113.229, -28.102], [113.44, -23.587], [114.411, -21.773], [114.411, -21.773], [114.411, -21.815]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_7", "coordinates": [[292.304, 77.343], [298.38, 75.993], [302.768, 75.486], [307.832, 72.617], [309.688, 68.398], [310.195, 64.009], [313.233, 62.828], [319.815, 64.853], [325.722, 69.073], [330.279, 70.761], [332.811, 74.136], [332.811, 76.837], [330.786, 81.056], [326.904, 82.406], [321.672, 82.575], [316.946, 82.069], [305.469, 81.056], [297.199, 81.056], [290.448, 79.2], [290.448, 79.2], [292.304, 77.343]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_8", "coordinates": [[228.506, 68.904], [228.674, 64.516], [230.362, 62.659], [235.932, 59.621], [237.957, 55.571], [238.295, 51.013], [243.865, 47.132], [247.071, 42.912], [248.928, 39.03], [253.316, 37.005], [261.418, 38.861], [268.675, 41.562], [273.232, 40.887], [276.945, 41.731], [281.84, 42.743], [287.072, 44.769], [293.317, 48.313], [295.849, 52.026], [297.368, 55.064], [296.692, 58.271], [292.979, 62.828], [293.317, 65.36], [292.304, 68.06], [287.578, 69.917], [280.996, 71.436], [274.751, 71.436], [272.388, 73.799], [271.376, 77.174], [269.519, 78.018], [257.029, 76.33], [246.059, 76.162], [238.295, 74.305], [234.75, 73.292], [234.75, 73.292], [228.506, 68.904]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_9", "coordinates": [[268.675, 80.55], [274.245, 79.537], [274.414, 77.005], [279.477, 76.499], [285.722, 78.187], [292.304, 81.225], [279.814, 82.069], [279.814, 82.069], [268.675, 80.55]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_10", "coordinates": [[289.266, 3.587], [289.941, -1.983], [292.304, -5.865], [294.836, -9.916], [297.874, -15.317], [300.574, -18.017], [305.131, -17.511], [311.207, -13.123], [312.895, -9.747], [311.545, -0.464], [307.663, 5.949], [303.106, 7.468], [298.043, 9.325], [292.473, 7.3], [292.473, 7.3], [289.266, 3.587]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_11", "coordinates": [[312.051, -16.667], [313.739, -20.718], [318.127, -22.574], [320.659, -21.73], [322.347, -16.329], [323.191, -12.11], [319.14, -8.397], [314.921, -8.903], [311.883, -12.954], [311.883, -12.954], [312.051, -16.667]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "continental plate", "name": "craton_12", "coordinates": [[347.326, 25.697], [350.027, 28.228], [353.402, 31.604], [357.622, 32.448], [359.478, 30.591], [358.803, 24.178], [359.309, 21.983], [361.166, 19.114], [360.153, 14.22], [360.66, 5.274], [357.284, 5.443], [352.896, 5.106], [346.82, 10.844], [346.313, 15.063], [345.807, 21.308], [345.807, 21.308], [347.326, 25.697]], "min depth": -1000.0, "max depth": 300000.0, "composition models": [{"model": "uniform", "compositions": [5]}]}, {"model": "fault", "name": "fault_2", "coordinates": [[144.8, 41.0], [143.0, 42.0], [142.2, 43.0], [142.0, 44.0], [142.0, 46.0], [142.2, 48.0], [142.5, 50.0], [142.5, 52.5], [142.5, 55.0], [147.0, 61.9], [146.2, 63.3], [146.1, 63.9], [142.1, 66.2], [140.0, 67.7], [126.2, 70.2], [122.8, 75.5], [126.7, 78.2], [122.0, 80.7], [98.5, 85.0], [43.0, 86.5], [7.5, 84.9], [0.0, 84.1], [-4.5, 83.4], [-6.0, 82.1], [-3.5, 80.9], [-2.0, 80.38], [4.25, 79.6], [3.0, 79.04], [7.0, 78.45], [7.6, 77.9], [7.4, 76.75], [7.2, 76.55], [7.3, 75.6], [8.4, 74.8], [8.4, 74.6], [8.7, 74.35], [8.8, 73.95], [8.25, 73.55], [7.8, 73.4], [6.8, 73.25], [4.4, 72.8], [1.1, 72.2], [-4.699999999999989, 71.4], [-6.5, 70.92], [-12.0, 71.7], [-13.199999999999989, 70.92], [-13.800000000000011, 70.97], [-14.699999999999989, 70.55], [-15.399999999999977, 70.0], [-16.5, 68.9], [-17.30000000000001, 68.98], [-18.100000000000023, 68.4], [-18.5, 67.7], [-19.5, 66.7], [-16.5, 66.4], [-17.0, 66.0], [-17.0, 65.0], [-19.0, 63.7], [-22.5, 64.1], [-24.600000000000023, 63.0], [-27.0, 61.6], [-29.5, 60.0], [-34.0, 57.0], [-35.30000000000001, 55.2], [-35.19999999999999, 53.0], [-35.0, 52.7], [-31.80000000000001, 52.6], [-31.80000000000001, 52.2], [-30.0, 52.1], [-30.0, 51.2], [-29.0, 49.8], [-27.5, 47.8], [-27.399999999999977, 46.5], [-28.0, 45.0], [-28.19999999999999, 44.5], [-28.5, 43.8], [-29.0, 43.3], [-29.30000000000001, 42.9], [-29.30000000000001, 42.7], [-29.30000000000001, 42.3], [-29.30000000000001, 41.7], [-29.69999999999999, 40.0], [-29.75, 39.45]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_3", "coordinates": [[-29.75, 39.45], [-29.100000000000023, 39.3], [-28.100000000000023, 39.0], [-27.399999999999977, 38.8], [-26.80000000000001, 38.4], [-26.19999999999999, 38.1], [-25.399999999999977, 37.7], [-24.69999999999999, 37.3], [-24.100000000000023, 36.82], [-23.19999999999999, 36.97], [-21.5, 37.07], [-21.30000000000001, 37.1], [-20.899999999999977, 37.14], [-20.5, 37.13], [-20.19999999999999, 37.12], [-18.0, 37.8], [-16.0, 37.8], [-14.0, 37.0], [-10.0, 36.0], [-6.0, 36.0], [1.4, 36.2], [6.8, 36.4], [14.2, 38.5], [15.1, 38.5], [16.6, 38.3], [17.3, 38.9], [18.2, 39.7], [18.9, 40.2], [19.4, 39.9], [19.7, 39.1], [20.0, 38.2], [20.5, 37.3], [20.9, 36.5], [21.6, 35.8], [22.2, 35.2], [23.0, 34.7], [23.7, 34.4], [24.6, 34.2], [25.7, 34.3], [26.7, 34.4], [27.4, 34.5], [28.2, 34.8], [29.2, 35.2], [29.8, 35.7], [30.3, 35.8], [30.9, 35.4], [31.4, 34.9], [32.3, 34.3], [32.9, 34.2], [34.0, 34.6], [34.5, 35.0], [35.2, 35.6], [35.6, 35.9]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_4", "coordinates": [[-29.75, 39.45], [-29.94999999999999, 39.45], [-30.30000000000001, 38.4], [-30.649999999999977, 38.3], [-30.80000000000001, 38.0], [-31.149999999999977, 37.9], [-32.0, 37.5], [-33.19999999999999, 36.8], [-33.69999999999999, 36.5], [-34.10000000000002, 36.0], [-35.0, 35.0], [-36.39999999999998, 35.3], [-37.80000000000001, 33.5], [-39.30000000000001, 33.8], [-40.5, 31.9], [-41.69999999999999, 30.9], [-41.89999999999998, 30.5], [-42.0, 30.0], [-42.69999999999999, 30.1], [-43.14999999999998, 28.75], [-43.75, 28.75], [-44.19999999999999, 27.5], [-44.5, 26.9], [-44.80000000000001, 26.2], [-45.0, 25.7], [-45.39999999999998, 25.2], [-46.10000000000002, 24.5], [-46.30000000000001, 24.2], [-46.30000000000001, 23.9], [-46.30000000000001, 23.9], [-44.89999999999998, 23.7], [-45.0, 23.0], [-45.0, 22.8], [-45.5, 22.0], [-45.60000000000002, 21.3], [-45.69999999999999, 20.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_5", "coordinates": [[-45.7, 20.3], [-59.39999999999998, 16.3], [-59.80000000000001, 16.9], [-60.30000000000001, 17.4], [-61, 18.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_6", "coordinates": [[-61.0, 18.0], [-61.80000000000001, 18.6], [-62.5, 19.0], [-63.39999999999998, 19.4], [-64.10000000000002, 19.6], [-65.0, 19.7], [-66.0, 19.8], [-66.0, 19.8], [-67.10000000000002, 20.0], [-67.89999999999998, 20.1], [-68.80000000000001, 20.1], [-69.69999999999999, 20.1], [-70.80000000000001, 20.1], [-71.89999999999998, 20.1], [-72.80000000000001, 19.9], [-73.60000000000002, 19.9], [-75.0, 19.7], [-77.0, 19.7], [-80.0, 19.2], [-81.5, 18.8], [-81.5, 17.8], [-83.0, 17.5], [-85.0, 16.9], [-87.0, 16.4], [-89.30000000000001, 15.3], [-95.80000000000001, 15.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_7", "coordinates": [[-78.10000000000002, 3.6], [-77.5, 3.8], [-76.39999999999998, 4.3], [-75.39999999999998, 4.9], [-74.39999999999998, 5.5], [-73.5, 6.2], [-72.69999999999999, 7.0], [-72.0, 7.7], [-71.39999999999998, 8.4], [-70.69999999999999, 9.2], [-70.10000000000002, 9.9], [-69.30000000000001, 10.3], [-68.10000000000002, 10.4], [-66.60000000000002, 10.5], [-65.19999999999999, 10.4], [-64.0, 10.4], [-62.60000000000002, 10.4], [-61.69999999999999, 10.4], [-59.89999999999998, 13.1], [-59.69999999999999, 13.6], [-59.60000000000002, 14.1], [-59.39999999999998, 14.5], [-59.30000000000001, 14.9], [-59.30000000000001, 15.6], [-59.39999999999998, 16.3], [-59.80000000000001, 16.9], [-60.30000000000001, 17.4], [-61.0, 18.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_8", "coordinates": [[-45.69999999999999, 20.3], [-45.80000000000001, 19.8], [-46.10000000000002, 19.0], [-46.39999999999998, 18.5], [-46.60000000000002, 16.8], [-46.69999999999999, 15.4], [-45.0, 15.3], [-45.0, 13.7], [-44.80000000000001, 13.5], [-44.80000000000001, 12.6], [-44.10000000000002, 12.6], [-44.10000000000002, 12.1], [-43.69999999999999, 12.1], [-43.69999999999999, 10.8], [-40.89999999999998, 10.7], [-40.69999999999999, 9.5], [-40.19999999999999, 8.8], [-39.39999999999998, 8.7], [-39.19999999999999, 8.1], [-37.80000000000001, 8.1], [-37.39999999999998, 7.6], [-34.0, 7.2], [-32.60000000000002, 5.2], [-32.60000000000002, 4.0], [-31.399999999999977, 3.9], [-30.399999999999977, 0.9], [-26.5, 0.9], [-26.19999999999999, 0.6], [-25.0, 0.5], [-24.600000000000023, -1.2], [-16.30000000000001, 0.1], [-15.800000000000011, -1.4], [-12.800000000000011, -0.9], [-11.5, -6.8], [-13.399999999999977, -7.2], [-13.5, -8.0], [-13.0, -10.5], [-12.899999999999977, -11.5], [-14.899999999999977, -11.9], [-14.5, -13.5], [-14.300000000000011, -14.1], [-13.600000000000023, -14.0], [-13.5, -15.0], [-13.199999999999989, -16.1], [-14.300000000000011, -16.2], [-14.0, -17.0], [-14.100000000000023, -17.9], [-13.0, -17.8], [-12.0, -19.2], [-11.600000000000023, -21.1], [-12.5, -22.6], [-13.5, -23.1], [-13.399999999999977, -24.7], [-13.699999999999989, -25.1], [-13.800000000000011, -26.9], [-13.199999999999989, -27.3], [-12.899999999999977, -29.0], [-13.699999999999989, -29.2], [-13.399999999999977, -31.1], [-13.399999999999977, -31.7], [-13.300000000000011, -32.3], [-14.5, -32.5], [-14.5, -33.0], [-14.600000000000023, -33.9], [-15.199999999999989, -34.3], [-15.300000000000011, -35.3], [-17.80000000000001, -35.5], [-17.5, -37.3], [-16.0, -39.1], [-15.899999999999977, -40.1], [-16.80000000000001, -40.3], [-16.5, -41.7], [-16.0, -44.1], [-15.199999999999989, -45.2], [-13.800000000000011, -46.2], [-13.300000000000011, -47.4], [-10.699999999999989, -46.9], [-9.800000000000011, -48.2], [-8.0, -49.3], [-7.0, -50.1], [-4.800000000000011, -52.2], [-3.0, -53.5], [-2.3999999999999773, -54.3], [-1.5, -54.0], [-1.0, -54.6], [-0.6999999999999886, -54.8]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_9", "coordinates": [[-76.19999999999999, -45.3], [-76.19999999999999, -45.8], [-76.0, -46.9], [-75.89999999999998, -47.7], [-75.69999999999999, -48.8], [-75.39999999999998, -49.6], [-75.39999999999998, -50.7], [-75.30000000000001, -51.9], [-75.19999999999999, -53.0], [-74.30000000000001, -53.6], [-73.10000000000002, -54.4], [-72.0, -54.9], [-70.80000000000001, -55.4], [-69.0, -55.6], [-66.89999999999998, -55.6], [-65.69999999999999, -55.5], [-64.80000000000001, -55.6], [-63.39999999999998, -55.7], [-62.30000000000001, -55.8], [-60.10000000000002, -56.0], [-60.0, -56.0], [-57.5, -55.9], [-55.0, -55.7], [-52.5, -55.6], [-50.0, -55.5], [-48.19999999999999, -55.4], [-46.5, -55.2], [-44.69999999999999, -55.1], [-43.0, -55.0], [-42.19999999999999, -55.0], [-41.5, -54.9], [-40.69999999999999, -54.8], [-40.0, -54.8], [-37.5, -54.8], [-35.0, -54.8], [-32.5, -54.8], [-30.0, -54.8], [-29.30000000000001, -54.8], [-28.5, -54.9], [-27.0, -55.0], [-26.5, -55.2], [-26.0, -55.4], [-25.5, -55.5], [-25.0, -55.7], [-24.80000000000001, -55.8], [-24.5, -55.9], [-24.19999999999999, -56.0], [-24.0, -56.1], [-23.69999999999999, -56.6], [-23.399999999999977, -57.0], [-23.100000000000023, -57.5], [-22.80000000000001, -58.0], [-23.100000000000023, -58.4], [-23.399999999999977, -58.8], [-23.69999999999999, -59.2], [-24.0, -59.6], [-24.899999999999977, -60.7], [-25.600000000000023, -60.7], [-24.899999999999977, -60.8], [-24.399999999999977, -60.9], [-23.899999999999977, -61.0], [-23.30000000000001, -61.0], [-22.600000000000023, -61.0], [-21.899999999999977, -61.0], [-21.19999999999999, -61.0], [-20.5, -60.9], [-19.899999999999977, -60.9], [-19.399999999999977, -60.8], [-19.30000000000001, -60.5], [-19.0, -60.5], [-18.899999999999977, -60.2], [-18.5, -60.2], [-18.5, -59.6], [-18.0, -59.6], [-18.0, -59.1], [-16.19999999999999, -59.0], [-16.19999999999999, -58.3], [-7.0, -57.8], [-4.699999999999989, -55.8], [-1.6000000000000227, -55.6], [-1.6000000000000227, -55.3], [-1.3999999999999773, -55.1], [-1.1000000000000227, -54.8], [-0.6999999999999886, -54.8]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_10", "coordinates": [[-0.6999999999999886, -54.8], [-0.30000000000001137, -54.5], [0.8, -54.9], [3.0, -53.6], [4.0, -54.2], [5.0, -54.8], [7.6, -53.6], [8.3, -54.0], [11.5, -52.2], [12.7, -52.8], [13.9, -51.8], [15.1, -52.2], [15.9, -51.7], [18.5, -52.7], [20.0, -52.8], [22.5, -53.0], [25.5, -53.8], [26.2, -52.5], [27.8, -52.8], [29.5, -50.2], [30.5, -49.8], [32.5, -47.0], [34.8, -47.2], [35.7, -44.8], [39.3, -43.7], [42.4, -42.8], [42.7, -40.9], [46.0, -40.1], [46.2, -38.8], [49.0, -37.8], [52.2, -37.5], [52.3, -36.1], [53.3, -36.1], [53.4, -35.3], [54.1, -35.4], [54.2, -34.7], [55.1, -34.7], [57.0, -33.8], [57.0, -31.9], [58.3, -31.8], [59.0, -30.7], [60.8, -30.7], [61.0, -29.0], [63.2, -28.1], [66.1, -27.7], [67.8, -26.6], [68.9, -26.0], [69.3, -25.8], [70.05, -25.51]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_11", "coordinates": [[70.05, -25.51], [70.8, -26.3], [71.2, -26.2], [72.8, -27.5], [73.0, -27.4], [74.2, -28.2], [74.1, -28.4], [75.5, -29.5], [74.8, -30.2], [78.1, -32.9], [77.4, -33.7], [79.1, -35.1], [78.3, -35.8], [79.0, -36.3], [75.9, -39.1], [79.6, -42.2], [81.1, -41.2], [83.5, -43.2], [85.3, -41.8], [87.2, -43.0], [88.3, -42.0], [95.5, -46.0], [95.1, -46.3], [99.7, -48.2], [100.4, -47.6], [114.3, -51.2], [114.8, -50.4], [115.9, -50.7], [116.4, -49.8], [118.0, -50.1], [118.1, -49.8], [118.6, -49.9], [118.8, -49.7], [121.7, -50.2], [122.3, -49.2], [122.9, -49.3], [122.7, -49.8], [123.7, -50.0], [123.9, -49.6], [124.5, -49.7], [124.5, -49.4], [124.8, -49.4], [125.0, -49.1], [125.4, -49.2], [125.4, -49.3], [125.8, -49.4], [125.7, -49.6], [126.6, -49.7], [126.9, -48.9], [127.7, -49.0], [127.5, -49.9], [130.8, -50.3], [130.9, -50.1], [132.3, -50.1], [132.3, -50.3], [134.2, -50.3], [134.4, -50.4], [136.0, -50.4], [136.4, -50.8], [137.7, -50.6], [138.6, -52.0], [139.6, -51.9], [140.0, -52.8], [140.8, -52.7], [141.2, -54.2], [143.6, -54.1], [143.9, -54.4], [144.5, -54.3], [145.0, -54.7], [146.1, -54.7], [146.2, -55.7], [147.2, -55.6], [147.5, -57.6], [148.8, -57.5], [150.4, -60.5], [153.8, -60.1], [155.7, -62.9], [155.9, -63.0], [163.2, -61.8]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_12", "coordinates": [[58.3, 12.7], [57.9, 12.0], [57.4, 11.0], [56.75, 10.25], [57.22, 9.9], [57.5, 10.12], [58.15, 9.68], [58.06, 9.24], [58.44, 9.11], [58.28, 8.48], [59.04, 8.0], [59.24, 8.0], [59.8, 7.72], [59.56, 7.18], [60.0, 7.0], [60.16, 6.68], [60.32, 6.6], [60.4, 6.38], [60.76, 6.2], [61.6, 5.56], [61.54, 5.44], [62.2, 4.98], [62.06, 4.8], [62.56, 4.48], [62.52, 4.32], [63.08, 3.96], [63.32, 3.92], [63.52, 3.76], [64.14, 3.66], [65.12, 2.96], [65.88, 3.0], [66.76, 2.3], [66.66, 1.6], [67.04, 1.32], [67.25, 0.88], [66.8, 0.48], [67.02, 0.16], [67.02, 0.0], [67.22, -0.18], [67.0, -0.46], [67.34, -0.66], [67.34, -0.8], [67.58, -0.96], [67.34, -1.36], [68.04, -1.84], [67.92, -2.06], [68.19, -2.21], [67.88, -2.72], [68.21, -2.92], [67.98, -3.28], [68.61, -3.69], [68.28, -4.16], [68.73, -4.51], [68.73, -4.51], [68.36, -4.9], [68.6, -5.1], [68.78, -5.24], [67.98, -6.08], [68.5, -6.56], [67.92, -7.12], [68.25, -7.4], [67.86, -7.75], [68.28, -8.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_13", "coordinates": [[68.28, -8.2], [66.54, -9.64], [66.84, -9.88], [66.28, -10.4], [66.79, -10.78], [66.2, -11.3], [66.32, -11.56], [65.75, -12.0], [65.56, -12.14], [66.44, -12.88], [66.49, -13.12], [66.7, -13.34], [65.86, -13.99], [66.38, -14.8], [66.72, -14.9], [67.24, -15.44], [67.08, -15.68], [67.38, -16.0], [66.47, -16.61], [66.82, -16.96], [65.02, -17.98], [66.23, -20.25], [66.82, -19.95], [67.24, -20.38], [67.64, -20.13], [67.91, -20.64], [68.4, -20.46], [69.22, -22.13], [69.08, -22.2], [69.35, -22.69], [69.26, -22.74], [69.35, -22.91], [69.26, -22.96], [69.35, -23.13], [69.19, -23.25], [69.74, -24.22], [69.61, -24.3], [69.81, -24.62], [69.77, -24.65], [70.07, -25.19], [69.95, -25.32], [70.05, -25.51]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_14", "coordinates": [[68.73, -4.51], [80.0, -5.0], [89.0, -5.0], [89.5, 0.0], [90.0, 5.0], [91.8, 9.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_15", "coordinates": [[58.3, 12.7], [57.5, 13.5], [56.3, 14.5], [56.1, 14.3], [54.5, 15.2], [53.8, 14.3], [53.0, 14.6], [52.8, 14.4], [52.2, 14.6], [51.2, 13.1], [50.2, 13.4], [49.8, 13.1], [48.8, 13.0], [48.2, 12.6], [46.5, 12.5], [46.3, 12.2], [43.7, 11.9], [43.5, 12.2], [42.5, 13.2], [41.6, 14.3], [40.5, 16.0], [39.4, 18.1], [38.5, 19.8], [37.2, 22.0], [36.2, 23.8], [35.3, 25.3], [34.6, 26.6], [34.2, 27.1], [34.2, 27.9], [34.5, 28.4], [34.7, 29.0], [34.9, 29.5], [34.9, 30.0], [34.9, 30.8], [35.0, 31.3], [35.0, 32.1], [35.2, 32.9], [35.5, 34.0], [35.7, 34.9], [35.8, 35.7], [35.6, 35.9]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_16", "coordinates": [[35.6, 35.9], [35.9, 36.4], [36.3, 36.7], [36.8, 37.2], [37.4, 37.5], [37.9, 37.9], [38.5, 38.2], [39.0, 38.4], [39.5, 38.7], [40.1, 39.0], [40.7, 39.2], [41.6, 39.2], [42.3, 38.9], [43.0, 38.3], [43.6, 38.0], [43.6, 38.0], [44.0, 37.6], [44.3, 37.2], [44.9, 36.4], [45.4, 36.0], [45.9, 35.5], [46.4, 35.0], [47.1, 34.1], [47.7, 33.5], [48.1, 32.8], [48.7, 32.1], [49.3, 31.3], [49.8, 30.4], [50.4, 29.7], [51.2, 28.7], [51.8, 28.0], [52.4, 27.3], [53.3, 26.5], [54.3, 26.3], [55.1, 26.2], [56.0, 26.0], [57.0, 25.8], [58.1, 25.6], [58.7, 25.4], [59.0, 25.4], [59.8, 25.2], [60.0, 25.2], [61.0, 25.0], [62.0, 24.9], [63.0, 25.0], [64.0, 25.2], [65.0, 25.2], [65.8, 25.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_17", "coordinates": [[58.3, 12.7], [58.6, 13.0], [58.9, 13.5], [59.1, 14.0], [59.5, 14.5], [59.8, 15.0], [59.9, 15.5], [60.0, 16.0], [60.0, 16.5], [60.1, 17.0], [60.2, 17.5], [60.3, 18.0], [60.45, 18.5], [60.8, 19.0], [61.2, 20.0], [61.6, 20.5], [62.0, 21.0], [62.25, 21.5], [62.5, 22.0], [63.0, 22.5], [63.5, 23.0], [63.8, 23.2], [64.8, 23.3], [65.2, 24.0], [65.7, 25.0], [65.8, 25.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_18", "coordinates": [[65.8, 25.2], [66.1, 26.0], [66.0, 27.0], [65.9, 28.0], [65.9, 29.0], [66.1, 30.0], [66.5, 31.0], [67.2, 32.0], [68.0, 33.0], [68.8, 34.0], [69.2, 34.4], [70.0, 34.0], [71.0, 33.9], [72.0, 33.6], [73.0, 33.6], [73.7, 34.0], [74.0, 33.7], [75.0, 33.1], [76.0, 32.3], [77.0, 31.0], [78.0, 30.4], [79.0, 29.7], [80.0, 29.2], [81.0, 29.0], [82.0, 28.3], [83.0, 27.9], [84.0, 27.8], [85.0, 27.5], [86.0, 27.3], [87.0, 26.9], [88.0, 26.8], [89.0, 26.9], [90.0, 26.7], [91.0, 26.8], [92.0, 26.9], [93.0, 27.2], [93.3, 27.1], [93.6, 27.1], [94.0, 27.1], [94.2, 27.1], [94.4, 27.1], [94.6, 27.1], [94.8, 27.1], [95.0, 27.1], [95.3, 27.2], [95.5, 27.2], [95.7, 27.2], [95.7, 26.8], [95.6, 26.5], [95.4, 26.3], [95.3, 26.1], [95.2, 25.9], [95.1, 25.8], [95.0, 25.7], [94.8, 25.5], [94.7, 25.3], [94.5, 24.9], [94.5, 24.7], [94.4, 24.4], [94.3, 23.9], [94.2, 23.5], [94.2, 23.4], [94.2, 23.1], [94.1, 22.7], [94.1, 22.6], [94.0, 22.4], [94.0, 21.8], [94.0, 21.8], [93.9, 21.1], [93.9, 21.0], [93.9, 20.9], [93.9, 20.6], [93.9, 20.6], [93.8, 20.3], [93.8, 20.2], [93.8, 20.1], [93.8, 20.0], [93.9, 19.6], [93.9, 19.1], [93.9, 18.7], [94.0, 18.3], [94.0, 17.9], [94.1, 17.4], [94.1, 17.0], [94.1, 16.8], [93.8, 16.6], [93.7, 16.0], [93.5, 15.0], [93.2, 14.4], [92.8, 13.8], [92.3, 13.1], [92.0, 12.5], [91.8, 11.7], [91.8, 11.1], [91.9, 10.3], [91.8, 9.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_19", "coordinates": [[91.8, 9.3], [92.0, 8.8], [92.4, 7.8], [93.0, 6.8], [93.0, 5.9], [92.9, 5.3], [93.1, 4.2], [93.6, 3.8], [94.5, 2.9], [94.9, 2.3], [95.4, 2.1], [96.2, 1.5], [96.8, 0.8], [97.4, -0.3], [97.9, -1.3], [98.6, -2.0], [99.1, -2.8], [99.5, -2.8], [99.7, -3.2], [100.2, -4.0], [100.8, -4.6], [101.4, -5.1], [102.3, -6.3], [102.8, -6.4], [103.4, -7.0], [104.1, -7.3], [104.4, -7.1], [105.0, -7.4], [105.7, -7.6], [106.1, -7.5], [106.4, -7.8], [107.0, -8.0], [107.8, -8.3], [108.5, -8.5], [109.3, -8.8], [110.3, -9.0], [110.9, -9.0], [111.6, -9.3], [112.6, -9.4], [113.2, -9.3], [113.5, -9.2], [114.4, -9.3], [114.9, -9.4], [116.4, -9.5], [118.1, -10.2], [119.9, -10.3], [122.4, -10.3], [123.3, -9.3], [124.5, -7.9], [125.8, -7.5], [127.9, -7.4], [130.0, -7.2], [131.3, -6.1], [131.1, -4.6], [130.7, -3.4], [130.6, -1.8], [130.7, -0.3], [130.9, 1.1]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_20", "coordinates": [[-198.8, -61.8], [-199.1, -61.6], [-201.2, -59.7], [-201.2, -59.6], [-201.4, -59.5], [-201.5, -59.4], [-201.5, -59.3], [-201.6, -59.2], [-201.7, -59.1], [-201.8, -59.0], [-201.9, -58.9], [-202.0, -58.8], [-202.1, -58.8], [-202.2, -58.7], [-202.2, -58.6], [-202.3, -58.5], [-202.4, -58.4], [-202.5, -58.3], [-202.7, -58.1], [-202.7, -57.9], [-202.7, -57.8], [-202.6, -57.7], [-202.6, -57.5], [-202.5, -57.4], [-202.4, -57.3], [-202.3, -57.2], [-202.3, -57.1], [-202.3, -56.9], [-202.1, -56.8], [-202.0, -56.6], [-201.9, -56.5], [-201.7, -56.4], [-201.6, -56.1], [-201.4, -55.9], [-201.5, -55.8], [-201.4, -55.6], [-201.3, -55.4], [-201.3, -55.3], [-201.2, -55.1], [-201.1, -54.9], [-200.9, -54.7], [-200.8, -54.4], [-200.7, -54.2], [-200.6, -54.1], [-200.5, -53.9], [-200.3, -53.7], [-200.1, -53.5], [-199.4, -52.7], [-198.9, -52.1], [-197.6, -50.9], [-196.7, -50.3], [-195.9, -49.7], [-195.7, -49.1], [-195.3, -48.6], [-194.7, -47.9], [-194.1, -47.0], [-193.5, -46.0], [-192.7, -45.2], [-192.2, -44.7], [-191.0, -44.1], [-190.1, -43.7], [-189.0, -43.2], [-187.8, -42.6], [-186.7, -42.0], [-185.6, -41.7], [-184.7, -41.6], [-183.6, -41.1], [-183.1, -40.7], [-181.8, -39.4], [-181.2, -38.7], [-180.4, -37.4], [-179.2, -35.8], [-178.5, -34.4], [-178.0, -33.3], [-177.1, -31.7], [-176.9, -31.1], [-176.2, -29.8], [-175.7, -28.6], [-175.1, -27.2], [-174.5, -25.4], [-173.8, -23.6], [-173.5, -22.6], [-172.9, -21.4], [-172.1, -19.7], [-171.4, -18.1], [-171.1, -16.8], [-171.1, -15.4], [-171.6, -14.5], [-171.6, -14.5], [-172.8, -14.5], [-173.9, -14.5], [-174.9, -14.5], [-176.2, -14.6], [-177.7, -14.7], [-178.9, -15.1], [-179.3, -15.2], [-180.3, -15.5], [-181.7, -16.1], [-182.8, -17.2], [-183.8, -18.3], [-184.4, -19.3], [-185.7, -21.1], [-186.5, -22.0], [-187.5, -22.9], [-188.5, -23.7], [-189.4, -23.7], [-190.1, -23.1], [-190.9, -22.1], [-191.6, -21.0], [-192.0, -20.0], [-192.6, -19.0], [-193.1, -17.8], [-193.6, -16.8], [-194.2, -15.0], [-194.6, -13.6], [-195.2, -12.2], [-196.2, -11.8], [-197.1, -11.7], [-198.3, -11.6], [-199.5, -11.0], [-200.5, -10.4], [-201.5, -10.0], [-202.3, -9.6], [-203.4, -8.9], [-204.7, -8.0], [-205.8, -7.2], [-206.8, -6.7], [-207.6, -6.7], [-208.7, -6.9], [-209.5, -7.1], [-210.3, -7.3], [-211.4, -7.5], [-212.5, -7.3], [-213.0, -6.7], [-213.4, -5.9], [-213.9, -5.2], [-214.5, -4.4], [-215.4, -3.6], [-216.2, -3.0], [-217.3, -2.3], [-218.6, -1.9], [-219.9, -1.7], [-220.9, -1.6], [-222.2, -1.4], [-223.2, -1.4], [-223.5, -1.2], [-223.8, -1.0], [-224.1, -0.7], [-224.3, -0.5], [-224.6, -0.2], [-224.9, 0.0], [-225.7, 0.2], [-226.6, 0.5], [-227.4, 0.7], [-228.2, 1.0], [-229.1, 1.1]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_21", "coordinates": [[-112.0, -34.9], [-111.69999999999999, -38.4], [-112.19999999999999, -40.7], [-112.69999999999999, -42.7], [-113.30000000000001, -45.2], [-114.1, -48.3], [-115.0, -50.0], [-116.4, -49.6], [-117.0, -50.8], [-118.4, -53.2], [-118.0, -53.3], [-119.0, -54.5], [-120.5, -54.3], [-122.30000000000001, -55.8], [-126.4, -54.7], [-127.0, -55.3], [-128.7, -54.9], [-132.4, -54.1], [-133.0, -54.9], [-136.9, -54.0], [-137.6, -55.0], [-137.9, -54.9], [-139.2, -56.2], [-139.9, -56.0], [-140.8, -56.8], [-144.7, -55.7], [-146.6, -57.3], [-147.1, -57.1], [-149.3, -58.7], [-149.1, -58.8], [-150.8, -60.0], [-152.1, -59.6], [-157.5, -63.1], [-161.3, -61.7], [-164.4, -63.3], [-165.9, -62.8], [-170.8, -65.1], [-171.9, -64.7], [-177.7, -66.7], [-185.2, -63.7], [-186.6, -64.1], [-189.5, -62.5], [-191.6, -63.0], [-192.6, -62.6], [-193.6, -62.9], [-195.0, -62.0], [-196.2, -62.3], [-196.8, -61.8], [-198.8, -61.8]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_22", "coordinates": [[-112.0, -34.9], [-110.9, -35.1], [-110.19999999999999, -35.2], [-108.9, -35.2], [-107.69999999999999, -35.3], [-106.6, -35.5], [-105.30000000000001, -35.7], [-103.69999999999999, -35.8], [-101.80000000000001, -35.9], [-100.30000000000001, -36.1], [-98.39999999999998, -36.3], [-97.0, -36.4], [-96.30000000000001, -36.5], [-96.30000000000001, -37.1], [-94.60000000000002, -37.2], [-93.60000000000002, -37.4], [-93.69999999999999, -38.4], [-92.5, -38.8], [-91.80000000000001, -39.1], [-91.69999999999999, -40.3], [-91.10000000000002, -41.2], [-88.69999999999999, -41.3], [-86.39999999999998, -41.5], [-84.69999999999999, -41.7], [-83.89999999999998, -41.8], [-83.10000000000002, -41.9], [-82.89999999999998, -43.3], [-82.69999999999999, -44.3], [-82.30000000000001, -44.8], [-80.60000000000002, -44.9], [-79.60000000000002, -45.0], [-78.5, -45.2], [-77.30000000000001, -45.6], [-76.60000000000002, -45.6], [-76.19999999999999, -45.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_23", "coordinates": [[-76.19999999999999, -45.3], [-76.19999999999999, -44.8], [-76.19999999999999, -43.9], [-75.89999999999998, -43.0], [-75.69999999999999, -41.8], [-75.60000000000002, -40.5], [-75.10000000000002, -38.9], [-74.30000000000001, -37.6], [-73.5, -36.4], [-73.10000000000002, -35.1], [-72.69999999999999, -33.7], [-72.60000000000002, -32.0], [-72.10000000000002, -30.2], [-71.60000000000002, -28.5], [-71.19999999999999, -26.6], [-70.80000000000001, -24.9], [-70.60000000000002, -23.4], [-70.80000000000001, -22.2], [-71.19999999999999, -21.2], [-71.60000000000002, -20.4], [-72.19999999999999, -19.5], [-73.10000000000002, -18.1], [-74.0, -17.4], [-75.0, -16.6], [-75.80000000000001, -15.9], [-76.80000000000001, -15.1], [-77.89999999999998, -13.9], [-78.69999999999999, -12.8], [-79.5, -11.7], [-80.10000000000002, -10.5], [-80.60000000000002, -9.4], [-81.0, -7.8], [-81.30000000000001, -6.5], [-81.30000000000001, -5.4], [-81.30000000000001, -4.1], [-81.0, -2.5], [-80.89999999999998, -1.2], [-80.30000000000001, 0.3], [-79.80000000000001, 1.0], [-79.10000000000002, 1.9], [-78.80000000000001, 2.2], [-78.30000000000001, 2.6], [-78.10000000000002, 3.6]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_24", "coordinates": [[-102.60000000000002, 2.3], [-102.60000000000002, -0.5], [-102.80000000000001, -2.9], [-102.80000000000001, -4.1], [-104.30000000000001, -4.3], [-105.69999999999999, -4.7], [-106.30000000000001, -4.9], [-107.0, -6.4], [-107.6, -8.1], [-107.80000000000001, -9.0], [-109.19999999999999, -9.3], [-109.9, -9.4], [-110.6, -11.0], [-111.19999999999999, -12.6], [-111.4, -13.6], [-112.19999999999999, -13.7], [-112.6, -15.7], [-113.1, -17.8], [-113.5, -19.4], [-113.69999999999999, -20.0], [-113.9, -20.7], [-114.19999999999999, -20.7], [-114.5, -22.7], [-115.19999999999999, -22.8], [-115.1, -24.1], [-114.9, -26.3], [-114.4, -26.8], [-113.9, -26.7], [-113.4, -27.2], [-112.1, -29.5], [-112.1, -31.1], [-112.1, -32.0], [-112.0, -33.8], [-112.0, -34.9]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_25", "coordinates": [[-102.60000000000002, 2.3], [-102.19999999999999, 2.2], [-101.30000000000001, 2.2], [-100.5, 2.1], [-99.69999999999999, 2.1], [-98.60000000000002, 2.1], [-97.60000000000002, 2.1], [-96.69999999999999, 2.1], [-95.80000000000001, 2.1], [-95.0, 2.1], [-94.19999999999999, 2.1], [-93.10000000000002, 2.0], [-92.10000000000002, 2.0], [-91.0, 1.9], [-90.60000000000002, 1.6], [-90.60000000000002, 1.1], [-89.60000000000002, 1.1], [-88.39999999999998, 1.1], [-87.39999999999998, 1.1], [-85.89999999999998, 1.0], [-85.19999999999999, 0.9], [-85.19999999999999, 1.4], [-85.19999999999999, 1.8], [-84.5, 1.8], [-84.5, 2.5], [-84.5, 3.4], [-83.69999999999999, 3.5], [-83.0, 3.5], [-82.39999999999998, 3.5], [-82.5, 4.0], [-82.39999999999998, 4.6], [-82.5, 5.2], [-82.5, 5.9], [-82.5, 6.5], [-82.5, 6.9], [-82.5, 7.0], [-82.39999999999998, 7.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_26", "coordinates": [[-107.69999999999999, 22.9], [-107.9, 22.7], [-108.1, 22.3], [-108.4, 21.7], [-108.80000000000001, 20.9], [-109.19999999999999, 20.2], [-109.4, 19.8], [-109.19999999999999, 19.7], [-108.6, 19.4], [-107.9, 19.2], [-107.1, 18.9], [-106.30000000000001, 18.5], [-105.6, 18.2], [-105.30000000000001, 18.1], [-105.4, 17.3], [-105.4, 16.5], [-105.4, 15.2], [-105.0, 15.2], [-104.4, 15.2], [-104.4, 14.3], [-104.4, 13.0], [-104.4, 11.9], [-104.4, 11.0], [-104.30000000000001, 10.4], [-104.0, 10.2], [-103.69999999999999, 10.1], [-103.69999999999999, 9.5], [-103.60000000000002, 8.9], [-103.60000000000002, 8.5], [-103.10000000000002, 8.5], [-102.60000000000002, 8.4], [-102.60000000000002, 7.9], [-102.60000000000002, 7.0], [-102.60000000000002, 6.2], [-102.60000000000002, 5.5], [-102.60000000000002, 4.9], [-102.60000000000002, 4.3], [-102.60000000000002, 3.5], [-102.60000000000002, 2.7], [-102.60000000000002, 2.3]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_27", "coordinates": [[-78.10000000000002, 3.6], [-77.89999999999998, 4.3], [-77.80000000000001, 4.9], [-77.80000000000001, 5.4], [-78.0, 6.0], [-78.10000000000002, 6.5], [-78.39999999999998, 7.1], [-78.69999999999999, 7.4], [-79.10000000000002, 7.5], [-79.5, 7.5], [-79.89999999999998, 7.2], [-80.30000000000001, 7.0], [-80.80000000000001, 6.9], [-81.30000000000001, 7.0], [-81.69999999999999, 7.1], [-82.0, 7.2], [-82.39999999999998, 7.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_28", "coordinates": [[-82.39999999999998, 7.2], [-82.69999999999999, 7.3], [-83.0, 7.5], [-83.39999999999998, 7.7], [-83.80000000000001, 8.0], [-84.19999999999999, 8.3], [-84.60000000000002, 8.7], [-85.19999999999999, 9.1], [-85.69999999999999, 9.5], [-86.19999999999999, 10.0], [-86.69999999999999, 10.4], [-87.19999999999999, 10.8], [-87.80000000000001, 11.1], [-88.5, 11.5], [-89.0, 11.7], [-89.60000000000002, 12.0], [-90.10000000000002, 12.2], [-90.5, 12.4], [-91.0, 12.7], [-91.0, 12.7], [-91.5, 13.0], [-92.10000000000002, 13.2], [-92.69999999999999, 13.6], [-93.30000000000001, 13.9], [-93.80000000000001, 14.3], [-94.5, 14.6], [-95.10000000000002, 14.8], [-95.80000000000001, 15.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_29", "coordinates": [[-95.80000000000001, 15.0], [-96.39999999999998, 15.1], [-97.0, 15.2], [-97.60000000000002, 15.3], [-98.30000000000001, 15.6], [-98.80000000000001, 15.8], [-99.39999999999998, 16.1], [-99.89999999999998, 16.3], [-100.69999999999999, 16.6], [-101.39999999999998, 16.9], [-102.10000000000002, 17.2], [-102.89999999999998, 17.6], [-103.60000000000002, 18.0], [-104.30000000000001, 18.4], [-104.80000000000001, 18.9], [-105.19999999999999, 19.2], [-105.6, 19.6], [-105.69999999999999, 20.2], [-105.69999999999999, 20.6], [-105.6, 21.2], [-105.9, 21.6], [-106.19999999999999, 21.9], [-106.80000000000001, 22.1], [-107.30000000000001, 22.4], [-107.6, 22.6], [-107.69999999999999, 22.9]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_30", "coordinates": [[-107.69999999999999, 22.9], [-108.0, 23.0], [-108.30000000000001, 23.5], [-108.69999999999999, 24.1], [-109.0, 24.5], [-109.1, 24.6], [-109.1, 24.7], [-109.19999999999999, 24.9], [-109.69999999999999, 25.1], [-109.80000000000001, 25.3], [-109.9, 25.5], [-110.0, 25.6], [-110.1, 25.8], [-110.30000000000001, 26.0], [-110.30000000000001, 26.1], [-110.4, 26.2], [-110.5, 26.4], [-110.69999999999999, 26.6], [-110.9, 26.8], [-111.1, 27.1], [-111.30000000000001, 27.3], [-111.5, 27.5], [-111.6, 27.7], [-111.80000000000001, 27.9], [-111.9, 28.0], [-112.1, 28.3], [-112.30000000000001, 28.5], [-112.5, 28.8], [-112.69999999999999, 29.1], [-113.1, 29.5], [-113.30000000000001, 29.7], [-113.5, 29.9], [-113.6, 30.1], [-113.9, 30.5], [-114.19999999999999, 30.8], [-114.30000000000001, 31.0], [-114.4, 31.3], [-114.5, 31.6], [-114.69999999999999, 31.8], [-114.69999999999999, 31.9], [-114.9, 32.1], [-115.1, 32.3], [-115.19999999999999, 32.5], [-115.5, 32.9], [-115.6, 33.3], [-116.55000000000001, 34.0], [-117.30000000000001, 34.15], [-118.5, 34.7], [-119.35, 34.9], [-120.05000000000001, 35.5], [-120.55000000000001, 36.0], [-121.1, 36.5], [-121.69999999999999, 37.0], [-122.30000000000001, 37.5], [-122.75, 38.0], [-123.19999999999999, 38.5], [-123.69999999999999, 39.0], [-123.9, 39.5], [-124.0, 40.0], [-124.4, 40.2]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_31", "coordinates": [[-129.2, 50.5], [-129.9, 51.0], [-130.7, 51.5], [-131.3, 52.0], [-132.8, 53.0], [-133.9, 54.0], [-134.5, 55.0], [-135.5, 56.0], [-136.1, 57.0], [-136.5, 58.0], [-137.0, 58.5], [-138.0, 59.0], [-139.0, 59.5], [-140.0, 59.9], [-141.0, 60.1], [-142.0, 59.8], [-143.0, 59.4], [-144.0, 59.3], [-145.0, 59.2], [-146.0, 59.0], [-147.0, 58.3], [-148.0, 57.8], [-150.0, 56.8], [-152.0, 56.0], [-154.0, 55.2], [-156.0, 54.7], [-158.0, 54.0], [-160.0, 53.7], [-162.0, 53.2], [-164.0, 52.8], [-166.0, 52.2], [-168.0, 51.7], [-170.0, 51.3], [-172.0, 51.0], [-174.0, 50.8], [-176.0, 50.5], [-178.0, 50.4], [-180.0, 50.5], [-182.0, 50.5], [-184.0, 50.8], [-186.0, 51.3], [-188.0, 51.9], [-190.0, 52.6], [-192.0, 53.6], [-194.0, 54.3], [-196.0, 55.5], [-197.0, 54.0], [-197.8, 53.0], [-199.0, 52.0], [-199.5, 51.0], [-200.5, 50.0], [-202.2, 49.0], [-203.8, 48.0], [-205.0, 47.0], [-206.2, 46.0], [-208.0, 45.0], [-210.0, 44.0], [-211.5, 43.0], [-213.0, 42.0], [-215.2, 41.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_32", "coordinates": [[-124.4, 40.2], [-125.0, 40.4], [-127.5, 40.4], [-127.4, 41.6], [-127.19999999999999, 41.6], [-126.9, 42.3], [-126.5, 43.0], [-127.80000000000001, 43.5], [-129.2, 44.0], [-130.5, 44.5], [-130.1, 45.5], [-129.6, 46.5], [-129.2, 47.5], [-128.8, 48.2], [-129.0, 48.5], [-130.5, 49.2], [-130.4, 49.5], [-129.7, 50.1], [-129.2, 50.5]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_33", "coordinates": [[-124.4, 40.2], [-124.69999999999999, 41.0], [-124.9, 42.0], [-125.0, 43.0], [-125.0, 44.0], [-125.0, 45.0], [-125.1, 46.0], [-125.5, 47.0], [-126.1, 48.0], [-127.0, 49.0], [-128.2, 50.0], [-129.2, 50.5]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_34", "coordinates": [[144.8, 41.0], [144.5, 40.0], [144.2, 39.0], [144.0, 38.0], [143.5, 37.0], [142.8, 36.0], [142.0, 35.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_35", "coordinates": [[142.0, 35.0], [138.3, 34.5], [136.5, 34.1], [135.3, 33.6], [133.7, 32.6], [132.4, 31.7], [131.0, 30.4], [130.5, 29.2], [129.9, 28.2], [129.0, 27.1], [128.1, 25.9], [127.2, 24.8], [125.9, 24.0], [124.8, 23.6], [123.2, 23.2], [121.9, 22.9], [121.6, 22.3], [121.8, 21.4], [122.2, 20.1], [122.4, 18.9], [122.5, 17.8], [122.5, 16.0], [123.6, 14.8], [124.3, 13.8], [125.1, 12.2], [125.9, 10.6], [126.4, 8.9], [126.7, 7.6], [126.9, 6.1], [128.1, 4.9], [128.7, 4.0], [130.0, 2.7], [130.5, 1.9], [130.9, 1.1]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_36", "coordinates": [[130.9, 1.1], [131.0, 1.2], [132.1, 3.1], [133.4, 4.5], [134.3, 5.9], [135.4, 7.8], [136.7, 8.1], [137.8, 8.8], [138.6, 10.1], [140.6, 10.7], [142.3, 11.2], [144.8, 12.3], [146.6, 13.9], [147.3, 15.6], [147.3, 17.5], [147.3, 18.8], [147.3, 20.0], [147.0, 21.0], [146.2, 22.0], [145.0, 23.0], [144.0, 24.0], [143.0, 25.0], [143.0, 26.0], [143.2, 27.0], [143.2, 28.0], [142.8, 29.0], [142.5, 30.0], [142.2, 31.0], [142.0, 33.0], [142.0, 34.0], [142.0, 35.0]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}, {"model": "fault", "name": "fault_37", "coordinates": [[-70.80000000000001, -55.4], [-69.0, -55.6], [-66.89999999999998, -55.6], [-65.69999999999999, -55.5], [-64.80000000000001, -55.6], [-63.39999999999998, -55.7], [-62.30000000000001, -55.8], [-60.10000000000002, -56.0], [-60.0, -56.0], [-57.5, -55.9], [-55.0, -55.7], [-52.5, -55.6], [-50.0, -55.5], [-48.19999999999999, -55.4], [-46.5, -55.2], [-44.69999999999999, -55.1], [-43.0, -55.0], [-42.19999999999999, -55.0], [-41.5, -54.9], [-40.69999999999999, -54.8], [-40.0, -54.8], [-37.5, -54.8], [-35.0, -54.8], [-32.5, -54.8], [-30.0, -54.8], [-29.30000000000001, -54.8], [-28.5, -54.9], [-27.0, -55.0], [-26.5, -55.2], [-26.0, -55.4], [-25.5, -55.5], [-25.0, -55.7], [-24.80000000000001, -55.8], [-24.5, -55.9], [-24.19999999999999, -56.0], [-24.0, -56.1], [-23.69999999999999, -56.6], [-23.399999999999977, -57.0], [-23.100000000000023, -57.5], [-22.80000000000001, -58.0], [-23.100000000000023, -58.4], [-23.399999999999977, -58.8], [-23.69999999999999, -59.2], [-24.0, -59.6], [-24.899999999999977, -60.7], [-25.600000000000023, -60.7], [-33.30000000000001, -60.0], [-37.5, -61.0], [-47.5, -60.0], [-56.0, -60.7], [-70.80000000000001, -55.4]], "dip point": [0, 1], "min depth": -1000.0, "max depth": 300000.0, "segments": [{"length": 300000.0, "thickness": [100000.0], "angle": [90, 90]}], "composition models": [{"model": "uniform", "compositions": [4]}]}]} diff --git a/tests/entropy_initial_lookup_wb.wb b/tests/entropy_initial_lookup_wb.wb index 2986d0ba775..3768e825967 100644 --- a/tests/entropy_initial_lookup_wb.wb +++ b/tests/entropy_initial_lookup_wb.wb @@ -1,5 +1,5 @@ { - "version": "0.6", + "version": "1.0", "specific heat": 1250, "thermal diffusivity": 1e-06, "thermal expansion coefficient": 3.1e-05, @@ -160,7 +160,8 @@ "density": 3300, "thermal conductivity": 3.3, "adiabatic heating": true, - "plate velocity": 0.05, + "spreading velocity":0.05, + "subducting velocity":0.05, "ridge coordinates": [ [ [ diff --git a/tests/world_builder_select_composition.wb b/tests/world_builder_select_composition.wb index ad01589ff3f..92a5536332a 100644 --- a/tests/world_builder_select_composition.wb +++ b/tests/world_builder_select_composition.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "cross section":[[0,0],[100,0]], "features": [ diff --git a/tests/world_builder_select_grains.wb b/tests/world_builder_select_grains.wb index cb4fed2423f..1e5c218fe3f 100644 --- a/tests/world_builder_select_grains.wb +++ b/tests/world_builder_select_grains.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "cross section":[[0,0],[100,0]], "features": [ diff --git a/tests/world_builder_simple.wb b/tests/world_builder_simple.wb index ad01589ff3f..92a5536332a 100644 --- a/tests/world_builder_simple.wb +++ b/tests/world_builder_simple.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "cross section":[[0,0],[100,0]], "features": [ diff --git a/tests/world_builder_simple_2d_cartesian_sticky_air.wb b/tests/world_builder_simple_2d_cartesian_sticky_air.wb index c40a784ff4a..6db8a0fa4ca 100644 --- a/tests/world_builder_simple_2d_cartesian_sticky_air.wb +++ b/tests/world_builder_simple_2d_cartesian_sticky_air.wb @@ -1,5 +1,5 @@ { - "version":"0.6", + "version":"1.0", "cross section":[[0,0],[100,0]], "features": [ From 01bd16109bd329960c04ccbc7adb63af20b68056 Mon Sep 17 00:00:00 2001 From: Menno Fraters Date: Wed, 21 Aug 2024 23:31:59 +0200 Subject: [PATCH 3/3] Change minimum cmake version for the world builder. --- contrib/world_builder/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/world_builder/CMakeLists.txt b/contrib/world_builder/CMakeLists.txt index 25a57c1a4fc..f843b5b8536 100644 --- a/contrib/world_builder/CMakeLists.txt +++ b/contrib/world_builder/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.13.4) project(WorldBuilder C CXX)