Commit 3f536b2d authored by Alex Breuer's avatar Alex Breuer
Browse files

Added new two-dimensional rupture test case, enforcing face-adjacent elements...

Added new two-dimensional rupture test case, enforcing face-adjacent elements at both sides of the fault.
parent 80173598
/**
* @file This file is part of EDGE.
*
* @author Alexander Breuer (anbreuer AT ucsd.edu)
*
* @section LICENSE
* Copyright (c) 2018, Regents of the University of California
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @section DESCRIPTION
* Two-dimensional mesh of TPV3 of "The SCEC/USGS Spontaneous Rupture Code Verification Project".
* The fault is normal to (0,1)^T.
*
* This the seventh of our TPV3-2D benchmark setups, enforcing a mesh with face-adjacent elements.
* In this setup we force the mesher to generate face-adjacent rupture elements on both sides of the fault.
*
* Sketch:
* * * *
* * * * * * * *
* * * * * * * *
* -*-------*-----*---------*---- <- fault
* * * * *|* * *|
* * * * | * * * |
* * |____*____|
* face-adjacent
* elements
*
* Reference (TPV3-2D): Rojas, Day, Castillo, Dalguer
* Modelling of rupture propagation using high-order mimetic finite differences
* Geophys. J. Int. (2008) 172
**/
// define characteristic length
cl_fault = 100;
cl_domain = 500;
// use Delaunay meshing
Mesh.Algorithm = 5;
// sizes of the helping geometry
// the values below seem to enforce the desired behavior
// of generating face-adjacent rupture elements
hvl = 0.6*cl_fault; // vertical: left-side
hvr = 0.6*cl_fault; // vertical: right-side
hvv = 0.8*cl_fault; // vertical: up/down
hll = 0.6*cl_fault; // left: left-side
hls = 0.2*cl_fault; // shift: right/left
hlr = 0.6*cl_fault; // left: right-side
hlv = 0.6*cl_fault; // left: up/down
hrl = 0.6*cl_fault; // right: left-side
hrs = 0.2*cl_fault; // shift: right/left
hrr = 0.6*cl_fault; // right: right-side
hrv = 0.6*cl_fault; // right: up/down
// nucleation patch
Point(1) = { -1500, 0, 0, cl_fault };
Point(2) = { 1500, 0, 0, cl_fault };
// remainder of the fault
Point(3) = { -15000, 0, 0, cl_fault };
Point(4) = { 15000, 0, 0, cl_fault };
// compuational domain
Point(5) = { -50000, -25000, 0, cl_domain };
Point(6) = { 50000, -25000, 0, cl_domain };
Point(7) = { 50000, 25000, 0, cl_domain };
Point(8) = { -50000, 25000, 0, cl_domain };
Line(1) = {5,6};
Line(2) = {6,7};
Line(3) = {7,8};
Line(4) = {8,5};
/*
* helping geometry enforcing different configurations
* of face-adjacent fault-elements
*/
// triangles straight
Point(101) = { -12500-hvl, 0, 0, cl_fault};
Point(102) = { -12500, 0, 0, cl_fault};
Point(103) = { -12500+hvr, 0, 0, cl_fault};
Point(104) = { -12500, -hvv, 0, cl_fault};
Point(105) = { -12500, hvv, 0, cl_fault};
Line(101) = {101,104};
Line(102) = {104,103};
Line(103) = {101,105};
Line(104) = {105,103};
Line(105) = {102,104};
Line(106) = {102,105};
// triangles left/right
Point(106) = { -10000-hvl, 0, 0, cl_fault};
Point(107) = { -10000, 0, 0, cl_fault};
Point(108) = { -10000+hvr, 0, 0, cl_fault};
Point(109) = { -10000-hls, -hvv, 0, cl_fault};
Point(110) = { -10000+hls, hvv, 0, cl_fault};
Line(107) = {106,109};
Line(108) = {109,108};
Line(109) = {107,109};
Line(110) = {106,110};
Line(111) = {110,108};
Line(112) = {107,110};
// triangle up right/left
Point(111) = { -7500-hll, 0, 0, cl_fault};
Point(112) = { -7500, 0, 0, cl_fault};
Point(113) = { -7500+hlr, 0, 0, cl_fault};
Point(114) = { -7500+hls, -hlv, 0, cl_fault};
Point(115) = { -7500-hls, hlv, 0, cl_fault};
Line(113) = {111,114};
Line(114) = {114,113};
Line(115) = {112,114};
Line(116) = {111,115};
Line(117) = {115,113};
Line(118) = {112,115};
// triangle right/right
Point(116) = { -5000-hrl, 0, 0, cl_fault};
Point(117) = { -5000, 0, 0, cl_fault};
Point(118) = { -5000+hrr, 0, 0, cl_fault};
Point(119) = { -5000+hrs, hlv, 0, cl_fault};
Point(120) = { -5000+hrs, -hlv, 0, cl_fault};
Line(119) = {116,120};
Line(120) = {120,118};
Line(121) = {117,120};
Line(122) = {116,119};
Line(123) = {119,118};
Line(124) = {117,119};
// triangle right/right
Point(121) = { 5000-hll, 0, 0, cl_fault};
Point(122) = { 5000, 0, 0, cl_fault};
Point(123) = { 5000+hlr, 0, 0, cl_fault};
Point(124) = { 5000+hls, -hlv, 0, cl_fault};
Point(125) = { 5000+hls, hlv, 0, cl_fault};
Line(125) = {121,124};
Line(126) = {124,123};
Line(127) = {122,124};
Line(128) = {121,125};
Line(129) = {125,123};
Line(130) = {122,125};
// fault
Line( 5) = { 3, 101};
Line( 6) = {101, 102};
Line( 7) = {102, 103};
Line( 8) = {103, 106};
Line( 9) = {106, 107};
Line(10) = {107, 108};
Line(11) = {108, 111};
Line(12) = {111, 112};
Line(13) = {112, 113};
Line(14) = {113, 116};
Line(15) = {116, 117};
Line(16) = {117, 118};
Line(17) = {118, 1};
Line(18) = { 1, 2};
Line(19) = { 2, 121};
Line(20) = {121, 122};
Line(21) = {122, 123};
Line(22) = {123, 4};
// set rupture boundaries
Physical Line(201) = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22};
// define volume
Line Loop(201) = { 1, 2, 3, 4 };
Plane Surface(301) = {201};
Physical Surface("region_0") = {301};
// forward fault to mesher
Line{5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22} In Surface {301};
// forward helping geometry to mesher
Line{101,102,103,104,105,106,107,108,109,110,111,112,
113,114,115,116,117,118,119,120,121,122,123,124,
125,126,127,128,129,130} In Surface {301};
// set outflow boundaries
Physical Line(105) = {1, 2, 3, 4};
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment