From cf1819500ba3dacc6afcecea09e37c7a0d953173 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 11:52:38 +1000 Subject: [PATCH 01/80] Add some actions! --- .github/workflows/build.yml | 32 ++++++++++++ .github/workflows/build_push_docker.yml | 0 .travis.yml | 15 ------ jenkinsfile | 68 ------------------------- 4 files changed, 32 insertions(+), 83 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/build_push_docker.yml delete mode 100644 .travis.yml delete mode 100644 jenkinsfile diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..5b1400e2 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,32 @@ +name: Build + +on: [push, pull_request] + +jobs: + build_wheels: + name: Build wheel on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-18.04] + + steps: + - uses: actions/checkout@v1 + + - uses: actions/setup-python@v1 + name: Install Python + with: + python-version: '3.7' + + - name: Install cibuildwheel + run: | + python -m pip install cibuildwheel==1.3.0 + + - name: Build wheel + run: | + python -m cibuildwheel --output-dir wheelhouse + + - uses: actions/upload-artifact@v1 + with: + name: wheels + path: ./wheelhouse diff --git a/.github/workflows/build_push_docker.yml b/.github/workflows/build_push_docker.yml new file mode 100644 index 00000000..e69de29b diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 52817e34..00000000 --- a/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: python - -os: ubuntu - -services: - - docker - -before_install: - - docker --version - -install: - - docker build -t underworld . - -script: - - docker run underworld /bin/bash -c "pip3 install pytest; cp -rf /opt/UWGeodynamics /workspace; cd /workspace/UWGeodynamics; python -m pytest -v" diff --git a/jenkinsfile b/jenkinsfile deleted file mode 100644 index 0a44bcbe..00000000 --- a/jenkinsfile +++ /dev/null @@ -1,68 +0,0 @@ -#!groovy - -/* A Jenkins "Declarative" Pipeline file. -See http://130.56.252.251:32779 -*/ - -pipeline { - - // define the docker environment to run the pipeline in. - agent { - docker { - image 'underworldcode/uwgeodynamics:dev' - - // special label to jenkins config. See http://130.56.252.251:32779/computer/ - label 'uwgeo-hector' - } - } - - stages { - - // Build stage: compile the code - stage('Build') { - steps { - withEnv(["HOME=${env.WORKSPACE}"]) { - sh 'pip3 install --user pytest' - sh "pip3 install . --user" - sh "cp .local/lib/python*/site-packages/UWGeodynamics/version.py UWGeodynamics/." - } - } - } - - - // Test stage: runs the basic tests - stage('Test') { - steps { - withEnv(["HOME=${env.WORKSPACE}"]) { - sh 'python -m pytest -v' - } - } - } - - } - - /* For post build analysis */ - post { - failure { - // notify users when the Pipeline fails - emailext ( - subject: "Failed Pipeline: ${currentBuild.fullDisplayName}", - body: "Something is wrong with ${env.BUILD_URL}", - // mimeType: 'text/html', - to: 'rbeucher@unimelb.edu.au' - ) - } - success { - script { - if (currentBuild.previousBuild != null && currentBuild.previousBuild.result != 'SUCCESS') { - emailext ( - subject: "Back to normal: ${currentBuild.fullDisplayName}", - body: "Project is back to normal", - // mimeType: 'text/html', - to: 'rbeucher@unimelb.edu.au' - ) - } - } - } - } -} From bd6e1ff6e2557a8651a30633f9b638d65541b607 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 12:00:28 +1000 Subject: [PATCH 02/80] Update actions --- .github/workflows/build_push_docker.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/build_push_docker.yml b/.github/workflows/build_push_docker.yml index e69de29b..cf337dc2 100644 --- a/.github/workflows/build_push_docker.yml +++ b/.github/workflows/build_push_docker.yml @@ -0,0 +1,13 @@ + +name: Build and push Docker images +on: [push] + +jobs: + build: + uses: docker/build-push-action@v1.1.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + repository: underworldcode/uwgeodynamics + tag_with_ref: true + tag_with_sha: true \ No newline at end of file From 6eb24ca2557886c50acbae600733f6dbe9fe8493 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 12:04:02 +1000 Subject: [PATCH 03/80] Update actions --- .github/workflows/build_push_docker.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build_push_docker.yml b/.github/workflows/build_push_docker.yml index cf337dc2..4c4fee3a 100644 --- a/.github/workflows/build_push_docker.yml +++ b/.github/workflows/build_push_docker.yml @@ -1,13 +1,15 @@ -name: Build and push Docker images +name: Docker on: [push] jobs: build: - uses: docker/build-push-action@v1.1.0 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - repository: underworldcode/uwgeodynamics - tag_with_ref: true - tag_with_sha: true \ No newline at end of file + name: Build and push docker images + steps: + - uses: docker/build-push-action@v1.1.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + repository: underworldcode/uwgeodynamics + tag_with_ref: true + tag_with_sha: true \ No newline at end of file From c7f76c90894f675ffa7747cca14d19ea248df1d9 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 12:06:42 +1000 Subject: [PATCH 04/80] Update actions --- .github/workflows/build_push_docker.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build_push_docker.yml b/.github/workflows/build_push_docker.yml index 4c4fee3a..c34e6ba7 100644 --- a/.github/workflows/build_push_docker.yml +++ b/.github/workflows/build_push_docker.yml @@ -4,12 +4,12 @@ on: [push] jobs: build: - name: Build and push docker images - steps: - - uses: docker/build-push-action@v1.1.0 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - repository: underworldcode/uwgeodynamics - tag_with_ref: true - tag_with_sha: true \ No newline at end of file + name: Build and push docker images + steps: + - uses: docker/build-push-action@v1.1.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + repository: underworldcode/uwgeodynamics + tag_with_ref: true + tag_with_sha: true \ No newline at end of file From a9b69e3f4ef740d544a9bbd16238ee63f456b781 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 12:11:40 +1000 Subject: [PATCH 05/80] Update actions --- .github/workflows/build_push_docker.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build_push_docker.yml b/.github/workflows/build_push_docker.yml index c34e6ba7..2f41bd43 100644 --- a/.github/workflows/build_push_docker.yml +++ b/.github/workflows/build_push_docker.yml @@ -4,12 +4,13 @@ on: [push] jobs: build: - name: Build and push docker images - steps: - - uses: docker/build-push-action@v1.1.0 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - repository: underworldcode/uwgeodynamics - tag_with_ref: true - tag_with_sha: true \ No newline at end of file + name: Build and push Docker images + runs-on: ubuntu-latest + steps: + - uses: docker/build-push-action@v1.1.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + repository: underworldcode/uwgeodynamics + tag_with_ref: true + tag_with_sha: true \ No newline at end of file From 143043f405a138c38b2a48c43d2c190247d3b351 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 12:18:45 +1000 Subject: [PATCH 06/80] Update actions --- .github/workflows/build_push_docker.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_push_docker.yml b/.github/workflows/build_push_docker.yml index 2f41bd43..020f5f87 100644 --- a/.github/workflows/build_push_docker.yml +++ b/.github/workflows/build_push_docker.yml @@ -7,6 +7,7 @@ jobs: name: Build and push Docker images runs-on: ubuntu-latest steps: + - uses: actions/checkout@v2 - uses: docker/build-push-action@v1.1.0 with: username: ${{ secrets.DOCKER_USERNAME }} From 7f614449fddf769825c97ac4dade3a6b305eb429 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 12:43:00 +1000 Subject: [PATCH 07/80] Update actions --- .github/workflows/build_push_docker.yml | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 .github/workflows/build_push_docker.yml diff --git a/.github/workflows/build_push_docker.yml b/.github/workflows/build_push_docker.yml deleted file mode 100644 index 020f5f87..00000000 --- a/.github/workflows/build_push_docker.yml +++ /dev/null @@ -1,17 +0,0 @@ - -name: Docker -on: [push] - -jobs: - build: - name: Build and push Docker images - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: docker/build-push-action@v1.1.0 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - repository: underworldcode/uwgeodynamics - tag_with_ref: true - tag_with_sha: true \ No newline at end of file From fabbe03956858f1fffffd5048526526d7bffdabd Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 12:47:09 +1000 Subject: [PATCH 08/80] Revert "Update actions" This reverts commit 7f614449fddf769825c97ac4dade3a6b305eb429. --- .github/workflows/build_push_docker.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/build_push_docker.yml diff --git a/.github/workflows/build_push_docker.yml b/.github/workflows/build_push_docker.yml new file mode 100644 index 00000000..020f5f87 --- /dev/null +++ b/.github/workflows/build_push_docker.yml @@ -0,0 +1,17 @@ + +name: Docker +on: [push] + +jobs: + build: + name: Build and push Docker images + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: docker/build-push-action@v1.1.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + repository: underworldcode/uwgeodynamics + tag_with_ref: true + tag_with_sha: true \ No newline at end of file From f2c7e4cdece2b2d1d7a2e811ee1e69f61f7f01fb Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 12:48:16 +1000 Subject: [PATCH 09/80] Update actions --- .github/workflows/build.yml | 32 ------------------- .../workflows/pythonpublish.yml | 0 2 files changed, 32 deletions(-) delete mode 100644 .github/workflows/build.yml rename pythonpublish.yml => .github/workflows/pythonpublish.yml (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 5b1400e2..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Build - -on: [push, pull_request] - -jobs: - build_wheels: - name: Build wheel on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-18.04] - - steps: - - uses: actions/checkout@v1 - - - uses: actions/setup-python@v1 - name: Install Python - with: - python-version: '3.7' - - - name: Install cibuildwheel - run: | - python -m pip install cibuildwheel==1.3.0 - - - name: Build wheel - run: | - python -m cibuildwheel --output-dir wheelhouse - - - uses: actions/upload-artifact@v1 - with: - name: wheels - path: ./wheelhouse diff --git a/pythonpublish.yml b/.github/workflows/pythonpublish.yml similarity index 100% rename from pythonpublish.yml rename to .github/workflows/pythonpublish.yml From 00df69830d62f4339325cea535ca1f181f30fdb3 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 13:39:36 +1000 Subject: [PATCH 10/80] Add tests --- .github/workflows/test.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..f46f6401 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,11 @@ +name: tests + +on: [push] + +jobs: + run_test: + runs_on: ubuntu-latest + steps: + - name: Run all tests + uses: docker://underworldcode/underworld2 + run: python -c "import underworld as uw" \ No newline at end of file From c295faa666c29f84fcd25535398e84f597b498cb Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 13:41:09 +1000 Subject: [PATCH 11/80] Add tests --- .github/workflows/test.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f46f6401..d757056c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,6 +6,5 @@ jobs: run_test: runs_on: ubuntu-latest steps: - - name: Run all tests - uses: docker://underworldcode/underworld2 - run: python -c "import underworld as uw" \ No newline at end of file + - uses: docker://underworldcode/underworld2 + - run: python -c "import underworld as uw" \ No newline at end of file From fd10732d6c6cafba269279a1bd1ab3ae5728201f Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 13:42:42 +1000 Subject: [PATCH 12/80] Add tests --- .github/workflows/test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d757056c..89fa78d6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,8 +3,8 @@ name: tests on: [push] jobs: - run_test: - runs_on: ubuntu-latest - steps: - - uses: docker://underworldcode/underworld2 - - run: python -c "import underworld as uw" \ No newline at end of file + run_test: + runs-on: ubuntu-latest + steps: + - uses: docker://underworldcode/underworld2 + - run: python -c "import underworld as uw" \ No newline at end of file From e873ab36c6618e11ec58f045c46b07483860dc83 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 13:47:16 +1000 Subject: [PATCH 13/80] Add tests --- .github/workflows/test.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 89fa78d6..53f9ed34 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,5 +6,6 @@ jobs: run_test: runs-on: ubuntu-latest steps: - - uses: docker://underworldcode/underworld2 - - run: python -c "import underworld as uw" \ No newline at end of file + - run: docker run --name underworld underworldcode/underworld2 + - run: docker exec -it underworld /bin/bash + - run: python -c "import underworld as uw" \ No newline at end of file From cffbb1c086fcf744f9bf1913f99c17521be81aee Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 13:49:17 +1000 Subject: [PATCH 14/80] Add tests --- .github/workflows/test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 53f9ed34..5778d945 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,6 +6,5 @@ jobs: run_test: runs-on: ubuntu-latest steps: - - run: docker run --name underworld underworldcode/underworld2 - - run: docker exec -it underworld /bin/bash + - run: docker run -it underworldcode/underworld2 /bin/bash - run: python -c "import underworld as uw" \ No newline at end of file From 984b43f1ac1b4907fb89a88406c0a80df06a8f55 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 14:00:49 +1000 Subject: [PATCH 15/80] Add tests --- .github/workflows/test.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5778d945..8bc0ddb7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,8 +3,9 @@ name: tests on: [push] jobs: - run_test: + container: runs-on: ubuntu-latest + container: underworldcode/underworld2 steps: - - run: docker run -it underworldcode/underworld2 /bin/bash - - run: python -c "import underworld as uw" \ No newline at end of file + - run: | + python -c "import underworld" \ No newline at end of file From 89c09c0a66836fefd68f98e774f7072cd7e081ee Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 14:02:51 +1000 Subject: [PATCH 16/80] Add tests --- .github/workflows/test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8bc0ddb7..b03de820 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,7 +4,6 @@ on: [push] jobs: container: - runs-on: ubuntu-latest container: underworldcode/underworld2 steps: - run: | From 077759139c792e77f74506bf951f467d7f1f50a2 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 14:05:05 +1000 Subject: [PATCH 17/80] Add tests --- .github/workflows/test.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b03de820..ff60cd49 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,8 +3,7 @@ name: tests on: [push] jobs: - container: - container: underworldcode/underworld2 - steps: - - run: | - python -c "import underworld" \ No newline at end of file + container: underworldcode/underworld2:latest + steps: + - run: | + python -c "import underworld" \ No newline at end of file From ce3afc1cc9ff709c35d903a680c48f7ea07a5d09 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 14:06:42 +1000 Subject: [PATCH 18/80] Add tests --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ff60cd49..bda871bb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,6 +3,7 @@ name: tests on: [push] jobs: + runs-on: ubuntu-latest container: underworldcode/underworld2:latest steps: - run: | From d00b7c7efc1fb85955f2caaec50477c177ec42e6 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 14:12:28 +1000 Subject: [PATCH 19/80] Add tests --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bda871bb..07ac9b6d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,7 +4,7 @@ on: [push] jobs: runs-on: ubuntu-latest - container: underworldcode/underworld2:latest steps: - - run: | - python -c "import underworld" \ No newline at end of file + - uses: docker://underworldcode/underworld2 + - name: Impoet Underworld + - run: python -c "import underworld" \ No newline at end of file From dbe94757cbd6128c719139f473b097d699647d9a Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 14:14:05 +1000 Subject: [PATCH 20/80] Add tests --- .github/workflows/test.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 07ac9b6d..42e85ecc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,8 +3,9 @@ name: tests on: [push] jobs: - runs-on: ubuntu-latest - steps: - - uses: docker://underworldcode/underworld2 - - name: Impoet Underworld - - run: python -c "import underworld" \ No newline at end of file + test: + runs-on: ubuntu-latest + steps: + - uses: docker://underworldcode/underworld2 + - name: Impoet Underworld + - run: python -c "import underworld" \ No newline at end of file From 911d87725cda3986921ecd658ee55799b2858ef5 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 14:15:17 +1000 Subject: [PATCH 21/80] Add tests --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 42e85ecc..013739ea 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,4 +8,4 @@ jobs: steps: - uses: docker://underworldcode/underworld2 - name: Impoet Underworld - - run: python -c "import underworld" \ No newline at end of file + run: python -c "import underworld" \ No newline at end of file From c3c314eb0ffac6289e3ab918421501bff893a16b Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 14:25:39 +1000 Subject: [PATCH 22/80] Add tests --- .github/workflows/test.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 013739ea..b695d025 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,6 +6,8 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: docker://underworldcode/underworld2 - - name: Impoet Underworld - run: python -c "import underworld" \ No newline at end of file + - uses: actions/checkout@v2 + - name: Build the stack + run: docker-compose up -d + - name: Test + run: docker run container:webapp-frontend python -c "import underworld" \ No newline at end of file From 8be97f98cf5718f821daa0bc0e5b761a6053a3c2 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 14:30:08 +1000 Subject: [PATCH 23/80] Add tests --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b695d025..bd2a3cbc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,4 +10,4 @@ jobs: - name: Build the stack run: docker-compose up -d - name: Test - run: docker run container:webapp-frontend python -c "import underworld" \ No newline at end of file + run: docker run container:UWGeodynamics-dev python -c "import underworld" \ No newline at end of file From 4c273af8dcd1c4273b0287af4c2504f7d6f5a7f4 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 17:02:24 +1000 Subject: [PATCH 24/80] cleaning --- .github/workflows/test.yml | 2 +- .gitignore | 9 +++++++++ requirements.readthedocs.txt | 0 3 files changed, 10 insertions(+), 1 deletion(-) delete mode 100644 requirements.readthedocs.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bd2a3cbc..16db5277 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,4 +10,4 @@ jobs: - name: Build the stack run: docker-compose up -d - name: Test - run: docker run container:UWGeodynamics-dev python -c "import underworld" \ No newline at end of file + run: docker exec UWGeodynamics-dev /bin/bash \ No newline at end of file diff --git a/.gitignore b/.gitignore index ad6b5897..5291772d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,16 @@ __pycache__/ *.so *~ */.ipynb_checkpoints +tests/test_results/* +tutorials/*.png +examples/*.png +tutorials/out* # due to using tox and pytest .tox .cache + +*.h5 +*.xmf +*.xdmf +*.hdf5 \ No newline at end of file diff --git a/requirements.readthedocs.txt b/requirements.readthedocs.txt deleted file mode 100644 index e69de29b..00000000 From 2545a090552a68732f5f7d75e763a113cf1451ed Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 17:15:36 +1000 Subject: [PATCH 25/80] Move advector --- UWGeodynamics/_utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/UWGeodynamics/_utils.py b/UWGeodynamics/_utils.py index 3c445a99..3db25289 100644 --- a/UWGeodynamics/_utils.py +++ b/UWGeodynamics/_utils.py @@ -81,6 +81,10 @@ def __init__(self, mesh, velocityField, name=None, self.particleEscape = particleEscape self.zOnly = zOnly + self.advector = uw.systems.SwarmAdvector( + swarm=self, + velocityField=self.velocityField, order=2) + self.tracked_fields = {} def _global_indices(self): @@ -97,10 +101,6 @@ def add_particles_with_coordinates(self, vertices, **kwargs): vals = super(PassiveTracers, self).add_particles_with_coordinates(nd(vertices), **kwargs) - self.advector = uw.systems.SwarmAdvector( - swarm=self, - velocityField=self.velocityField, order=2) - self._global_indices() return vals From 8ae556b2ffcb99a17d266229f4319b944f599249 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 17:32:53 +1000 Subject: [PATCH 26/80] Modif docker-compose --- docker-compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 1845d908..54d499bf 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -11,5 +11,8 @@ services: command: "jupyter notebook --ip=0.0.0.0 --no-browser" ports: - "8888:8888" - - "9999:9999" + - "9999:9999" + volumes: + - "$PWD:workspace" + From 03ed3120f98e92777b4d09eab4d1f6f370fe92dc Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 17:39:21 +1000 Subject: [PATCH 27/80] try interactive container --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 16db5277..6da69ea4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,4 +10,4 @@ jobs: - name: Build the stack run: docker-compose up -d - name: Test - run: docker exec UWGeodynamics-dev /bin/bash \ No newline at end of file + run: docker exec -i UWGeodynamics-dev /bin/bash \ No newline at end of file From da797cbeeaec1c48800f49b79daae33b8bb4ffda Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 17:51:36 +1000 Subject: [PATCH 28/80] Fix volume --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 54d499bf..a132e077 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -13,6 +13,6 @@ services: - "8888:8888" - "9999:9999" volumes: - - "$PWD:workspace" + - "$PWD:/workspace" From 408492e3289c59d0fdd9b566e65454e829070dcb Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 18:06:47 +1000 Subject: [PATCH 29/80] try taht --- .github/workflows/test.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6da69ea4..777081d7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,4 +10,8 @@ jobs: - name: Build the stack run: docker-compose up -d - name: Test - run: docker exec -i UWGeodynamics-dev /bin/bash \ No newline at end of file + run: docker exec -i UWGeodynamics-dev /bin/bash + - name: Install UWGeodynamics + run: cd workspace & pip install -e . + - name: Run tests + run: pytest -v \ No newline at end of file From 7bc7e2b696dec911adca67779950a0724e319a79 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 22 May 2020 19:51:18 +1000 Subject: [PATCH 30/80] Install pytest --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 777081d7..9a699e50 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,4 +14,4 @@ jobs: - name: Install UWGeodynamics run: cd workspace & pip install -e . - name: Run tests - run: pytest -v \ No newline at end of file + run: pip install pytest & pytest -v \ No newline at end of file From 97db84c7b525e3821a591f576a012295b76c2ac2 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Sat, 23 May 2020 02:41:57 +0000 Subject: [PATCH 31/80] Revert "Move advector" This reverts commit 2545a090552a68732f5f7d75e763a113cf1451ed. --- UWGeodynamics/_utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/UWGeodynamics/_utils.py b/UWGeodynamics/_utils.py index 3db25289..3c445a99 100644 --- a/UWGeodynamics/_utils.py +++ b/UWGeodynamics/_utils.py @@ -81,10 +81,6 @@ def __init__(self, mesh, velocityField, name=None, self.particleEscape = particleEscape self.zOnly = zOnly - self.advector = uw.systems.SwarmAdvector( - swarm=self, - velocityField=self.velocityField, order=2) - self.tracked_fields = {} def _global_indices(self): @@ -101,6 +97,10 @@ def add_particles_with_coordinates(self, vertices, **kwargs): vals = super(PassiveTracers, self).add_particles_with_coordinates(nd(vertices), **kwargs) + self.advector = uw.systems.SwarmAdvector( + swarm=self, + velocityField=self.velocityField, order=2) + self._global_indices() return vals From 4496545b99a021b0d9cc1882b0b3ee224f60eeb1 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Sat, 23 May 2020 04:14:38 +0000 Subject: [PATCH 32/80] Simplify Passive Tracers --- UWGeodynamics/_model.py | 26 +++++++++++----------- UWGeodynamics/_utils.py | 49 ++++++++++------------------------------- 2 files changed, 25 insertions(+), 50 deletions(-) diff --git a/UWGeodynamics/_model.py b/UWGeodynamics/_model.py index c95890ba..b9952db8 100644 --- a/UWGeodynamics/_model.py +++ b/UWGeodynamics/_model.py @@ -1739,8 +1739,9 @@ def _update(self): self._update_stress_history(dt) if self.passive_tracers: - for key in self.passive_tracers: - self.passive_tracers[key].integrate(dt) + for key, val in self.passive_tracers.items(): + if val.advector: + val.advector.integrate(dt) # Do pop control self.population_control.repopulate() @@ -1769,7 +1770,8 @@ def mesh_advector(self, axis): self._advector = Mesh_advector(self, axis) def add_passive_tracers(self, name, vertices=None, - particleEscape=True, centroids=None, zOnly=False): + particleEscape=True, centroids=None, + advect=True): """ Add a swarm of passive tracers to the Model Parameters: @@ -1832,10 +1834,8 @@ def add_passive_tracers(self, name, vertices=None, if not centroids: tracers = PassiveTracers(self.mesh, - self.velocityField, name=name, - particleEscape=particleEscape, - zOnly=zOnly) + particleEscape=particleEscape) tracers.add_particles_with_coordinates(vertices) else: @@ -1857,15 +1857,16 @@ def add_passive_tracers(self, name, vertices=None, vertices[:, 2] = z tracers = PassiveTracers(self.mesh, - self.velocityField, name=name, - particleEscape=particleEscape, - zOnly=zOnly) + particleEscape=particleEscape) tracers.add_particles_with_coordinates(vertices) + if advect: + tracers.advector = uw.systems.SwarmAdvector( + self.velocityField, tracers, order=2) + self.passive_tracers[name] = tracers setattr(self, name.lower() + "_tracers", tracers) - return tracers def _get_melt_fraction(self): @@ -2696,7 +2697,6 @@ def reload_restart_variables(self, step): sys.stdout.flush() def reload_passive_tracers(self, step): - Model = self.Model @@ -2707,11 +2707,11 @@ def reload_passive_tracers(self, step): tracked_fields = tracer.tracked_fields obj = PassiveTracers(Model.mesh, - Model.velocityField, tracer.name, - zOnly=tracer.zOnly, particleEscape=tracer.particleEscape) obj.load(fpath) + if tracer.advector: + tracer.advector = uw.systems.SwarmAdvector(Model.velocityField, tracer, order=2) # Reload global indices fpath = os.path.join(self.restartDir, tracer.name + '_global_index-%s.h5' % step) diff --git a/UWGeodynamics/_utils.py b/UWGeodynamics/_utils.py index 3c445a99..d47ea554 100644 --- a/UWGeodynamics/_utils.py +++ b/UWGeodynamics/_utils.py @@ -69,19 +69,24 @@ def smooth(self): class PassiveTracers(Swarm): - def __init__(self, mesh, velocityField, name=None, - particleEscape=True, zOnly=False): + def __init__(self, mesh, name=None, particleEscape=True): super(PassiveTracers, self).__init__(mesh, particleEscape=particleEscape) self.name = name - self.velocityField = velocityField - self.angular_velocity = 0.5 * (self.velocityField.fn_gradient[1] - - self.velocityField.fn_gradient[2]) self.particleEscape = particleEscape - self.zOnly = zOnly - self.tracked_fields = {} + self._advector = None + + @property + def advector(self): + return self._advector + + @advector.setter + def advector(self, uw_advector): + if not isinstance(uw_advector, uw.systems.SwarmAdvector): + raise ValueError(""" The advector must be an Underworld SwarmAdvector object""") + self._advector = uw_advector def _global_indices(self): indices = np.arange(self.particleLocalCount) @@ -93,41 +98,12 @@ def _global_indices(self): self.global_index.data[:, 0] = pairs.view(np.int64) def add_particles_with_coordinates(self, vertices, **kwargs): - vals = super(PassiveTracers, self).add_particles_with_coordinates(nd(vertices), **kwargs) - self.advector = uw.systems.SwarmAdvector( - swarm=self, - velocityField=self.velocityField, order=2) - self._global_indices() return vals - def integrate(self, dt, **kwargs): - """ Integrate swarm velocity in time """ - if self.zOnly: - saved_velocities = np.copy(self.velocityField.data) - self.velocityField.data[:, :-1] = 0. - self.velocityField.syncronise() - self.advector.integrate(dt, **kwargs) - self.velocityField.data[...] = saved_velocities - self.velocityField.syncronise() - else: - self.advector.integrate(dt, **kwargs) - - # Integrate tracked field variables over time - for name, field in self.tracked_fields.items(): - if field["timeIntegration"]: - obj = getattr(self, name) - if self.mesh.dim == 2 and obj.data.shape[-1] > 2: - ang_vel = self.angular_velocity - dtheta = dt * ang_vel.evaluate(self).reshape(1, -1) - rotateTensor2D(obj.data[:, 0:3], dtheta) - obj.data[:, 0:3] += field["value"].evaluate(self) - else: - obj.data[...] += field["value"].evaluate(self) * dt - def add_tracked_field(self, value, name, units, dataType, count=1, overwrite=True, timeIntegration=False): """ Add a field to be tracked """ @@ -206,7 +182,6 @@ def save(self, outputDir, checkpointID, time): comm.Barrier() # get swarm parameters - serially read from hdf5 file to get size - if rank == 0: with h5py.File(name=swarm_fpath, mode="r") as h5f: dset = h5f.get('data') From 8dc21a9807d93c9a1c33803b6fee2ebe4ae55708 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 27 May 2020 15:37:10 +1000 Subject: [PATCH 33/80] Run test in UW container --- .github/workflows/test.yml | 23 +++++++++++++---------- setup.py | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9a699e50..7533a6c1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,15 +3,18 @@ name: tests on: [push] jobs: - test: + test_in_UW_Container: runs-on: ubuntu-latest + container: + image: underworldcode/underworld2:2.9.4b + options: --user root steps: - - uses: actions/checkout@v2 - - name: Build the stack - run: docker-compose up -d - - name: Test - run: docker exec -i UWGeodynamics-dev /bin/bash - - name: Install UWGeodynamics - run: cd workspace & pip install -e . - - name: Run tests - run: pip install pytest & pytest -v \ No newline at end of file + - name: Test in UW Container + run: | + cd /home/jovyan/workspace + git clone https://github.com/underworldcode/UWGeodynamics.git UWGeodynamics + cd UWGeodynamics + git checkout development + pip install -e . + pip install pytest + python -m pytest -vvv diff --git a/setup.py b/setup.py index 9ad58ecb..9352b63e 100644 --- a/setup.py +++ b/setup.py @@ -218,7 +218,7 @@ def write_version_py(filename='UWGeodynamics/version.py'): # # For an analysis of "install_requires" vs pip's requirements files see: # https://packaging.python.org/en/latest/requirements.html - install_requires=['pint', 'numpy', 'scipy', 'pyshp'], # Optional + install_requires=['pint', 'numpy', 'scipy'], # Optional # List additional groups of dependencies here (e.g. development # dependencies). Users will be able to install these using the "extras" From 55b593d23cd4a1217cba16a995a93e25d178a45e Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Sun, 21 Jun 2020 09:04:28 +0000 Subject: [PATCH 34/80] Fix simple tests --- tests/test_simple.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/test_simple.py b/tests/test_simple.py index 3f13611f..38a28977 100644 --- a/tests/test_simple.py +++ b/tests/test_simple.py @@ -127,9 +127,11 @@ def test_temperature_boundary_condition(): def test_passive_tracers(): import numpy as np - x = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), 1000) - y = GEO.nd(32. * u.kilometer) - P = Model.add_passive_tracers(name="Tracers", vertices=[x, y]) + npoints = 1000 + coords = np.ndarray((1000, 2)) + coords[:, 0] = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), npoints) + coords[:, 1] = GEO.nd(32. * u.kilometer) + P = Model.add_passive_tracers(name="Tracers", vertices=coords) def test_set_velocity_boundary_conditions_in_3D(): velocityBCs = Model3D.set_velocityBCs( From 970e84c6b1e7c6c5639121c26a78ce5a19472b9e Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Sun, 21 Jun 2020 23:51:43 +0000 Subject: [PATCH 35/80] Fix benchmarks --- .../1_12_Slab_Detachment_Benchmark.ipynb | 34 ++++++++----- benchmarks/1_22_Indentor_Benchmark.ipynb | 6 ++- benchmarks/2D_Self_Subduction_Case1.ipynb | 22 ++++++--- benchmarks/2D_Self_Subduction_Case2.ipynb | 48 ++++++++++--------- .../Kaus_BrickBenchmark-Compression.ipynb | 3 +- .../Kaus_BrickBenchmark_Extension.ipynb | 3 +- 6 files changed, 68 insertions(+), 48 deletions(-) diff --git a/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb b/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb index 4cc1680a..e437a724 100644 --- a/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb +++ b/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb @@ -18,7 +18,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /opt/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -161,21 +161,29 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", - "y = np.linspace(GEO.nd(-330. * u.kilometer), GEO.nd(-80. * u.kilometer), 10)\n", + "npoints = 10\n", "\n", - "left_tracers = Model.add_passive_tracers(name=\"left tracers\", vertices=[GEO.nd(-40. * u.kilometer), y])\n", - "right_tracers = Model.add_passive_tracers(name=\"right tracers\", vertices=[GEO.nd(40. * u.kilometer), y])" + "y = np.linspace(GEO.nd(-330. * u.kilometer), GEO.nd(-80. * u.kilometer), npoints)\n", + "\n", + "coords = np.ndarray((npoints, 2))\n", + "\n", + "coords[:, 0] = GEO.nd(-40 * u.km)\n", + "coords[:, 1] = y\n", + "left_tracers = Model.add_passive_tracers(name=\"left tracers\", vertices=coords)\n", + "\n", + "coords[:, 0] = GEO.nd(40 * u.km)\n", + "right_tracers = Model.add_passive_tracers(name=\"right tracers\", vertices=coords)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -201,16 +209,16 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 15, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -221,7 +229,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -230,13 +238,13 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -254,7 +262,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ diff --git a/benchmarks/1_22_Indentor_Benchmark.ipynb b/benchmarks/1_22_Indentor_Benchmark.ipynb index d242a573..6587bbf7 100644 --- a/benchmarks/1_22_Indentor_Benchmark.ipynb +++ b/benchmarks/1_22_Indentor_Benchmark.ipynb @@ -4,7 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# The Indentor Benchmark" + "# The Indentor Benchmark\n", + "\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au" ] }, { @@ -219,7 +221,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/benchmarks/2D_Self_Subduction_Case1.ipynb b/benchmarks/2D_Self_Subduction_Case1.ipynb index d930ae90..9185362f 100644 --- a/benchmarks/2D_Self_Subduction_Case1.ipynb +++ b/benchmarks/2D_Self_Subduction_Case1.ipynb @@ -4,7 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Self Subduction Case 1" + "# Self Subduction Case 1\n", + "\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au" ] }, { @@ -16,7 +18,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /opt/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -120,18 +122,24 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "tip_tracer1 = Model.add_passive_tracers(name=\"tip tracer 1\", vertices=[GEO.nd(-500. * u.kilometer), GEO.nd(-200. * u.kilometer)])\n", - "tip_tracer2 = Model.add_passive_tracers(name=\"tip tracer 2\", vertices=[GEO.nd(-450. * u.kilometer), GEO.nd(-200. * u.kilometer)])\n", - "tip_tracer3 = Model.add_passive_tracers(name=\"tip tracer 3\", vertices=[GEO.nd(-400. * u.kilometer), GEO.nd(-200. * u.kilometer)])" + "import numpy as np\n", + "\n", + "coords1 = GEO.nd(np.array([[-500, -200]]) * u.km) \n", + "coords2 = GEO.nd(np.array([[-450, -200]]) * u.km) \n", + "coords3 = GEO.nd(np.array([[-400, -200]]) * u.km)\n", + "\n", + "tip_tracer1 = Model.add_passive_tracers(name=\"tip tracer 1\", vertices=coords1)\n", + "tip_tracer2 = Model.add_passive_tracers(name=\"tip tracer 2\", vertices=coords2)\n", + "tip_tracer3 = Model.add_passive_tracers(name=\"tip tracer 3\", vertices=coords3)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { diff --git a/benchmarks/2D_Self_Subduction_Case2.ipynb b/benchmarks/2D_Self_Subduction_Case2.ipynb index 6cd31f24..5c693152 100644 --- a/benchmarks/2D_Self_Subduction_Case2.ipynb +++ b/benchmarks/2D_Self_Subduction_Case2.ipynb @@ -4,7 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Self Subduction Case 2" + "# Self Subduction Case 2\n", + "\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au" ] }, { @@ -16,7 +18,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /opt/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -85,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -104,7 +106,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -115,13 +117,13 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -139,24 +141,30 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "tip_tracer1 = Model.add_passive_tracers(name=\"tip tracer 1\", vertices=[GEO.nd(-500. * u.kilometer - dx1), GEO.nd(0. * u.kilometer - dy1)])\n", - "tip_tracer2 = Model.add_passive_tracers(name=\"tip tracer 2\", vertices=[GEO.nd(-500. * u.kilometer - dx1 + dx2/2.0), GEO.nd(0. * u.kilometer - dy1 - dy2/2.0)])\n", - "tip_tracer3 = Model.add_passive_tracers(name=\"tip tracer 3\", vertices=[GEO.nd(-500. * u.kilometer - dx1 + dx2), GEO.nd(0. * u.kilometer - dy1 - dy2)])" + "x1, y1 = GEO.nd(-500. * u.km - dx1), GEO.nd(-dy1)\n", + "x2, y2 = GEO.nd(-500. * u.km - dx1 + dx2/2.0), GEO.nd(-dy1 - dy2/2.0)\n", + "x3, y3 = GEO.nd(-500. * u.km - dx1 + dx2), GEO.nd(-dy1 - dy2)\n", + "\n", + "coords = np.ndarray((3, 2))\n", + "coords[:, 0] = np.array([x1, x2, x3])\n", + "coords[:, 1] = np.array([y1, y2, y3])\n", + "\n", + "tip_tracers = Model.add_passive_tracers(name=\"tip tracers\", vertices=coords)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -169,16 +177,14 @@ "source": [ "from UWGeodynamics import visualisation as vis\n", "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Points(tip_tracer1, pointSize=5.0)\n", - "Fig.Points(tip_tracer2, pointSize=5.0)\n", - "Fig.Points(tip_tracer3, pointSize=5.0)\n", + "Fig.Points(tip_tracers, pointSize=5.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=3.0)\n", "Fig.show()" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -189,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -200,17 +206,15 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/opt/UWGeodynamics/UWGeodynamics/__init__.py:83: UserWarning: 'Dimensionalize' has been changed to 'dimensionalise', please use the later\n", - " warnings.warn(\"\"\"'Dimensionalize' has been changed to 'dimensionalise', please use the later\"\"\")\n", - "/usr/lib/python3.7/site-packages/pint/quantity.py:1377: UnitStrippedWarning: The unit of the quantity is stripped.\n", - " warnings.warn(\"The unit of the quantity is stripped.\", UnitStrippedWarning)\n" + "/home/jovyan/UWGeodynamics/UWGeodynamics/__init__.py:91: UserWarning: 'Dimensionalize' has been changed to 'dimensionalise', please use the later\n", + " warnings.warn(\"\"\"'Dimensionalize' has been changed to 'dimensionalise', please use the later\"\"\")\n" ] }, { diff --git a/benchmarks/Kaus_BrickBenchmark-Compression.ipynb b/benchmarks/Kaus_BrickBenchmark-Compression.ipynb index 70755c3e..975f11ea 100644 --- a/benchmarks/Kaus_BrickBenchmark-Compression.ipynb +++ b/benchmarks/Kaus_BrickBenchmark-Compression.ipynb @@ -6,8 +6,7 @@ "source": [ "# Brick Benchmark Model Compression\n", "\n", - "**Romain Beucher**\n", - "Version 0.1" + "**Romain Beucher** romain.beucher (at) anu.edu.au" ] }, { diff --git a/benchmarks/Kaus_BrickBenchmark_Extension.ipynb b/benchmarks/Kaus_BrickBenchmark_Extension.ipynb index 5a1cd9a5..c70f5962 100644 --- a/benchmarks/Kaus_BrickBenchmark_Extension.ipynb +++ b/benchmarks/Kaus_BrickBenchmark_Extension.ipynb @@ -6,8 +6,7 @@ "source": [ "# Brick Benchmark Model Extension\n", "\n", - "**Romain Beucher**\n", - "Version 0.1" + "**Romain Beucher** romain.beucher (at) anu.edu.au" ] }, { From 8b140dce205e6891d598debc48fd8245578433ce Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 01:25:35 +0000 Subject: [PATCH 36/80] Fix Examples --- examples/1_05_StokesSinker.ipynb | 61 +- examples/1_07_SlabSubduction.ipynb | 62 +- examples/1_08_ViscoElasticHalfSpace.ipynb | 2 +- examples/1_20_ColumnsTractionBottom.ipynb | 2 +- examples/1_21_3D_ColumnsTractionBottom.ipynb | 25 +- examples/1_24_Define_3D_volumes.ipynb | 9837 +++++++++++++++--- tests/test_examples.py | 38 +- 7 files changed, 8227 insertions(+), 1800 deletions(-) diff --git a/examples/1_05_StokesSinker.ipynb b/examples/1_05_StokesSinker.ipynb index b997f140..b2e0e61f 100644 --- a/examples/1_05_StokesSinker.ipynb +++ b/examples/1_05_StokesSinker.ipynb @@ -6,6 +6,8 @@ "source": [ "# Stokes Sinker\n", "\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au\n", + "\n", "Demonstration example for setting up particle swarms with different material properties. This system consists of a dense, high viscosity sphere falling through a background lower density and viscosity fluid.\n", "\n", "![Stokes 2D](./images/Stokes2D.gif)" @@ -20,7 +22,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /workspace/user_data/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -141,7 +143,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 7, @@ -223,24 +225,24 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 10, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "coords = np.ndarray((1, 2))\n", - "coords[:, 0] = 0.\n", - "coords[:, 1] = GEO.nd(20. * u.centimetre)\n", + "import numpy as np\n", + "\n", + "coords = np.array([[0., GEO.nd(20. * u.centimetre)]])\n", "\n", "Model.add_passive_tracers(name=\"tip\", vertices=coords)" ] @@ -257,7 +259,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -292,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -301,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -317,13 +319,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Solve\n", - "Running with UWGeodynamics version 2.8.1-dev-38b7335(development)\n", - "Options: -Q22_pc_type uw -change_backsolve False -ksp_k2_type NULL -remove_constant_pressure_null_space False -rescale_equations False -restore_K False -ksp_type bsscr -change_A11rhspresolve False -pc_type none -A11_ksp_rtol 1e-06 -A11_ksp_type fgmres -scr_ksp_rtol 1e-05 -scr_ksp_type fgmres\n", - "Solve\n", - "Step: 1 Model Time: 0.00 year dt: 0.00 year (2019-03-14 22:48:01)\n", - "Solve\n", - "Step: 2 Model Time: 0.00 year dt: 0.00 year (2019-03-14 22:48:06)\n" + "Running with UWGeodynamics version 2.9.6\n", + "Options: -Q22_pc_type uw -ksp_type bsscr -pc_type none -ksp_k2_type NULL -rescale_equations False -remove_constant_pressure_null_space False -change_backsolve False -change_A11rhspresolve False -restore_K False -A11_ksp_type fgmres -A11_ksp_rtol 1e-06 -scr_ksp_type fgmres -scr_ksp_rtol 1e-05\n", + "Step: 1 Model Time: 7.8 minute dt: 7.8 minute (2020-06-21 23:56:50)\n", + "Step: 2 Model Time: 15.6 minute dt: 7.7 minute (2020-06-21 23:56:52)\n" ] }, { @@ -352,13 +351,13 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -393,7 +392,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -436,14 +435,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python3.5/dist-packages/pint/quantity.py:1377: UnitStrippedWarning: The unit of the quantity is stripped.\n", + "/usr/lib/python3.7/site-packages/pint/quantity.py:1377: UnitStrippedWarning: The unit of the quantity is stripped.\n", " warnings.warn(\"The unit of the quantity is stripped.\", UnitStrippedWarning)\n" ] }, { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -476,16 +475,19 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { + "image/png": "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\n", "text/plain": [ - "" + "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -498,13 +500,6 @@ " plt.ylabel('Sinker position')\n", " plt.show()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/examples/1_07_SlabSubduction.ipynb b/examples/1_07_SlabSubduction.ipynb index c6c09ba9..90347c64 100644 --- a/examples/1_07_SlabSubduction.ipynb +++ b/examples/1_07_SlabSubduction.ipynb @@ -22,7 +22,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /workspace/user_data/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -46,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -95,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -108,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -121,23 +121,23 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "upperSlab.plasticity = GEO.VonMises(cohesion=0.06)\n", - "lowerSlab.plasticity = GEO.VonMises(cohesion=0.06)" + "# upperSlab.plasticity = GEO.VonMises(cohesion=0.06)\n", + "# lowerSlab.plasticity = GEO.VonMises(cohesion=0.06)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -163,16 +163,16 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -190,12 +190,40 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running with UWGeodynamics version 2.9.6\n", + "Options: -Q22_pc_type uw -ksp_type bsscr -pc_type none -ksp_k2_type NULL -rescale_equations False -remove_constant_pressure_null_space False -change_backsolve False -change_A11rhspresolve False -restore_K False -A11_ksp_type fgmres -A11_ksp_rtol 1e-06 -scr_ksp_type fgmres -scr_ksp_rtol 1e-05\n", + "Step: 1 Model Time: 50.1 year dt: 50.1 year (2020-06-22 00:08:42)\n", + "Step: 2 Model Time: 102.6 year dt: 52.5 year (2020-06-22 00:09:08)\n" + ] + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "Model.run_for(nstep=2)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -214,7 +242,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/examples/1_08_ViscoElasticHalfSpace.ipynb b/examples/1_08_ViscoElasticHalfSpace.ipynb index f015a484..f4a6a764 100644 --- a/examples/1_08_ViscoElasticHalfSpace.ipynb +++ b/examples/1_08_ViscoElasticHalfSpace.ipynb @@ -313,7 +313,7 @@ "source": [ "coords = np.ndarray((201, 2))\n", "coords[:, 0] = np.linspace(GEO.nd(minX), GEO.nd(maxX), 201)\n", - "coords[:, 1] = GEO.nd(w_m) * np.cos(2. * np.pi * x / GEO.nd(Lambda))\n", + "coords[:, 1] = GEO.nd(w_m) * np.cos(2. * np.pi * coords[:, 0] / GEO.nd(Lambda))\n", "\n", "tracerSurface = Model.add_passive_tracers(name=\"Tracer Swarm\", vertices=coords)\n", "\n", diff --git a/examples/1_20_ColumnsTractionBottom.ipynb b/examples/1_20_ColumnsTractionBottom.ipynb index 5edc29d7..7d0c24fa 100644 --- a/examples/1_20_ColumnsTractionBottom.ipynb +++ b/examples/1_20_ColumnsTractionBottom.ipynb @@ -240,7 +240,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/examples/1_21_3D_ColumnsTractionBottom.ipynb b/examples/1_21_3D_ColumnsTractionBottom.ipynb index 18c95ea1..8c1acba1 100644 --- a/examples/1_21_3D_ColumnsTractionBottom.ipynb +++ b/examples/1_21_3D_ColumnsTractionBottom.ipynb @@ -2,9 +2,17 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + ] + } + ], "source": [ "import UWGeodynamics as GEO\n", "from UWGeodynamics import visualisation as vis" @@ -12,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -21,7 +29,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -42,13 +50,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "Model = GEO.Model(elementRes=(16,16,16), \n", " minCoord=(-30 * u.kilometer, -30. * u.kilometer, -20 * u.kilometer),\n", - " maxCoord=( 30 * u.kilometer, 30. * u.kilometer, 10 * u.kilometer))" + " maxCoord=( 30 * u.kilometer, 30. * u.kilometer, 10 * u.kilometer), \n", + " gravity=(0., 0., -9.81 * u.meter / u.second**2))" ] }, { @@ -143,7 +152,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.run_for(2.0 * u.year, checkpoint_interval=2.0 * u.year)" + "Model.run_for(nstep=1)" ] } ], @@ -163,7 +172,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/examples/1_24_Define_3D_volumes.ipynb b/examples/1_24_Define_3D_volumes.ipynb index be902895..fb74548d 100644 --- a/examples/1_24_Define_3D_volumes.ipynb +++ b/examples/1_24_Define_3D_volumes.ipynb @@ -8,7 +8,7 @@ "\n", "Claire Mallard (claire.mallard@sydney.edu.au)\n", "\n", - "Romain Beucher (romain.beucher@unimelb.edu.au)" + "Romain Beucher (romain.beucher@anu.edu.au)" ] }, { @@ -20,7 +20,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /workspace/user_data/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -112,34 +112,6 @@ { "data": { "text/html": [ - "\n", "\n", "\n", "\n", + "\n", + "\n" ], @@ -1075,20 +2352,30 @@ { "data": { "text/html": [ - "
\n", - "\n", + "\n", + "
\n", + "
\n", + "
\n", + "\n", "\n", "
\n", - " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", "
\n", "
\n", + "
\n", + "
\n", "
\n", - "
\n" + "" ], "text/plain": [ "" @@ -1096,18 +2383,6 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "_wi[0] = new WindowInteractor(0);" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -1165,34 +2440,6 @@ { "data": { "text/html": [ - "\n", "\n", "\n", "\n", + "\n", + "\n" ], @@ -2128,20 +4680,30 @@ { "data": { "text/html": [ - "
\n", - "\n", + "\n", + "
\n", + "
\n", + "
\n", + "\n", "\n", "
\n", - " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", "
\n", "
\n", + "
\n", "
\n", - "
\n" + "
\n", + "" ], "text/plain": [ "" @@ -2149,18 +4711,6 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "_wi[1] = new WindowInteractor(1);" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -2230,34 +4780,6 @@ { "data": { "text/html": [ - "\n", "\n", "\n", "\n", + "\n", + "\n" ], @@ -3193,20 +7020,30 @@ { "data": { "text/html": [ - "
\n", - "\n", + "\n", + "
\n", + "
\n", + "
\n", + "\n", "\n", "
\n", - " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", "
\n", "
\n", + "
\n", + "
\n", "
\n", - "
\n" + "" ], "text/plain": [ "" @@ -3214,18 +7051,6 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "_wi[2] = new WindowInteractor(2);" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -3285,34 +7110,6 @@ { "data": { "text/html": [ - "\n", "\n", "\n", "\n", + "\n", + "\n" ], @@ -4248,20 +9350,30 @@ { "data": { "text/html": [ - "
\n", - "\n", + "\n", + "
\n", + "
\n", + "
\n", + "\n", "\n", "
\n", - " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", "
\n", "
\n", + "
\n", "
\n", - "
\n" + "
\n", + "" ], "text/plain": [ "" @@ -4269,18 +9381,6 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "_wi[3] = new WindowInteractor(3);" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -4303,16 +9403,16 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ - "CompositeShape = CompositeShape_Polygon1 + CompositeShape_Polygon2" + "CompositeShape = CompositeShape_Polygon1 | CompositeShape_Polygon2" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -4321,40 +9421,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "\n", "\n", "\n", "\n", + "\n", + "\n" ], @@ -5290,20 +11667,30 @@ { "data": { "text/html": [ - "
\n", - "\n", + "\n", + "
\n", + "
\n", + "
\n", + "\n", "\n", "
\n", - " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", "
\n", "
\n", + "
\n", + "
\n", "
\n", - "
\n" + "" ], "text/plain": [ "" @@ -5311,18 +11698,6 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "_wi[4] = new WindowInteractor(4);" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -5353,7 +11728,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/tests/test_examples.py b/tests/test_examples.py index 75724b82..f7059190 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -19,9 +19,9 @@ def test_stokes_sinker(): def test_hypnic_jerk(): _notebook_run("examples/1_06_HypnicJerk.ipynb") - -#def test_slab_subduction(): -# _notebook_run("examples/1_07_SlabSubduction.ipynb") +# ### Not sure why this is not working. This triggers non-linear solver. +# ### def test_slab_subduction(): +# ### _notebook_run("examples/1_07_SlabSubduction.ipynb") def test_viscoelastic_halfspace(): @@ -36,30 +36,50 @@ def test_viscoplasticity_simple_shear(): _notebook_run("examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb") -#def test_stokes_sinker_3D(): -# _notebook_run("examples/1_11_StokesSinker3D.ipynb") +def test_stokes_sinker_3D(): + _notebook_run("examples/1_11_StokesSinker3D.ipynb") def test_columns_traction_bottom(): _notebook_run("examples/1_20_ColumnsTractionBottom.ipynb") -#def test_columns_traction_bottom_3D(): -# _notebook_run("examples/1_21_3D_ColumnsTractionBottom.ipynb") +def test_columns_traction_bottom_3D(): + _notebook_run("examples/1_21_3D_ColumnsTractionBottom.ipynb") def test_freesurface_simple(): _notebook_run("examples/1_23_FreeSurface_Simple_Example.ipynb") -#def test_define_3D_volume(): -# _notebook_run("1_24_Define_3D_volumes.ipynb") +def test_define_3D_volume(): + _notebook_run("examples/1_24_Define_3D_volumes.ipynb") def test_hot_canon_ball(): _notebook_run("examples/1_25_Hot_Canon_Ball.ipynb") +def test_numerical_sandbox_moving_wall(): + _notebook_run("examples/1_26_NumericalSandboxCompression-MovingWall.ipynb") + + +def test_column_pure_thermal_advection(): + _notebook_run("examples/1_27_ColumnPureThermalAdvection.ipynb") + + +def test_poiseuille_under_pressure(): + _notebook_run("examples/1_30_Poiseuille_Under_Pressure.ipynb") + + +def test_user_defined_geotherm(): + _notebook_run("examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb") + + +def test_passive_tracers(): + _notebook_run("examples/1_32_Passive_Tracers_tests.ipynb") + + def test_shear_band_pure_shear(): _notebook_run("examples/2_09_ShearBandsPureShear.ipynb") From 4070acf8f71e233643a4f450f59d1de526701c8b Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 03:16:39 +0000 Subject: [PATCH 37/80] Fix tutorials --- tests/test_tutorials.py | 125 +- tutorials/Tutorial_10_Thrust_Wedges.ipynb | 96 +- .../Tutorial_11_Coupling_with_Badlands.ipynb | 2 +- .../Tutorial_1_ThermoMechanical_Model.ipynb | 5 +- tutorials/Tutorial_2_Melt.ipynb | 4 +- ...rial_3B_SandboxExtension_deform_mesh.ipynb | 21 +- ...orial_3_SandboxExtension_static_mesh.ipynb | 5 +- ...torial_4_NumericalSandboxCompression.ipynb | 5 +- tutorials/Tutorial_5_Convergence_Model.ipynb | 4 +- .../Tutorial_6_Simple_Surface_Processes.ipynb | 60 +- .../Tutorial_7_3D_Lithospheric_Model.ipynb | 8954 ++++++++++++++++- .../Tutorial_8_Subduction_ViscoElastic.ipynb | 2 +- 12 files changed, 8674 insertions(+), 609 deletions(-) diff --git a/tests/test_tutorials.py b/tests/test_tutorials.py index 073caf1c..9b1a42d6 100644 --- a/tests/test_tutorials.py +++ b/tests/test_tutorials.py @@ -1,49 +1,82 @@ from .utils import _notebook_run from .utils import _notebook_run_parallel -#def test_tutorial1(): -# _notebook_run("tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") -# -# -#def test_tutorial1_parallel(): -# _notebook_run_parallel("tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") -# -# -#def test_tutorial2(): -# _notebook_run("tutorials/Tutorial_2_Melt.ipynb") -# -# -#def test_tutorial3(): -# _notebook_run("tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") -# -# -#def test_tutorial3B(): -# _notebook_run("tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") -# -# -#def test_tutorial4(): -# _notebook_run("tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") -# -# -#def test_tutorial5(): -# _notebook_run("tutorials/Tutorial_5_Convergence_Model.ipynb") -# -# -#def test_tutorial6(): -# _notebook_run("tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") -# -# -##def test_tutorial7(): -## _notebook_run("tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") -# -# -#def test_tutorial8(): -# _notebook_run("tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") -# -# -#def test_tutorial9(): -# _notebook_run("tutorials/Tutorial_9_passive_margins.ipynb") -# -# -#def test_tutorial10(): -# _notebook_run("tutorials/Tutorial_10_Thrust_Wedges.ipynb") +def test_tutorial1(): + _notebook_run("tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") + + +def test_tutorial1_parallel(): + _notebook_run_parallel("tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") + + +def test_tutorial2(): + _notebook_run("tutorials/Tutorial_2_Melt.ipynb") + +def test_tutorial2_parallel(): + _notebook_run_parallel("tutorials/Tutorial_2_Melt.ipynb") + + +def test_tutorial3(): + _notebook_run("tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") + +def test_tutorial3_parallel(): + _notebook_run_parallel("tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") + + +def test_tutorial3B(): + _notebook_run("tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") + +def test_tutorial3B_parallel(): + _notebook_run_parallel("tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") + + +def test_tutorial4(): + _notebook_run("tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") + +def test_tutorial4_parallel(): + _notebook_run_parallel("tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") + + +def test_tutorial5(): + _notebook_run("tutorials/Tutorial_5_Convergence_Model.ipynb") + + +def test_tutorial5_parallel(): + _notebook_run_parallel("tutorials/Tutorial_5_Convergence_Model.ipynb") + + +def test_tutorial6(): + _notebook_run("tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") + +def test_tutorial6_parallel(): + _notebook_run_parallel("tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") + +def test_tutorial7(): + _notebook_run("tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") + + +def test_tutorial7_parallel(): + _notebook_run_parallel("tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") + + +def test_tutorial8(): + _notebook_run("tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") + + +def test_tutorial8_parallel(): + _notebook_run_parallel("tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") + + +def test_tutorial9(): + _notebook_run("tutorials/Tutorial_9_passive_margins.ipynb") + +def test_tutorial9_parallel(): + _notebook_run_parallel("tutorials/Tutorial_9_passive_margins.ipynb") + +def test_tutorial10(): + _notebook_run("tutorials/Tutorial_10_Thrust_Wedges.ipynb") + +def test_tutorial10_parallel(): + _notebook_run_parallel("tutorials/Tutorial_10_Thrust_Wedges.ipynb") + + diff --git a/tutorials/Tutorial_10_Thrust_Wedges.ipynb b/tutorials/Tutorial_10_Thrust_Wedges.ipynb index 9c205fa3..03c64c0b 100644 --- a/tutorials/Tutorial_10_Thrust_Wedges.ipynb +++ b/tutorials/Tutorial_10_Thrust_Wedges.ipynb @@ -6,9 +6,9 @@ "source": [ "# Thust Wedge Tutorial\n", "\n", - "Model Setup: Arijit Laik(a.laik@vu.nl)\n", + "Model Setup: Arijit Laik(a.laik (at) vu.nl)\n", "\n", - "Revision: Romain Beucher (rbeucher@unimelb.edu.au)\n", + "Revision: Romain Beucher (romain.beucher (at) anu.edu.au)\n", "\n", "This tutorial is mostly based off Ruh et al. (2013) and other similar stuides, which examine the development thrust sheet and or accretionary wegdes with visco-plastic rheologies .In this 2D model, the boundary conditions, initial conditions,geometry material properties are based on Ruh et al. and other such similar studies.(see Ruh et al. 2013 and references therein: J.B. Ruh, T. Gerya nd J.-P. Burg (2013), G3, v.14(4), p. 1131-1155)" ] @@ -29,7 +29,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /opt/venv/lib/python3.7/site-packages/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -160,7 +160,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -281,7 +281,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -316,7 +316,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -339,9 +339,7 @@ "outputs": [], "source": [ "Model.solver.set_inner_method(\"mumps\")\n", - "Model.solver.set_penalty(1e6)\n", - "GEO.rcParams[\"nonlinear.tolerance\"] = 1e-3\n", - "GEO.rcParams[\"initial.nonlinear.tolerance\"]=1e-5" + "Model.solver.set_penalty(1e6)" ] }, { @@ -358,10 +356,18 @@ "execution_count": 15, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/lib/python3.7/site-packages/pint/quantity.py:1377: UnitStrippedWarning: The unit of the quantity is stripped.\n", + " warnings.warn(\"The unit of the quantity is stripped.\", UnitStrippedWarning)\n" + ] + }, { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -379,68 +385,32 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def post_solve_hook():\n", - " global FigMat\n", - " if Model.step % 10 == 0:\n", - " FigMat.save(\"Material-{0}.png\".format(Model.step))\n", - " \n", - "Model.postSolveHook = post_solve_hook" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Running with UWGeodynamics version 0.9.8b-dev-29e4c3b(development)\n", - "Step: 1 Model Time: 0.01 megayear dt: 0.01 megayear (2018-11-29 02:27:57)\n", - "Step: 2 Model Time: 0.01 megayear dt: 0.01 megayear (2018-11-29 02:28:16)\n", - "Step: 3 Model Time: 0.02 megayear dt: 0.01 megayear (2018-11-29 02:28:36)\n", - "Step: 4 Model Time: 0.02 megayear dt: 0.01 megayear (2018-11-29 02:28:56)\n", - "Step: 5 Model Time: 0.03 megayear dt: 0.01 megayear (2018-11-29 02:29:15)\n", - "Step: 6 Model Time: 0.04 megayear dt: 0.01 megayear (2018-11-29 02:29:35)\n", - "Step: 7 Model Time: 0.04 megayear dt: 0.01 megayear (2018-11-29 02:29:55)\n", - "Step: 8 Model Time: 0.05 megayear dt: 0.01 megayear (2018-11-29 02:30:14)\n", - "Step: 9 Model Time: 0.06 megayear dt: 0.01 megayear (2018-11-29 02:30:36)\n", - "Step: 10 Model Time: 0.06 megayear dt: 0.01 megayear (2018-11-29 02:30:56)\n", - "Step: 11 Model Time: 0.07 megayear dt: 0.01 megayear (2018-11-29 02:31:17)\n", - "Step: 12 Model Time: 0.07 megayear dt: 0.01 megayear (2018-11-29 02:31:36)\n", - "Step: 13 Model Time: 0.08 megayear dt: 0.01 megayear (2018-11-29 02:31:56)\n", - "Step: 14 Model Time: 0.09 megayear dt: 0.01 megayear (2018-11-29 02:32:19)\n", - "Step: 15 Model Time: 0.09 megayear dt: 0.01 megayear (2018-11-29 02:32:40)\n", - "Step: 16 Model Time: 0.10 megayear dt: 0.01 megayear (2018-11-29 02:33:02)\n", - "Step: 17 Model Time: 0.10 megayear dt: 0.00 megayear (2018-11-29 02:33:39)\n", - "Step: 18 Model Time: 0.11 megayear dt: 0.01 megayear (2018-11-29 02:34:00)\n", - "Step: 19 Model Time: 0.11 megayear dt: 0.01 megayear (2018-11-29 02:34:21)\n", - "Step: 20 Model Time: 0.12 megayear dt: 0.01 megayear (2018-11-29 02:34:42)\n", - "Step: 21 Model Time: 0.12 megayear dt: 0.01 megayear (2018-11-29 02:35:04)\n", - "Step: 22 Model Time: 0.13 megayear dt: 0.01 megayear (2018-11-29 02:35:27)\n", - "Step: 23 Model Time: 0.14 megayear dt: 0.01 megayear (2018-11-29 02:35:48)\n", - "Step: 24 Model Time: 0.14 megayear dt: 0.01 megayear (2018-11-29 02:36:08)\n", - "Step: 25 Model Time: 0.15 megayear dt: 0.01 megayear (2018-11-29 02:36:28)\n", - "Step: 26 Model Time: 0.16 megayear dt: 0.01 megayear (2018-11-29 02:36:47)\n", - "Step: 27 Model Time: 0.16 megayear dt: 0.01 megayear (2018-11-29 02:37:07)\n", - "Step: 28 Model Time: 0.17 megayear dt: 0.01 megayear (2018-11-29 02:37:27)\n", - "Step: 29 Model Time: 0.17 megayear dt: 0.01 megayear (2018-11-29 02:37:46)\n", - "Step: 30 Model Time: 0.18 megayear dt: 0.01 megayear (2018-11-29 02:38:06)\n", - "Step: 31 Model Time: 0.19 megayear dt: 0.01 megayear (2018-11-29 02:38:26)\n", - "Step: 32 Model Time: 0.19 megayear dt: 0.01 megayear (2018-11-29 02:38:46)\n", - "Step: 33 Model Time: 0.20 megayear dt: 0.01 megayear (2018-11-29 02:39:06)\n", - "Step: 34 Model Time: 0.20 megayear dt: 0.00 megayear (2018-11-29 02:39:40)\n", - "Step: 35 Model Time: 0.21 megayear dt: 0.01 megayear (2018-11-29 02:40:00)\n" + "Running with UWGeodynamics version 2.9.6\n", + "Options: -Q22_pc_type gkgdiag -force_correction True -ksp_type bsscr -pc_type none -ksp_k2_type NULL -rescale_equations False -remove_constant_pressure_null_space False -change_backsolve False -change_A11rhspresolve False -restore_K False -A11_ksp_type preonly -A11_pc_type lu -A11_pc_factor_mat_solver_type mumps -scr_ksp_type fgmres -scr_ksp_rtol 1e-05 -A11_mg_active False\n", + "Step: 1 Model Time: 6244.4 year dt: 6244.4 year (2020-06-22 03:01:58)\n", + "Step: 2 Model Time: 12488.6 year dt: 6244.1 year (2020-06-22 03:02:08)\n" ] + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "Model.run_for(2.0*u.megayears, checkpoint_interval=0.1 * u.megayear, restartStep=None)" + "Model.run_for(nstep=2)" ] } ], @@ -460,7 +430,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb b/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb index 0ea0577d..acb64f55 100644 --- a/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb +++ b/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb @@ -459,7 +459,7 @@ } ], "source": [ - "Model.run_for(5.0 * u.megayear, checkpoint_interval=0.01*u.megayear)" + "Model.run_for(nstep=2)" ] } ], diff --git a/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb b/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb index c1b4e696..be0f6ca5 100644 --- a/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb +++ b/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb @@ -13,9 +13,8 @@ "source": [ "# A quick Lithospheric Model with visco-plastic non-linear rheologies\n", "\n", - "version 0.2\n", - "Romain Beucher\n", - "romain.beucher@unimelb.edu.au\n", + "**Romain Beucher**\n", + "romain.beucher (at) anu.edu.au\n", "\n", "The following tutorial presents a simple usage of the geodynamics module.\n", "The *geodynamics* module intents to facilitate rapid prototyping of geodynamics models. It can be seen as a set of high-level functions within the underworld ecosystem. It is a means to quickly get the user into Underworld modelling and assumes very little knowledge in coding. The module make some assumptions based on how the user defines the boundary conditions and the properties of the materials (rocks, phases). \n", diff --git a/tutorials/Tutorial_2_Melt.ipynb b/tutorials/Tutorial_2_Melt.ipynb index cf04bdcd..68902d89 100644 --- a/tutorials/Tutorial_2_Melt.ipynb +++ b/tutorials/Tutorial_2_Melt.ipynb @@ -13,9 +13,7 @@ "source": [ "# A quick Lithospheric Model with visco-plastic non-linear rheologies and Melt\n", "\n", - "version 0.2\n", - "Romain Beucher\n", - "romain.beucher@unimelb.edu.au\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au\n", "\n", "The following notebook reproduce the numerical model presented in Rey et al, 2009\n", "\n", diff --git a/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb b/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb index 4be7122e..b49d325d 100644 --- a/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb +++ b/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb @@ -192,14 +192,19 @@ "source": [ "import numpy as np\n", "\n", - "x = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), 1000)\n", - "interface1 = GEO.nd(sand1.top)\n", - "interface2 = GEO.nd(sand2.top)\n", - "interface3 = GEO.nd(sand2.bottom)\n", + "npoints = 1000\n", "\n", - "interface1 = Model.add_passive_tracers(name=\"Interface1\", vertices=[x, interface1])\n", - "interface2 = Model.add_passive_tracers(name=\"Interface2\", vertices=[x, interface2])\n", - "interface3 = Model.add_passive_tracers(name=\"Interface3\", vertices=[x, interface3])" + "coords = np.ndarray((npoints, 2))\n", + "coords[:, 0] = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), npoints)\n", + "coords[:, 1] = GEO.nd(sand1.top)\n", + "\n", + "interface1 = Model.add_passive_tracers(name=\"Interface1\", vertices=coords)\n", + "\n", + "coords[:, 1] = GEO.nd(sand2.top)\n", + "interface2 = Model.add_passive_tracers(name=\"Interface2\", vertices=coords)\n", + "\n", + "coords[:, 1] = GEO.nd(sand2.bottom)\n", + "interface3 = Model.add_passive_tracers(name=\"Interface3\", vertices=coords)" ] }, { @@ -482,7 +487,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb b/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb index d6966b5e..b7257d9c 100644 --- a/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb +++ b/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb @@ -6,10 +6,7 @@ "source": [ "# Tutorial 3: The Numerical Sandbox, Extension Experiment (Static mesh version)\n", "\n", - "**Romain Beucher**\n", - "Version 0.1\n", - "\n", - "romain.beucher@unimelb.edu.au\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au\n", "\n", "The following notebook is an implementation of the Numerical Sandbox Extension Experiment similar to [Buiter et al., 2006](http://sp.lyellcollection.org/content/253/1/29). The test is commonly referred as one of the GEOMOD benchmarks and is used to test the large deformation viscous-plastic behaviour of geodynamic numerical codes.\n", "\n", diff --git a/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb b/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb index 65332fec..80980ad6 100644 --- a/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb +++ b/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb @@ -6,10 +6,7 @@ "source": [ "# The Numerical Sandbox: Compression Experiment\n", "\n", - "**Romain Beucher**\n", - "Version 0.1\n", - "\n", - "romain.beucher@unimelb.edu.au\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au\n", "\n", "The following notebook is an implementation of the Numerical Sandbox Compression Experiment similar to [Buiter et al., 2006](http://sp.lyellcollection.org/content/253/1/29). The test is commonly referred as one of the GEOMOD benchmarks and is used to test the large deformation viscous-plastic behaviour of geodynamic numerical codes.\n", "\n", diff --git a/tutorials/Tutorial_5_Convergence_Model.ipynb b/tutorials/Tutorial_5_Convergence_Model.ipynb index 04c355a1..de86e523 100644 --- a/tutorials/Tutorial_5_Convergence_Model.ipynb +++ b/tutorials/Tutorial_5_Convergence_Model.ipynb @@ -4,7 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Tutorial 5: Convergence model" + "# Tutorial 5: Convergence model\n", + "\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au" ] }, { diff --git a/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb b/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb index 46b11572..adba2ce1 100644 --- a/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb +++ b/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb @@ -4,7 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Tutorial 6: Simple Surface Processes" + "# Tutorial 6: Simple Surface Processes\n", + "\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au" ] }, { @@ -16,7 +18,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /opt/venv/lib/python3.7/site-packages/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -207,7 +209,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -236,7 +238,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 16, @@ -291,7 +293,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -315,7 +317,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -344,11 +346,22 @@ "cell_type": "code", "execution_count": 22, "metadata": {}, + "outputs": [], + "source": [ + "Model.solver.set_inner_method(\"mumps\")\n", + "Model.solver.set_penalty(1e6)\n", + "GEO.rcParams[\"initial.nonlinear.tolerance\"] = 1e-4" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -366,33 +379,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Step:1 Model Time: 0.0080945497721 megayear dt: 0.0080945497721 megayear (2018-07-02 04:54:21)\n", - "Step:2 Model Time: 0.016771998788 megayear dt: 0.00867744901589 megayear (2018-07-02 04:54:54)\n", - "Step:3 Model Time: 0.0254492759217 megayear dt: 0.00867727713368 megayear (2018-07-02 04:55:26)\n", - "Step:4 Model Time: 0.0341262228926 megayear dt: 0.00867694697088 megayear (2018-07-02 04:55:58)\n", - "Step:5 Model Time: 0.0428036689779 megayear dt: 0.00867744608533 megayear (2018-07-02 04:56:30)\n", - "Step:6 Model Time: 0.0514812590265 megayear dt: 0.00867759004866 megayear (2018-07-02 04:57:04)\n", - "Step:7 Model Time: 0.0601587532435 megayear dt: 0.00867749421694 megayear (2018-07-02 04:57:36)\n", - "Step:8 Model Time: 0.0688354916151 megayear dt: 0.00867673837164 megayear (2018-07-02 04:58:09)\n", - "Step:9 Model Time: 0.0775120953099 megayear dt: 0.00867660369475 megayear (2018-07-02 04:58:44)\n", - "Step:10 Model Time: 0.086188913081 megayear dt: 0.00867681777112 megayear (2018-07-02 04:59:16)\n", - "Step:11 Model Time: 0.0948655407152 megayear dt: 0.00867662763417 megayear (2018-07-02 04:59:49)\n", - "Step:12 Model Time: 0.103542401115 megayear dt: 0.00867686039954 megayear (2018-07-02 05:00:23)\n", - "Step:13 Model Time: 0.112219029843 megayear dt: 0.00867662872829 megayear (2018-07-02 05:00:58)\n", - "Step:14 Model Time: 0.120895292938 megayear dt: 0.0086762630949 megayear (2018-07-02 05:01:31)\n", - "Step:15 Model Time: 0.129571516325 megayear dt: 0.00867622338665 megayear (2018-07-02 05:02:06)\n" + "Running with UWGeodynamics version 2.9.6\n", + "Options: -Q22_pc_type gkgdiag -force_correction True -ksp_type bsscr -pc_type none -ksp_k2_type NULL -rescale_equations False -remove_constant_pressure_null_space False -change_backsolve False -change_A11rhspresolve False -restore_K False -A11_ksp_type preonly -A11_pc_type lu -A11_pc_factor_mat_solver_type mumps -scr_ksp_type fgmres -scr_ksp_rtol 1e-05 -A11_mg_active False\n", + "Step: 1 Model Time: 34713.0 year dt: 34713.0 year (2020-06-22 01:59:28)\n", + "Step: 2 Model Time: 69420.3 year dt: 34707.3 year (2020-06-22 01:59:38)\n" ] + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "Model.run_for(3.0 * u.megayear)" + "Model.run_for(nstep=2)" ] } ], diff --git a/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb b/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb index 0a55b49c..eb8ae8c5 100644 --- a/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb +++ b/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb @@ -4,7 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Tutorial 7: 3D Lithospheric Model" + "# Tutorial 7: 3D Lithospheric Model\n", + "\n", + "**Romain Beucher** romain.beucher (at) anu.edu.au" ] }, { @@ -16,7 +18,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /opt/venv/lib/python3.7/site-packages/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -110,34 +112,6 @@ { "data": { "text/html": [ - "\n", "\n", "\n", "\n", + "\n", + "\n" ], @@ -1073,20 +2352,30 @@ { "data": { "text/html": [ - "
\n", - "\n", + "\n", + "
\n", + "
\n", + "
\n", + "\n", "\n", "
\n", - " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", "
\n", "
\n", + "
\n", "
\n", - "
\n" + "
\n", + "" ], "text/plain": [ "" @@ -1094,25 +2383,14 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "_wi[0] = new WindowInteractor(0);" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "Fig = vis.Figure()\n", - "Fig.Surface(Model.mesh, Model.projMaterialField, cullface=False, opacity=0.5)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer.window()" + "if GEO.nProcs == 1:\n", + " Fig = vis.Figure()\n", + " Fig.Surface(Model.mesh, Model.projMaterialField, cullface=False, opacity=0.5)\n", + " viewer = Fig.viewer(resolution=(1200,600))\n", + " viewer.window()" ] }, { @@ -1136,9 +2414,9 @@ "source": [ "air.density = 1. * u.kilogram / u.metre**3\n", "stickyAir.density = 1. * u.kilogram / u.metre**3\n", - "uppercrust.density = GEO.LinearDensity(reference_density=2620. * u.kilogram / u.metre**3)\n", - "mantleLithosphere.density = GEO.LinearDensity(reference_density=3370. * u.kilogram / u.metre**3)\n", - "mantle.density = GEO.LinearDensity(reference_density=2620. * u.kilogram / u.metre**3)" + "uppercrust.density = 2620. * u.kilogram / u.metre**3\n", + "mantleLithosphere.density = 3370. * u.kilogram / u.metre**3\n", + "mantle.density = 2620. * u.kilogram / u.metre**3" ] }, { @@ -1168,29 +2446,9 @@ "source": [ "air.viscosity = 1e19 * u.pascal * u.second\n", "stickyAir.viscosity = 1e20 * u.pascal * u.second\n", - "uppercrust.viscosity = 30.0 * rh.Wet_Quartz_Dislocation_Gleason_and_Tullis_1995\n", - "mantleLithosphere.viscosity = rh.Dry_Olivine_Dislocation_Karato_and_Wu_1993\n", - "mantle.viscosity = 0.2 * rh.Dry_Olivine_Dislocation_Karato_and_Wu_1993" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "pl = GEO.PlasticityRegistry()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "uppercrust.plasticity = pl.Huismans_et_al_2011_Crust\n", - "mantleLithosphere.plasticity = pl.Huismans_et_al_2011_Crust\n", - "mantle.plasticity = pl.Huismans_et_al_2011_Crust" + "uppercrust.viscosity = 1e23 * u.pascal * u.second\n", + "mantleLithosphere.viscosity = 1e20 * u.pascal * u.second\n", + "mantle.viscosity = 1e19 * u.pascal * u.second" ] }, { @@ -1202,24 +2460,23 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "" ] }, - "execution_count": 17, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Model.set_temperatureBCs(top=293.15 * u.degK, \n", - " bottom=1603.15 * u.degK, \n", - " materials=[(mantle, 1603.15 * u.degK), (air, 293.15 * u.degK )])" + " bottom=1603.15 * u.degK)" ] }, { @@ -1231,16 +2488,16 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 18, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -1249,80 +2506,13 @@ "Model.set_velocityBCs(left=[-2.5 * u.centimeter / u.year, None, None],\n", " right=[2.5 * u.centimeter / u.year, None, None],\n", " front=[None, 0.0, None], back=[None, 0.0, None],\n", - " bottom=GEO.LecodeIsostasy(reference_mat=mantle))" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "def gaussian(xx, centre, width):\n", - " return ( np.exp( -(xx - centre)**2 / width ))\n", - "\n", - "maxDamage = 0.7\n", - "Model.plasticStrain.data[:] = maxDamage * np.random.rand(*Model.plasticStrain.data.shape[:])\n", - "Model.plasticStrain.data[:,0] *= gaussian(Model.swarm.particleCoordinates.data[:,0], (GEO.nd(Model.maxCoord[0] - Model.minCoord[0])) / 2.0, GEO.nd(5.0 * u.kilometer))\n", - "Model.plasticStrain.data[:,0] *= gaussian(Model.swarm.particleCoordinates.data[:,1], (GEO.nd(Model.maxCoord[1] - Model.minCoord[1])) / 2.0, GEO.nd(10.0 * u.kilometer))\n", - "Model.plasticStrain.data[:,0] *= gaussian(Model.swarm.particleCoordinates.data[:,2], GEO.nd(-35. * u.kilometer) , GEO.nd(5.0 * u.kilometer))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "_wi[1] = new WindowInteractor(1);" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "Fig = vis.Figure()\n", - "Fig.Points(Model.swarm, Model.plasticStrain, cullface=False, opacity=0.5, fn_size=3.)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer.window()" + " bottom=[None, None, 0.0],\n", + " order_wall_conditions=[\"bottom\", \"top\", \"front\", \"back\", \"left\", \"right\"])" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -1331,47 +2521,6909 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Fig = vis.Figure()\n", - "Fig.Surface(Model.mesh, Model.temperature, cullface=False, opacity=0.5, colours=\"coolwarm\")\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer.window()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Fig = vis.Figure()\n", - "Fig.Surface(Model.mesh.subMesh, Model.pressureField, cullface=False, opacity=0.5)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer.window()" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ - "Model.run_for(10. * u.years)" + "Model.solver.set_inner_method(\"mumps\")\n", + "Model.solver.set_penalty(1e6)\n", + "GEO.rcParams[\"initial.nonlinear.tolerance\"] = 1e-4" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "if GEO.nProcs == 1:\n", + " Fig = vis.Figure()\n", + " Fig.Surface(Model.mesh, Model.temperature, cullface=False, opacity=0.5, colours=\"coolwarm\")\n", + " viewer = Fig.viewer(resolution=(1200,600))\n", + " viewer.window()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "if GEO.nProcs == 1:\n", + " Fig = vis.Figure()\n", + " Fig.Surface(Model.mesh.subMesh, Model.pressureField, cullface=False, opacity=0.5)\n", + " viewer = Fig.viewer(resolution=(1200,600))\n", + " viewer.window()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running with UWGeodynamics version 2.9.6\n", + "Options: -Q22_pc_type gkgdiag -force_correction True -ksp_type bsscr -pc_type none -ksp_k2_type NULL -rescale_equations False -remove_constant_pressure_null_space False -change_backsolve False -change_A11rhspresolve False -restore_K False -A11_ksp_type preonly -A11_pc_type lu -A11_pc_factor_mat_solver_type mumps -scr_ksp_type fgmres -scr_ksp_rtol 1e-05 -A11_mg_active False\n", + "Step: 1 Model Time: 120699.1 year dt: 120699.1 year (2020-06-22 02:23:25)\n" + ] + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Model.run_for(nstep=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "Fig = vis.Figure()\n", - "Fig.VectorArrows(Model.mesh, Model.velocityField, cullface=False, opacity=0.5)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer.window()" + "if GEO.nProcs == 1:\n", + " Fig = vis.Figure()\n", + " Fig.VectorArrows(Model.mesh, Model.velocityField, cullface=False, opacity=0.5)\n", + " viewer = Fig.viewer(resolution=(1200,600))\n", + " viewer.window()" ] } ], diff --git a/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb b/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb index 2c236598..48a9dc04 100644 --- a/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb +++ b/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb @@ -6,7 +6,7 @@ "source": [ "# Tutorial 8: Subduction Model\n", " \n", - "Rebecca Farrington" + "Rebecca Farrington rebecca.farrington (at) unimelb.edu.au" ] }, { From 84a73ea2605bc82e2717c24b526a90dd8224e287 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 03:24:51 +0000 Subject: [PATCH 38/80] Change Readme to Markdown --- README.md | 343 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.rst | 359 ----------------------------------------------------- 2 files changed, 343 insertions(+), 359 deletions(-) create mode 100644 README.md delete mode 100644 README.rst diff --git a/README.md b/README.md new file mode 100644 index 00000000..135fc4ee --- /dev/null +++ b/README.md @@ -0,0 +1,343 @@ +[![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/source/img/logos.png)](https://www.earthbyte.org/the-basin-genesis-hub) + +# Underworld Geodynamics project + +[![image](https://joss.theoj.org/papers/10.21105/joss.01136/status.svg)](https://doi.org/10.21105/joss.01136) +[![DOI](https://zenodo.org/badge/114189389.svg)](https://zenodo.org/badge/latestdoi/114189389) +[![Codacy](https://api.codacy.com/project/badge/Grade/85b5f7736d03441db786549d6e357c9e)](https://www.codacy.com/app/romainbeucher/UWGeodynamics?utm_source=github.com&utm_medium=referral&utm_content=rbeucher/UWGeodynamics&utm_campaign=Badge_Grade) +[![Pip](https://img.shields.io/pypi/v/uwgeodynamics.svg)](https://pypi.python.org/pypi/uwgeodynamics) +[![Docs](https://readthedocs.org/projects/uwgeodynamics/badge)](http://uwgeodynamics.readthedocs.org/) +![tests](https://github.com/underworldcode/UWGeodynamics/workflows/tests/badge.svg) + +![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/tutorials/images/Tutorial1.gif) +![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/source/img/collision_wedge.gif) + +The UWGeodynamics module facilitates prototyping of geodynamics models +using Underworld. It can be seen as a set of high-level functions within +the Underworld ecosystem. It is a means to quickly get the user into +Underworld modelling and assumes very little knowledge in coding. The +module make some assumptions based on how the user defines the boundary +conditions and the properties of the materials (rocks, phases). Its +simplicity comes with a relatively more rigid workflow (compared to the +classic Underworld functions). However, the user can easily break the +high level objects and get back to core Underworld function at any step +of model design. + +The UWGeodynamics is inspired by the [Lithospheric Modelling Recipe +(LMR)](https://github.com/LukeMondy/lithospheric_modelling_recipe) +originally developed by Luke Mondy, Guillaume Duclaux and Patrice Rey +for Underworld 1. Some of the naming conventions have been reused to +facilitate the transition from LMR. The Rheological libraries is also +taken from LMR. + +As we think the low-level interface is more flexible, and in so allows +for more complex models, we strongly encourage users to explore and +break the High Level functions. + +We hope that the user will naturally move to the low-level +functionalities as he or her gets more confident, and by doing so will +access the wide range of possibilities offered by Underworld. + +![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/source/img/SandboxCompression.gif) + +## UWGeodynamics and Underworld + +*UWGeodynamics* uses the +[Underworld](https://github.com/underworldcode/underworld2) Application +Programming Interface (API). Both projects are supported by The +Underworld development team led by Louis Moresi and based in Melbourne, +Australia at the University of Melbourne and at Monash University. + +*Underworld* and *UWGeodynamics* both provide powerful tools to develop +numerical geodynamic models. But their approaches are different: +*UWGeodynamics* largely guides users into a way of doing things. The +Underworld API provides a series of tools and components (Mesh, Mesh +variables, system of equations, functions) and leaves the responsibility +to arrange those components to the user. The main advantage of the +Underworld API is its flexibility. The main inconvenient resides in a +somewhat steeper learning curve. *UWGeodynamics* components are designed +to be more natural to non-experimented numerical modellers or people +with little knowledge in programming. It is a way to quickly get started +and design numerical models. Developing complex models can also be +facilitated by the *UWGeodynamics* high-level interface as it requires +less time and less involvement with the details of the Underworld API. + +The two approaches are complementary and mixing the two approaches is +possible and highly encouraged. + +### Note on versioning + +Since version 1.0 The Underworld development team has decided to match +the *UWGeodynamics* version number with the latest supported version of +Underworld. UWGeodynamics v2.7 is then supporing Underworld up to +version 2.7. + +The third number is used for *UWGeodynamics* only (v2.7.1, v2.7.2 etc.) + +The development branch is based on the current *Underworld* development +branch. + +The Current release (**DOI** citable): + +[![DOI](https://zenodo.org/badge/114189389.svg)](https://zenodo.org/badge/latestdoi/114189389) + + +## Quick Start / Testing + +We provide a docker container via +[binder](https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/master). +This is a quick solution to get you started and run the examples and +tutorials without installing anything on your machine. That is a good +way to see if the software can actually be useful to you. The ressource +are however limited and you should not try to run model with high +resolution. 3D models can not be run in the binder. + +## Where to find documentation? + +The full documentation is available on +[ReadTheDocs](http://uwgeodynamics.readthedocs.org/) + +Additional documentation and function specific documentation can be find +in the python doctrings. You can acces them in the +[Jupyter](http://jupyter.org/) notebook by prepending or appending the +method, variable or function with `?`. + +## Installation + +### [Docker](https://www.docker.com) installation + +Docker containers provide and easy-way to set up and distribute +applications. They also provide a safe and consistent environment which +facilitate debugging and reproducibility of models. The image we provide +contains all the dependencies and configuration files required to run +Underworld models. Users can start developping model as soon as they +have downloaded the image, independently of the operating system running +on their machine. + +We strongly encourage users to run UWGeodynamics using the docker images +we provide on [Docker +Hub](https://hub.docker.com/r/underworldcode/uwgeodynamics) + +Different version of the [underworldcode/uwgeodynamics]{.title-ref} +image can be pulled using a tag: + +1. The *latest* tag points to the github master branch and uses the + latest *underworld* release. +2. The *dev* tag points to the github development and uses the + development branch of *underworld*. +3. release tags such as *v2.7.1* points to a specific version. + +**Command line** + +Once you have installed docker on your system you can *pull* the +*UWGeodynamics* official image as follow: + +``` {.bash} +docker pull underworldcode/uwgeodynamics +``` + +You can list all the images available on your system as follow: + +``` {.bash} +docker images +``` + +An image can be deleted as follow: + +``` {.bash} +docker rmi underworldcode/uwgeodynamics +``` + +You can then start a docker container. (An instance of an image). + +``` {.bash} +docker run -d \ + --name my_container \ + -p 8888:8888 \ + -v $HOME:/home/jovyan/workspace + underworldcode/uwgeodynamics +``` + +You can access the container via your browser at the following address: +. Your directory [\$HOME]{.title-ref} should be +available at [/home/jovyan/workspace]{.title-ref}. + +It is also possible to ssh into the container as follow: + +``` {.bash} +docker exec -it my_container /bin/bash +``` + +You can list the containers currently existing on your machine by +running: + +``` {.bash} +docker ps -a +``` + +The \"a\" means \"all container\". The `docker ps` command only list +running containers. + +Docker containers can be stop (so that they do not use CPU or RAM +ressource): + +``` {.bash} +docker stop my_container +``` + +They can also be deleted: + +``` {.bash} +docker rm my_container +``` + +**It\'s a good idea to keep track of how many containers have been created +as they can rapidly take a lot of space on your machine.** + +### [Kitematic](https://kitematic.com/) + +[Kitematic](https://kitematic.com/) is a program that provides a +graphical user interface to the *docker* daemon and to Docker Hub. The +software is available for Windows, MacOsx and Linux. Be aware that on +linux the installation may differ depending on the distribution you are +running. + +1. Download and Install [Kitematic](https://kitematic.com/) +2. Open Kitematic and search for the **uwgeodynamics** image. +3. Create a container by clicking on the create button. + +You should now have a container appearing on the left side of your +kitematic window. The first thing to do now is to create a link between +a local directory (A directory on your physical hard drive) and a volume +directory inside the docker container. A volume is a special directory +that can be accessed from outside the container. It is the location you +will use to save your results. + +### Local Installation + +This is not recommended and involves installing *Underworld* and all its +dependencies. Docker is highly recommended!!! + +#### Requirements + +- Python \>= 3.5 +- A Working version of Underworld2 \>=2.9.0 (Please refer to the + Underworld documentation) +- pint \>= 0.8 + +#### Install + +##### from Pip + +The UWGeodynamics module can be installed directly from the Python +Package Index: + +``` {.bash} +pip install UWGeodynamics +``` + +##### from sources + +The module source files are available through +[github](https://github.com/underworldcode/UWGeodynamics.git) + +``` {.bash} +git clone https://github.com/underworldcode/UWGeodynamics.git +``` + +It can then be installed globally on your system using + +``` {.bash} +pip install UWGeodynamics/ +``` + +## Seeking Support? + +Error messages are useful to understand the source of a problem. + +If you cannot solve the problem by yourself you can ask for help by +creating an issue on GitHub. If the problem if specific to your model +you may be ask to continue the conversation through email. + +*UWGeodynamics* is an open source free software and we cannot guarantee +that it is free of bugs. Feel free to signal any strange behaviour by +raising an issue (see below section on how to contribute.) + +## Contributing + +If you want to contribute to the UWGeodynamics projects and make it +better, your help is very welcome. + +So how can you contribute? + +- Found a bug? Submit an issue using the issue tracker here on GitHub +- Have some suggestions? You can create an issue. Just add \[Feature + Request\] in the title. + +If you have developed some code and you think that it should be included +in UWGeodynamics, you can create a Pull Request and We will be happy to +review it. + +### How to create a Pull Request (PR) + +1. Create a personal fork of the project on Github. + + You will need a Github Account to do that. Just click on the Fork + button at the top right corner of this repository. + +2. Clone the fork on your local machine. Your remote repo on Github is + called origin. + + `git clone https://github.com/your-github-name/UWGeodynamics` + + replacing \"your-github-name\" with your actual github name\... + +3. Add the original repository as a remote called upstream. + + `git remote add upstream https://github.com/underworldcode/UWGeodynamics` + +4. If you created your fork a while ago be sure to pull upstream + changes into your local repository. + + `git pull upstream` + +5. Create a new branch to work on! Branch from development! + + `git checkout upstream/development` `git checkout -b newFeature` + +6. Implement/fix your feature, comment your code. + +7. Follow the code style of the project, including indentation. + +8. Include some tests or usage cases + +9. Add or change the documentation as needed. The UWGeodynamics + documentation is located in the [docs]{.title-ref} directory. + +10. Push your branch to your fork on Github, the remote origin. + `git push origin newFeature` + +11. From your fork open a pull request in the correct branch. Target the + project\'s [development]{.title-ref}. + +Always write your commit messages in the present tense. Your commit +message should describe what the commit, when applied, does to the code +-- not what you did to the code. + +There is no small contribution! + +## Community driven + +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 3 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 +\<\>. diff --git a/README.rst b/README.rst deleted file mode 100644 index 3b8b26e0..00000000 --- a/README.rst +++ /dev/null @@ -1,359 +0,0 @@ - -.. image:: https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/source/img/logos.png - :target: https://www.earthbyte.org/the-basin-genesis-hub - -Underworld Geodynamics project -============================== - -.. image:: http://joss.theoj.org/papers/10.21105/joss.01136/status.svg - :target: https://doi.org/10.21105/joss.01136 - -.. image:: https://zenodo.org/badge/114189389.svg - :target: https://zenodo.org/badge/latestdoi/114189389 - :alt: DOI - -.. image:: https://api.codacy.com/project/badge/Grade/85b5f7736d03441db786549d6e357c9e - :target: https://www.codacy.com/app/romainbeucher/UWGeodynamics?utm_source=github.com&utm_medium=referral&utm_content=rbeucher/UWGeodynamics&utm_campaign=Badge_Grade - :alt: Codacy - -.. image:: https://img.shields.io/pypi/v/uwgeodynamics.svg - :target: https://pypi.python.org/pypi/uwgeodynamics - :alt: Pip - -.. image:: https://readthedocs.org/projects/uwgeodynamics/badge - :target: http://uwgeodynamics.readthedocs.org/ - :alt: Docs - -.. image:: https://travis-ci.org/underworldcode/UWGeodynamics.svg?branch=development - :target: https://travis-ci.org/underworldcode/UWGeodynamics - -.. image:: https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/tutorials/images/Tutorial1.gif - -.. image:: https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/source/img/collision_wedge.gif - -The UWGeodynamics module facilitates prototyping of geodynamics models using Underworld. -It can be seen as a set of high-level functions within the Underworld ecosystem. -It is a means to quickly get the user into Underworld modelling and assumes very -little knowledge in coding. The module make some assumptions based on how the user -defines the boundary conditions and the properties of the materials (rocks, phases). -Its simplicity comes with a relatively more rigid workflow (compared to the classic Underworld functions). -However, the user can easily break the high level objects and get back to core -Underworld function at any step of model design. - -The UWGeodynamics is inspired by the [Lithospheric Modelling Recipe (LMR)](https://github.com/LukeMondy/lithospheric_modelling_recipe) originally developed by -Luke Mondy, Guillaume Duclaux and Patrice Rey for Underworld 1. -Some of the naming conventions have been reused to facilitate the transition from LMR. -The Rheological libraries is also taken from LMR. - -As we think the low-level interface is more flexible, and in so allows for more complex models, -we strongly encourage users to explore and break the High Level functions. - -We hope that the user will naturally move to the low-level functionalities as he -or her gets more confident, and by doing so will access the wide range of -possibilities offered by Underworld. - -.. image:: https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/source/img/SandboxCompression.gif - -UWGeodynamics and Underworld ----------------------------- - -*UWGeodynamics* uses the Underworld_ Application Programming Interface (API). -Both projects are supported by The Underworld development team led by Louis Moresi and based in Melbourne, Australia -at the University of Melbourne and at Monash University. - -*Underworld* and *UWGeodynamics* both provide powerful tools to develop numerical geodynamic models. -But their approaches are different: *UWGeodynamics* largely guides users into a way of doing things. -The Underworld API provides a series of tools and components (Mesh, Mesh variables, system of equations, functions) -and leaves the responsibility to arrange those components to the user. The main advantage of the Underworld API is its flexibility. -The main inconvenient resides in a somewhat steeper learning curve. *UWGeodynamics* components are -designed to be more natural to non-experimented numerical modellers or people with little knowledge in programming. -It is a way to quickly get started and design numerical models. Developing complex models can also be facilitated -by the *UWGeodynamics* high-level interface as it requires less time and less involvement -with the details of the Underworld API. - -The two approaches are complementary and mixing the two approaches is possible and highly encouraged. - -Note on versioning ------------------- - -Since version 1.0 The Underworld development team has decided to match the *UWGeodynamics* version number with -the latest supported version of Underworld. -UWGeodynamics v2.7 is then supporing Underworld up to version 2.7. - -The third number is used for *UWGeodynamics* only (v2.7.1, v2.7.2 etc.) - -The development branch is based on the current *Underworld* development branch. - -The Current release (**DOI** citable): - -`DOI `_ - -Quick Start / Testing ----------------------- - -We provide a docker container via binder_. -This is a quick solution to get you started and run the examples and tutorials -without installing anything on your machine. That is a good way to see if the -software can actually be useful to you. -The ressource are however limited and you should not try to run model with high resolution. -3D models can not be run in the binder. - -Where to find documentation? ----------------------------- - -The full documentation is available on `ReadTheDocs `_ - -Additional documentation and function specific documentation can be find in the python doctrings. -You can acces them in the Jupyter_ notebook by prepending or appending the method, variable or function with ``?``. - -Installation -------------- - -Docker_ installation -~~~~~~~~~~~~~~~~~~~~ - -Docker containers provide and easy-way to set up and distribute -applications. They also provide a safe and consistent environment which -facilitate debugging and reproducibility of models. The image we provide -contains all the dependencies and configuration files required to run -Underworld models. Users can start developping model as soon as they -have downloaded the image, independently of the operating system running -on their machine. - -We strongly encourage users to run UWGeodynamics using the docker images -we provide on `Docker Hub`_ - -Different version of the `underworldcode/uwgeodynamics` image can be -pulled using a tag: - -1. The *latest* tag points to the github master branch and uses the latest - *underworld* release. -2. The *dev* tag points to the github development and uses the development - branch of *underworld*. -3. release tags such as *v2.7.1* points to a specific version. - -**Command line** - -Once you have installed docker on your system you can *pull* the -*UWGeodynamics* official image as follow: - -.. code:: bash - - docker pull underworldcode/uwgeodynamics - -You can list all the images available on your system as follow: - -.. code:: bash - - docker images - -An image can be deleted as follow: - -.. code:: bash - - docker rmi underworldcode/uwgeodynamics - -You can then start a docker container. (An instance of -an image). - -.. code:: bash - - docker run -d \ - --name my_container \ - -p 8888:8888 \ - -v $HOME:/home/jovyan/workspace - underworldcode/uwgeodynamics - -You can access the container via your browser at the following -address: http://localhost:8888. Your directory `$HOME` should be available at -`/home/jovyan/workspace`. - -It is also possible to ssh into the container as follow: - -.. code:: bash - - docker exec -it my_container /bin/bash - -You can list the containers currently existing on your machine by running: - -.. code:: bash - - docker ps -a - -The "a" means "all container". The :code:`docker ps` command only list -running containers. - -Docker containers can be stop (so that they do not use CPU or RAM ressource): - -.. code:: bash - - docker stop my_container - -They can also be deleted: - -.. code:: bash - - docker rm my_container - -.. warning:: - - It's a good idea to keep track of how many containers have been created as - they can rapidly take a lot of space on your machine. - -Kitematic_ -~~~~~~~~~~ - -Kitematic_ is a program that provides a graphical user interface to -the *docker* daemon and to Docker Hub. -The software is available for Windows, MacOsx and Linux. Be aware that on -linux the installation may differ depending on the distribution you -are running. - -1. Download and Install Kitematic_ -2. Open Kitematic and search for the **uwgeodynamics** image. -3. Create a container by clicking on the create button. - -You should now have a container appearing on the left side of your -kitematic window. The first thing to do now is to create a link between -a local directory (A directory on your physical hard drive) and a volume -directory inside the docker container. A volume is a special directory -that can be accessed from outside the container. It is the location you -will use to save your results. - -Local Installation -~~~~~~~~~~~~~~~~~~~~ - -This is not recommended and involves installing *Underworld* and all -its dependencies. Docker is highly recommended!!! - -**Requirements** - -- Python >= 2.7 -- A Working version of Underworld2 >=2.6.0 (Please refer to the - Underworld documentation) -- pint >= 0.8 - -.. note:: - The bleeding edge version of *Underworld* (development branch) - is now python 3 compatible only. - *UWGeodynamics* is python 3 ready and can thus be used with it. - -**Install** - -**from Pip** - -The UWGeodynamics module can be installed directly from the Python -Package Index: - -.. code:: bash - - pip install UWGeodynamics - -**from sources** - -The module source files are available through github_ - -.. code:: bash - - git clone https://github.com/underworldcode/UWGeodynamics.git - -It can then be installed globally on your system using - -.. code:: bash - - pip install UWGeodynamics/ - - -Seeking Support? ----------------- - -Error messages are useful to understand the source of a problem. - -If you cannot solve the problem by yourself you can ask for help by creating an -issue on GitHub. If the problem if specific to your model you may be ask to continue the conversation -through email. - -*UWGeodynamics* is an open source free software and we cannot guarantee that it -is free of bugs. Feel free to signal any strange behaviour by raising an issue (see below section -on how to contribute.) - - -Contributing ------------- - -If you want to contribute to the UWGeodynamics projects and make it better, your help is very welcome. - -So how can you contribute? - -- Found a bug? Submit an issue using the issue tracker here on GitHub -- Have some suggestions? You can create an issue. Just add [Feature Request] in the title. - -If you have developed some code and you think that it should be included in UWGeodynamics, you -can create a Pull Request and We will be happy to review it. - -How to create a Pull Request (PR) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -#. Create a personal fork of the project on Github. - - You will need a Github Account to do that. Just click on - the Fork button at the top right corner of this repository. - -#. Clone the fork on your local machine. Your remote repo on Github is called origin. - - :code:`git clone https://github.com/your-github-name/UWGeodynamics` - - replacing "your-github-name" with your actual github name... - -#. Add the original repository as a remote called upstream. - - :code:`git remote add upstream https://github.com/underworldcode/UWGeodynamics` - -#. If you created your fork a while ago be sure to pull upstream changes into your local repository. - - :code:`git pull upstream` - -#. Create a new branch to work on! Branch from development! - - :code:`git checkout upstream/development` - :code:`git checkout -b newFeature` - -#. Implement/fix your feature, comment your code. - -#. Follow the code style of the project, including indentation. - -#. Include some tests or usage cases - -#. Add or change the documentation as needed. - The UWGeodynamics documentation is located in the `docs` directory. - -#. Push your branch to your fork on Github, the remote origin. - :code:`git push origin newFeature` - -#. From your fork open a pull request in the correct branch. Target the project's `development`. - -Always write your commit messages in the present tense. -Your commit message should describe what the commit, when applied, does to the code – not what you did to the code. - - -There is no small contribution! - - -Community driven ----------------- - -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 3 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 . - - -.. _binder: https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/master -.. _Underworld: https://github.com/underworldcode/underworld2 -.. _Jupyter: http://jupyter.org/ -.. _Docker: https://www.docker.com -.. _Docker Hub: https://hub.docker.com/r/underworldcode/uwgeodynamics -.. _Kitematic: https://kitematic.com/ -.. _github: https://github.com/underworldcode/UWGeodynamics.git -.. _Pint: https://pint.readthedocs.io/en/latest From 4e91cd4598b576d204b7aa4852f002cf69abf914 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 16:09:18 +1000 Subject: [PATCH 39/80] Update setup.py --- setup.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index 9352b63e..03755bcc 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,3 @@ -# Always prefer setuptools over distutils from setuptools import setup, find_packages # To use a consistent encoding from codecs import open @@ -7,15 +6,15 @@ from os import path MAJOR = 2 -MINOR = 9 -MICRO = 6 -ISRELEASED = True +MINOR = 10 +MICRO = 0 +ISRELEASED = False VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO) here = path.abspath(path.dirname(__file__)) # Get the long description from the README file -with open(path.join(here, 'README.rst'), encoding='utf-8') as f: +with open(path.join(here, 'README.md'), encoding='utf-8') as f: long_description = f.read() @@ -85,7 +84,6 @@ def get_version_info(): return FULLVERSION, GIT_REVISION - def write_version_py(filename='UWGeodynamics/version.py'): cnt = """ # THIS FILE IS GENERATED FROM UWGeodynamics SETUP.PY @@ -164,7 +162,7 @@ def write_version_py(filename='UWGeodynamics/version.py'): # This should be a valid email address corresponding to the author listed # above. - author_email='romain.beucher@unimelb.edu.au', # Optional + author_email='romain.beucher@anu.edu.au', # Optional # Classifiers help users find your project by categorizing it. # @@ -175,7 +173,7 @@ def write_version_py(filename='UWGeodynamics/version.py'): # 3 - Alpha # 4 - Beta # 5 - Production/Stable - 'Development Status :: 4 - Beta', + 'Development Status :: 5 - Stable', # Indicate who your project is intended for 'Intended Audience :: Developers', @@ -193,6 +191,7 @@ def write_version_py(filename='UWGeodynamics/version.py'): 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', ], # This field adds keywords for your project which will appear on the From e2ab3142f8948e01e9217779d63498c0d9bad2b0 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 16:26:17 +1000 Subject: [PATCH 40/80] Fix readthedocs --- .readthedocs.yml | 20 ++++++++++++++++++++ docs/requirements.txt | 0 docs/source/UserGuide.rst | 2 +- tox.ini | 34 ---------------------------------- 4 files changed, 21 insertions(+), 35 deletions(-) create mode 100644 .readthedocs.yml create mode 100644 docs/requirements.txt delete mode 100644 tox.ini diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 00000000..55036d42 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,20 @@ +# .readthedocs.yml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: docs/source/conf.py + +# Optionally build your docs in additional formats such as PDF +formats: + - pdf + +# Optionally set the version of Python and requirements required to build your docs +python: + version: 3.7 + install: + - requirements: docs/requirements.txt \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..e69de29b diff --git a/docs/source/UserGuide.rst b/docs/source/UserGuide.rst index 1495f95f..4ad5e151 100644 --- a/docs/source/UserGuide.rst +++ b/docs/source/UserGuide.rst @@ -1295,7 +1295,7 @@ across the border/boundary. ... Lithostatic Pressure Condition (stress) -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The lithostatic pressure field can be passed as a boundary condition (stress) diff --git a/tox.ini b/tox.ini deleted file mode 100644 index b3f7fa58..00000000 --- a/tox.ini +++ /dev/null @@ -1,34 +0,0 @@ -# this file is *not* meant to cover or endorse the use of tox or pytest or -# testing in general, -# -# It's meant to show the use of: -# -# - check-manifest -# confirm items checked into vcs are in your sdist -# - python setup.py check (using the readme_renderer extension) -# confirms your long_description will render correctly on pypi -# -# and also to help confirm pull requests to this project. - -[tox] -envlist = py{27,34,35,36} - -[testenv] -basepython = - py27: python2.7 - py34: python3.4 - py35: python3.5 - py36: python3.6 -deps = - check-manifest - readme_renderer - flake8 - pytest -commands = - check-manifest --ignore tox.ini,tests* - python setup.py check -m -r -s - flake8 . - py.test tests -[flake8] -exclude = .tox,*.egg,build,data -select = E,W,F From 8aca33161d6e3e93c4120cfa2376790b408a7089 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 16:50:53 +1000 Subject: [PATCH 41/80] UPdate Readthedocs template --- docs/source/_static/.gitignore | 0 docs/source/_static/alabaster.css_t | 769 ------------------ docs/source/_static/custom.css | 1 - docs/source/_templates/sidebarintro.html | 29 - docs/source/_templates/sidebarlogo.html | 29 - docs/source/_themes/.gitignore | 3 - docs/source/_themes/LICENSE | 37 - docs/source/_themes/README | 31 - docs/source/_themes/flask/layout.html | 30 - docs/source/_themes/flask/relations.html | 20 - docs/source/_themes/flask/static/flasky.css_t | 395 --------- .../_themes/flask/static/small_flask.css | 70 -- docs/source/_themes/flask/theme.conf | 10 - docs/source/_themes/flask_theme_support.py | 86 -- docs/source/conf.py | 10 +- 15 files changed, 6 insertions(+), 1514 deletions(-) delete mode 100644 docs/source/_static/.gitignore delete mode 100644 docs/source/_static/alabaster.css_t delete mode 100644 docs/source/_static/custom.css delete mode 100644 docs/source/_templates/sidebarintro.html delete mode 100644 docs/source/_templates/sidebarlogo.html delete mode 100644 docs/source/_themes/.gitignore delete mode 100644 docs/source/_themes/LICENSE delete mode 100644 docs/source/_themes/README delete mode 100644 docs/source/_themes/flask/layout.html delete mode 100644 docs/source/_themes/flask/relations.html delete mode 100644 docs/source/_themes/flask/static/flasky.css_t delete mode 100644 docs/source/_themes/flask/static/small_flask.css delete mode 100644 docs/source/_themes/flask/theme.conf delete mode 100644 docs/source/_themes/flask_theme_support.py diff --git a/docs/source/_static/.gitignore b/docs/source/_static/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/source/_static/alabaster.css_t b/docs/source/_static/alabaster.css_t deleted file mode 100644 index b6f790bd..00000000 --- a/docs/source/_static/alabaster.css_t +++ /dev/null @@ -1,769 +0,0 @@ -{%- set theme_body_bg = theme_body_bg or theme_base_bg %} -{%- set theme_code_highlight_bg = theme_code_highlight_bg or theme_body_bg %} -{%- set theme_sidebar_header = theme_sidebar_header or theme_gray_1 %} -{%- set theme_sidebar_link = theme_sidebar_link or theme_gray_1 %} -{%- set theme_anchor_hover_fg = theme_anchor_hover_fg or theme_gray_1 %} - -{%- set theme_footnote_border = theme_footnote_border or theme_gray_2 %} -{%- set theme_pre_bg = theme_pre_bg or theme_gray_2 %} - -{%- set theme_head_font_family = theme_head_font_family or theme_font_family %} - -{#- set up admonition styling #} -{#- - basic level #} -{%- set theme_admonition_xref_bg = theme_admonition_xref_bg or theme_xref_bg %} -{%- set theme_admonition_bg = theme_admonition_bg or theme_gray_2 %} -{%- set theme_note_bg = theme_note_bg or theme_gray_2 %} -{%- set theme_seealso_bg = theme_seealso_bg or theme_gray_2 %} - -{#- - critical level #} -{%- set theme_danger_bg = theme_danger_bg or theme_pink_1 %} -{%- set theme_danger_border = theme_danger_border or theme_pink_2 %} -{%- set theme_danger_shadow = theme_danger_shadow or theme_pink_3 %} - -{%- set theme_error_bg = theme_error_bg or theme_pink_1 %} -{%- set theme_error_border = theme_error_border or theme_pink_2 %} -{%- set theme_error_shadow = theme_error_shadow or theme_pink_3 %} - -{#- - warning level #} -{%- set theme_caution_bg = theme_caution_bg or theme_pink_1 %} -{%- set theme_caution_border = theme_caution_border or theme_pink_2 %} - -{%- set theme_attention_bg = theme_attention_bg or theme_pink_1 %} -{%- set theme_attention_border = theme_attention_border or theme_pink_2 %} - -{%- set theme_warn_bg = theme_warn_bg or theme_pink_1 %} -{%- set theme_warn_border = theme_warn_border or theme_pink_2 %} - -{#- - normal level #} -{%- set theme_important_bg = theme_important_bg or theme_gray_2 %} -{%- set theme_tip_bg = theme_tip_bg or theme_gray_2 %} -{%- set theme_hint_bg = theme_hint_bg or theme_gray_2 %} - -{#- /set up admonition styling #} - -{%- set theme_shadow = theme_shadow or theme_gray_2 %} - - -{%- set theme_topic_bg = theme_topic_bg or theme_gray_2 %} - -{%- set theme_narrow_sidebar_link = theme_narrow_sidebar_link or theme_gray_3 %} -{%- set theme_sidebar_hr = theme_sidebar_hr or theme_gray_3 %} - -{%- set theme_relbar_border = theme_relbar_border or theme_gray_2 -%} - - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: {{ theme_font_family }}; - font-size: {{ theme_font_size }}; - background-color: {{ theme_base_bg }}; - color: {{ theme_base_text }}; - margin: 0; - padding: 0; -} - - -div.document { - width: {{ theme_page_width }}; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 {{ theme_sidebar_width }}; -} - -div.sphinxsidebar { - width: {{ theme_sidebar_width }}; - font-size: 14px; - line-height: 1.5; -} - -hr { - border: 1px solid {{ theme_hr_border }}; -} - -div.body { - background-color: {{ theme_body_bg }}; - color: {{ theme_body_text }}; - padding: 0 30px 0 30px; -} - -div.body > .section { - text-align: {{ theme_body_text_align }}; -} - -div.footer { - width: {{ theme_page_width }}; - margin: 20px auto 30px auto; - font-size: 14px; - color: {{ theme_footer_text }}; - text-align: right; -} - -div.footer a { - color: {{ theme_footer_text }}; -} - -p.caption { - font-family: {{ theme_caption_font_family }}; - font-size: {{ theme_caption_font_size }}; -} - -{% if theme_show_related|lower == 'false' %} -div.relations { - display: none; -} -{% endif %} - -div.sphinxsidebar a { - color: {{ theme_sidebar_link }}; - text-decoration: none; - border-bottom: 1px dotted {{ theme_sidebar_link_underscore }}; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid {{ theme_sidebar_link_underscore }}; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0; - margin: -10px 0 0 0px; - text-align: center; -} - -div.sphinxsidebarwrapper h1.logo { - margin-top: -10px; - text-align: center; - margin-bottom: 5px; - text-align: {{ theme_logo_text_align }}; -} - -div.sphinxsidebarwrapper h1.logo-name { - margin-top: 0px; -} - -div.sphinxsidebarwrapper p.blurb { - margin-top: 0; - font-style: {{ theme_description_font_style }}; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: {{ theme_head_font_family }}; - color: {{ theme_sidebar_header }}; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: {{ theme_sidebar_link }}; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: {{ theme_sidebar_text }}; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: {{ theme_sidebar_list }}; -} - -div.sphinxsidebar ul li.toctree-l1 > a { - font-size: 120%; -} - -div.sphinxsidebar ul li.toctree-l2 > a { - font-size: 110%; -} - -div.sphinxsidebar input { - border: 1px solid {{ theme_sidebar_search_button }}; - font-family: {{ theme_font_family }}; - font-size: 1em; -} - -div.sphinxsidebar hr { - border: none; - height: 1px; - color: {{ theme_sidebar_hr }}; - background: {{ theme_sidebar_hr }}; - - text-align: left; - margin-left: 0; - width: 50%; -} - -div.sphinxsidebar .badge { - border-bottom: none; -} - -div.sphinxsidebar .badge:hover { - border-bottom: none; -} - -/* To address an issue with donation coming after search */ -div.sphinxsidebar h3.donation { - margin-top: 10px; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: {{ theme_link }}; - text-decoration: underline; -} - -a:hover { - color: {{ theme_link_hover }}; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: {{ theme_head_font_family }}; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: {{ theme_anchor }}; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: {{ theme_anchor_hover_fg }}; - background: {{ theme_anchor_hover_bg }}; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - margin: 20px 0px; - padding: 10px 30px; - background-color: {{ theme_admonition_bg }}; - border: 1px solid {{ theme_admonition_border }}; -} - -div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { - background-color: {{ theme_admonition_xref_bg }}; - border-bottom: 1px solid {{ theme_admonition_xref_border }}; -} - -div.admonition p.admonition-title { - font-family: {{ theme_head_font_family }}; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: {{ theme_code_highlight_bg }}; -} - -dt:target, .highlight { - background: {{ theme_highlight_bg }}; -} - -div.warning { - background-color: {{ theme_warn_bg }}; - border: 1px solid {{ theme_warn_border }}; -} - -div.danger { - background-color: {{ theme_danger_bg }}; - border: 1px solid {{ theme_danger_border }}; - -moz-box-shadow: 2px 2px 4px {{ theme_danger_shadow }}; - -webkit-box-shadow: 2px 2px 4px {{ theme_danger_shadow }}; - box-shadow: 2px 2px 4px {{ theme_danger_shadow }}; -} - -div.error { - background-color: {{ theme_error_bg }}; - border: 1px solid {{ theme_error_border }}; - -moz-box-shadow: 2px 2px 4px {{ theme_error_shadow }}; - -webkit-box-shadow: 2px 2px 4px {{ theme_error_shadow }}; - box-shadow: 2px 2px 4px {{ theme_error_shadow }}; -} - -div.caution { - background-color: {{ theme_caution_bg }}; - border: 1px solid {{ theme_caution_border }}; -} - -div.attention { - background-color: {{ theme_attention_bg }}; - border: 1px solid {{ theme_attention_border }}; -} - -div.important { - background-color: {{ theme_important_bg }}; - border: 1px solid {{ theme_important_border }}; -} - -div.note { - background-color: {{ theme_note_bg }}; - border: 1px solid {{ theme_note_border }}; -} - -div.tip { - background-color: {{ theme_tip_bg }}; - border: 1px solid {{ theme_tip_border }}; -} - -div.hint { - background-color: {{ theme_hint_bg }}; - border: 1px solid {{ theme_hint_border }}; -} - -div.seealso { - background-color: {{ theme_seealso_bg }}; - border: 1px solid {{ theme_seealso_border }}; -} - -div.topic { - background-color: {{ theme_topic_bg }}; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt, code { - font-family: {{theme_code_font_family}}; - font-size: {{ theme_code_font_size }}; -} - -.hll { - background-color: {{theme_code_highlight}}; - margin: 0 -12px; - padding: 0 12px; - display: block; -} - -img.screenshot { -} - -tt.descname, tt.descclassname, code.descname, code.descclassname { - font-size: 0.95em; -} - -tt.descname, code.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px {{ theme_shadow }}; - -webkit-box-shadow: 2px 2px 4px {{ theme_shadow }}; - box-shadow: 2px 2px 4px {{ theme_shadow }}; -} - -table.docutils { - border: 1px solid {{ theme_table_border }}; - -moz-box-shadow: 2px 2px 4px {{ theme_shadow }}; - -webkit-box-shadow: 2px 2px 4px {{ theme_shadow }}; - box-shadow: 2px 2px 4px {{ theme_shadow }}; -} - -table.docutils td, table.docutils th { - border: 1px solid {{ theme_table_border }}; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid {{ theme_footnote_border }}; - background: {{ theme_footnote_bg }}; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.field-list p { - margin-bottom: 0.8em; -} - -/* Cloned from - * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 - */ -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -table.footnote td.label { - width: .1px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - /* Matches the 30px from the narrow-screen "li > ul" selector below */ - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: {{ theme_pre_bg }}; - padding: 7px 30px; - margin: 15px 0px; - line-height: 1.3em; -} - -div.viewcode-block:target { - background: {{ theme_viewcode_target_bg }}; -} - -dl pre, blockquote pre, li pre { - margin-left: 0; - padding-left: 30px; -} - -tt, code { - background-color: {{ theme_code_bg }}; - color: {{ theme_code_text }}; - /* padding: 1px 2px; */ -} - -tt.xref, code.xref, a tt { - background-color: {{ theme_xref_bg }}; - border-bottom: 1px solid {{ theme_xref_border }}; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted {{ theme_link }}; -} - -/* Don't put an underline on images */ -a.image-reference, a.image-reference:hover { - border-bottom: none; -} - -a.reference:hover { - border-bottom: 1px solid {{ theme_link_hover }}; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted {{ theme_link }}; -} - -a.footnote-reference:hover { - border-bottom: 1px solid {{ theme_link_hover }}; -} - -a:hover tt, a:hover code { - background: {{ theme_code_hover }}; -} - - -@media screen and (max-width: 870px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - li > ul { - /* Matches the 30px from the "ul, ol" selector above */ - margin-left: 30px; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - - - -} - - - -@media screen and (max-width: 875px) { - - body { - margin: 0; - padding: 20px 30px; - } - - div.documentwrapper { - float: none; - background: {{ theme_base_bg }}; - } - - div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - {%- if theme_fixed_sidebar|lower == 'true' %} - margin: -20px -30px 20px -30px; - {%- else %} - margin: 50px -30px -20px -30px; - {%- endif %} - padding: 10px 20px; - background: {{ theme_narrow_sidebar_bg }}; - color: {{ theme_narrow_sidebar_fg }}; - } - - div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, - div.sphinxsidebar h3 a { - color: {{ theme_base_bg }}; - } - - div.sphinxsidebar a { - color: {{ theme_narrow_sidebar_link }}; - } - - div.sphinxsidebar p.logo { - display: none; - } - - div.document { - width: 100%; - margin: 0; - } - - div.footer { - display: none; - } - - div.bodywrapper { - margin: 0; - } - - div.body { - min-height: 0; - padding: 0; - } - - .rtd_doc_footer { - display: none; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .footer { - width: auto; - } - - .github { - display: none; - } -} - -{%- if theme_fixed_sidebar|lower == 'true' %} -@media screen and (min-width: 876px) { - div.sphinxsidebar { - position: fixed; - margin-left: 0; - } -} -{%- endif %} - - -/* misc. */ - -.revsys-inline { - display: none!important; -} - -/* Make nested-list/multi-paragraph items look better in Releases changelog - * pages. Without this, docutils' magical list fuckery causes inconsistent - * formatting between different release sub-lists. - */ -div#changelog > div.section > ul > li > p:only-child { - margin-bottom: 0; -} - -/* Hide fugly table cell borders in ..bibliography:: directive output */ -table.docutils.citation, table.docutils.citation td, table.docutils.citation th { - border: none; - /* Below needed in some edge cases; if not applied, bottom shadows appear */ - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - - -/* relbar */ - -.related { - line-height: 30px; - width: 100%; - font-size: 0.9rem; -} - -.related.top { - border-bottom: 1px solid {{ theme_relbar_border }}; - margin-bottom: 20px; -} - -.related.bottom { - border-top: 1px solid {{ theme_relbar_border }}; -} - -.related ul { - padding: 0; - margin: 0; - list-style: none; -} - -.related li { - display: inline; -} - -nav#rellinks { - float: right; -} - -nav#rellinks li+li:before { - content: "|"; -} - -nav#breadcrumbs li+li:before { - content: "\00BB"; -} - -/* Hide certain items when printing */ -@media print { - div.related { - display: none; - } -} diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css deleted file mode 100644 index 2a924f1d..00000000 --- a/docs/source/_static/custom.css +++ /dev/null @@ -1 +0,0 @@ -/* This file intentionally left blank. */ diff --git a/docs/source/_templates/sidebarintro.html b/docs/source/_templates/sidebarintro.html deleted file mode 100644 index bc814c15..00000000 --- a/docs/source/_templates/sidebarintro.html +++ /dev/null @@ -1,29 +0,0 @@ -

About UWGeo

-Numerical Geodynamics Models -

{{ _('Navigation') }}

-{{ toctree(maxdepth=2, includehidden=theme_sidebar_includehidden, collapse=theme_sidebar_collapse) }} -{% if theme_extra_nav_links %} -
-
    - {% for text, uri in theme_extra_nav_links.items() %} -
  • {{ text }}
  • - {% endfor %} -
-{% endif %} -

Other Formats

-

- You can download the documentation in other formats as well: -

- -

Useful Links

- - - diff --git a/docs/source/_templates/sidebarlogo.html b/docs/source/_templates/sidebarlogo.html deleted file mode 100644 index bc814c15..00000000 --- a/docs/source/_templates/sidebarlogo.html +++ /dev/null @@ -1,29 +0,0 @@ -

About UWGeo

-Numerical Geodynamics Models -

{{ _('Navigation') }}

-{{ toctree(maxdepth=2, includehidden=theme_sidebar_includehidden, collapse=theme_sidebar_collapse) }} -{% if theme_extra_nav_links %} -
-
    - {% for text, uri in theme_extra_nav_links.items() %} -
  • {{ text }}
  • - {% endfor %} -
-{% endif %} -

Other Formats

-

- You can download the documentation in other formats as well: -

- -

Useful Links

- - - diff --git a/docs/source/_themes/.gitignore b/docs/source/_themes/.gitignore deleted file mode 100644 index 66b6e4c2..00000000 --- a/docs/source/_themes/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.pyc -*.pyo -.DS_Store diff --git a/docs/source/_themes/LICENSE b/docs/source/_themes/LICENSE deleted file mode 100644 index 8daab7ee..00000000 --- a/docs/source/_themes/LICENSE +++ /dev/null @@ -1,37 +0,0 @@ -Copyright (c) 2010 by Armin Ronacher. - -Some rights reserved. - -Redistribution and use in source and binary forms of the theme, with or -without modification, are permitted provided that the following conditions -are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* 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. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -We kindly ask you to only use these themes in an unmodified manner just -for Flask and Flask-related products, not for unrelated projects. If you -like the visual style and want to use it for your own projects, please -consider making some larger changes to the themes (such as changing -font faces, sizes, colors or margins). - -THIS THEME 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 OWNER 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 THEME, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/source/_themes/README b/docs/source/_themes/README deleted file mode 100644 index b3292bdf..00000000 --- a/docs/source/_themes/README +++ /dev/null @@ -1,31 +0,0 @@ -Flask Sphinx Styles -=================== - -This repository contains sphinx styles for Flask and Flask related -projects. To use this style in your Sphinx documentation, follow -this guide: - -1. put this folder as _themes into your docs folder. Alternatively - you can also use git submodules to check out the contents there. -2. add this to your conf.py: - - sys.path.append(os.path.abspath('_themes')) - html_theme_path = ['_themes'] - html_theme = 'flask' - -The following themes exist: - -- 'flask' - the standard flask documentation theme for large - projects -- 'flask_small' - small one-page theme. Intended to be used by - very small addon libraries for flask. - -The following options exist for the flask_small theme: - - [options] - index_logo = '' filename of a picture in _static - to be used as replacement for the - h1 in the index.rst file. - index_logo_height = 120px height of the index logo - github_fork = '' repository name on github for the - "fork me" badge diff --git a/docs/source/_themes/flask/layout.html b/docs/source/_themes/flask/layout.html deleted file mode 100644 index a98fc6f2..00000000 --- a/docs/source/_themes/flask/layout.html +++ /dev/null @@ -1,30 +0,0 @@ -{%- extends "basic/layout.html" %} -{%- block extrahead %} - {{ super() }} - {% if theme_touch_icon %} - - {% endif %} - -{% endblock %} -{%- block relbar2 %} - {% if theme_github_fork %} - Fork me on GitHub - {% endif %} -{% endblock %} -{% block header %} - {{ super() }} - {% if pagename == 'index' %} -
- {% endif %} -{% endblock %} -{%- block footer %} - - {% if pagename == 'index' %} -
- {% endif %} -{%- endblock %} diff --git a/docs/source/_themes/flask/relations.html b/docs/source/_themes/flask/relations.html deleted file mode 100644 index ed433fad..00000000 --- a/docs/source/_themes/flask/relations.html +++ /dev/null @@ -1,20 +0,0 @@ - -

Related Topics

- -{%- endfor %} -{%- if prev %} -

- Previous
- {{ prev.title }} -

-{%- endif %} -{%- if next %} -

- Next
- {{ next.title }} -

-{%- endif %} diff --git a/docs/source/_themes/flask/static/flasky.css_t b/docs/source/_themes/flask/static/flasky.css_t deleted file mode 100644 index b5ca39bc..00000000 --- a/docs/source/_themes/flask/static/flasky.css_t +++ /dev/null @@ -1,395 +0,0 @@ -/* - * flasky.css_t - * ~~~~~~~~~~~~ - * - * :copyright: Copyright 2010 by Armin Ronacher. - * :license: Flask Design License, see LICENSE for details. - */ - -{% set page_width = '940px' %} -{% set sidebar_width = '220px' %} - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Georgia', serif; - font-size: 17px; - background-color: white; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - width: {{ page_width }}; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 {{ sidebar_width }}; -} - -div.sphinxsidebar { - width: {{ sidebar_width }}; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #ffffff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -img.floatingflask { - padding: 0 0 10px 10px; - float: right; -} - -div.footer { - width: {{ page_width }}; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -div.related { - display: none; -} - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebar { - font-size: 14px; - line-height: 1.5; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0 0 20px 0; - margin: 0; - text-align: center; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: 'Garamond', 'Georgia', serif; - color: #444; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar input { - border: 1px solid #ccc; - font-family: 'Georgia', serif; - font-size: 1em; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -{% if theme_index_logo %} -div.indexwrapper h1 { - text-indent: -999999px; - background: url({{ theme_index_logo }}) no-repeat center center; - height: {{ theme_index_logo_height }}; -} -{% endif %} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #ddd; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #eaeaea; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - background: #fafafa; - margin: 20px -30px; - padding: 10px 30px; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - -div.admonition tt.xref, div.admonition a tt { - border-bottom: 1px solid #fafafa; -} - -dd div.admonition { - margin-left: -60px; - padding-left: 60px; -} - -div.admonition p.admonition-title { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: white; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt { - font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.9em; -} - -img.screenshot { -} - -tt.descname, tt.descclassname { - font-size: 0.95em; -} - -tt.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #eee; - background: #fdfdfd; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.footnote td.label { - width: 0px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #eee; - padding: 7px 30px; - margin: 15px -30px; - line-height: 1.3em; -} - -dl pre, blockquote pre, li pre { - margin-left: -60px; - padding-left: 60px; -} - -dl dl pre { - margin-left: -90px; - padding-left: 90px; -} - -tt { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid white; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt { - background: #EEE; -} diff --git a/docs/source/_themes/flask/static/small_flask.css b/docs/source/_themes/flask/static/small_flask.css deleted file mode 100644 index 1c6df309..00000000 --- a/docs/source/_themes/flask/static/small_flask.css +++ /dev/null @@ -1,70 +0,0 @@ -/* - * small_flask.css_t - * ~~~~~~~~~~~~~~~~~ - * - * :copyright: Copyright 2010 by Armin Ronacher. - * :license: Flask Design License, see LICENSE for details. - */ - -body { - margin: 0; - padding: 20px 30px; -} - -div.documentwrapper { - float: none; - background: white; -} - -div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: white; -} - -div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, -div.sphinxsidebar h3 a { - color: white; -} - -div.sphinxsidebar a { - color: #aaa; -} - -div.sphinxsidebar p.logo { - display: none; -} - -div.document { - width: 100%; - margin: 0; -} - -div.related { - display: block; - margin: 0; - padding: 10px 0 20px 0; -} - -div.related ul, -div.related ul li { - margin: 0; - padding: 0; -} - -div.footer { - display: none; -} - -div.bodywrapper { - margin: 0; -} - -div.body { - min-height: 0; - padding: 0; -} diff --git a/docs/source/_themes/flask/theme.conf b/docs/source/_themes/flask/theme.conf deleted file mode 100644 index fdbc008c..00000000 --- a/docs/source/_themes/flask/theme.conf +++ /dev/null @@ -1,10 +0,0 @@ -[theme] -inherit = basic -stylesheet = flasky.css -pygments_style = flask_theme_support.FlaskyStyle - -[options] -index_logo = '' -index_logo_height = 120px -touch_icon = -github_fork = underworldcode/uwgeodynamics diff --git a/docs/source/_themes/flask_theme_support.py b/docs/source/_themes/flask_theme_support.py deleted file mode 100644 index 33f47449..00000000 --- a/docs/source/_themes/flask_theme_support.py +++ /dev/null @@ -1,86 +0,0 @@ -# flasky extensions. flasky pygments style based on tango style -from pygments.style import Style -from pygments.token import Keyword, Name, Comment, String, Error, \ - Number, Operator, Generic, Whitespace, Punctuation, Other, Literal - - -class FlaskyStyle(Style): - background_color = "#f8f8f8" - default_style = "" - - styles = { - # No corresponding class for the following: - #Text: "", # class: '' - Whitespace: "underline #f8f8f8", # class: 'w' - Error: "#a40000 border:#ef2929", # class: 'err' - Other: "#000000", # class 'x' - - Comment: "italic #8f5902", # class: 'c' - Comment.Preproc: "noitalic", # class: 'cp' - - Keyword: "bold #004461", # class: 'k' - Keyword.Constant: "bold #004461", # class: 'kc' - Keyword.Declaration: "bold #004461", # class: 'kd' - Keyword.Namespace: "bold #004461", # class: 'kn' - Keyword.Pseudo: "bold #004461", # class: 'kp' - Keyword.Reserved: "bold #004461", # class: 'kr' - Keyword.Type: "bold #004461", # class: 'kt' - - Operator: "#582800", # class: 'o' - Operator.Word: "bold #004461", # class: 'ow' - like keywords - - Punctuation: "bold #000000", # class: 'p' - - # because special names such as Name.Class, Name.Function, etc. - # are not recognized as such later in the parsing, we choose them - # to look the same as ordinary variables. - Name: "#000000", # class: 'n' - Name.Attribute: "#c4a000", # class: 'na' - to be revised - Name.Builtin: "#004461", # class: 'nb' - Name.Builtin.Pseudo: "#3465a4", # class: 'bp' - Name.Class: "#000000", # class: 'nc' - to be revised - Name.Constant: "#000000", # class: 'no' - to be revised - Name.Decorator: "#888", # class: 'nd' - to be revised - Name.Entity: "#ce5c00", # class: 'ni' - Name.Exception: "bold #cc0000", # class: 'ne' - Name.Function: "#000000", # class: 'nf' - Name.Property: "#000000", # class: 'py' - Name.Label: "#f57900", # class: 'nl' - Name.Namespace: "#000000", # class: 'nn' - to be revised - Name.Other: "#000000", # class: 'nx' - Name.Tag: "bold #004461", # class: 'nt' - like a keyword - Name.Variable: "#000000", # class: 'nv' - to be revised - Name.Variable.Class: "#000000", # class: 'vc' - to be revised - Name.Variable.Global: "#000000", # class: 'vg' - to be revised - Name.Variable.Instance: "#000000", # class: 'vi' - to be revised - - Number: "#990000", # class: 'm' - - Literal: "#000000", # class: 'l' - Literal.Date: "#000000", # class: 'ld' - - String: "#4e9a06", # class: 's' - String.Backtick: "#4e9a06", # class: 'sb' - String.Char: "#4e9a06", # class: 'sc' - String.Doc: "italic #8f5902", # class: 'sd' - like a comment - String.Double: "#4e9a06", # class: 's2' - String.Escape: "#4e9a06", # class: 'se' - String.Heredoc: "#4e9a06", # class: 'sh' - String.Interpol: "#4e9a06", # class: 'si' - String.Other: "#4e9a06", # class: 'sx' - String.Regex: "#4e9a06", # class: 'sr' - String.Single: "#4e9a06", # class: 's1' - String.Symbol: "#4e9a06", # class: 'ss' - - Generic: "#000000", # class: 'g' - Generic.Deleted: "#a40000", # class: 'gd' - Generic.Emph: "italic #000000", # class: 'ge' - Generic.Error: "#ef2929", # class: 'gr' - Generic.Heading: "bold #000080", # class: 'gh' - Generic.Inserted: "#00A000", # class: 'gi' - Generic.Output: "#888", # class: 'go' - Generic.Prompt: "#745334", # class: 'gp' - Generic.Strong: "bold #000000", # class: 'gs' - Generic.Subheading: "bold #800080", # class: 'gu' - Generic.Traceback: "bold #a40000", # class: 'gt' - } diff --git a/docs/source/conf.py b/docs/source/conf.py index 53dec97f..4111886f 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -20,7 +20,7 @@ # -- Project information ----------------------------------------------------- project = 'UWGeodynamics' -copyright = '2018, Romain Beucher' +copyright = '2020, Romain Beucher' author = 'Romain Beucher' # The short X.Y version @@ -87,11 +87,13 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'flask' +import sphinx_rtd_theme + +html_theme = 'sphinx_rtd_theme' # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] -html_theme_path = ['_themes'] +html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -105,7 +107,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +#html_static_path = ['_static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. From 50ead44f1711cee68e1155f25603a9970403736a Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 17:09:10 +1000 Subject: [PATCH 42/80] Add copy of gadi install script --- nci_gadi/install_on_gadi.sh | 142 ++++++++++++++++++++++++++++++++++++ nci_gadi/script.pbs | 19 +++++ 2 files changed, 161 insertions(+) create mode 100644 nci_gadi/install_on_gadi.sh create mode 100644 nci_gadi/script.pbs diff --git a/nci_gadi/install_on_gadi.sh b/nci_gadi/install_on_gadi.sh new file mode 100644 index 00000000..93eaa3cc --- /dev/null +++ b/nci_gadi/install_on_gadi.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +module purge +module load openmpi/4.0.2 hdf5/1.10.5p python3/3.7.4 scons/3.1.1 petsc/3.12.2 + +export GROUP=q97 +export USER= +export INSTALL_NAME=UWGeodynamics_2.9.6 + +export CODES_PATH=/scratch/$GROUP/$USER/codes +export UW_OPT_DIR=$CODES_PATH/opt +export INSTALL_PATH=$CODES_PATH/$INSTALL_NAME + +export SWIG_VERSION=3.0.12 +export SWIG_PATH=$UW_OPT_DIR/swig-$SWIG_VERSION +export PATH=$SWIG_PATH/bin:$PATH + +export OMPI_MCA_io=ompio + +export CDIR=$PWD +export LD_PRELOAD=/apps/openmpi-mofed4.7-pbs19.2/4.0.2/lib/libmpi_usempif08_GNU.so.40:/apps/openmpi-mofed4.7-pbs19.2/4.0.2/lib/libmpi_usempi_ignore_tkr_GNU.so.40:/apps/openmpi-mofed4.7-pbs19.2/4.0.2/lib/libmpi_cxx.so.40 + +install_swig() { + tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX) + cd $tmp_dir + wget http://prdownloads.sourceforge.net/swig/swig-$SWIG_VERSION.tar.gz + tar -xvzf swig-$SWIG_VERSION.tar.gz + cd swig-$SWIG_VERSION + ./configure --prefix=$SWIG_PATH + make + make install + rm $tmp_dir + cd $CDIR +} + + +install_petsc(){ + source $INSTALL_PATH/bin/activate + export PETSC_CONFIGURE_OPTIONS="--with-debugging=0 --prefix=/usr/local \ + --COPTFLAGS='-O3' --CXXOPTFLAGS='-O3' --FOPTFLAGS='-O3' \ + --with-zlib=1 \ + --with-hdf5=1 \ + --download-mumps=1 \ + --download-parmetis=1 \ + --download-metis=1 \ + --download-superlu=1 \ + --download-hypre=1 \ + --download-scalapack=1 \ + --download-superlu_dist=1 \ + --useThreads=0 \ + --download-superlu=1 \ + --with-shared-libraries \ + --with-cxx-dialect=C++11 \ + --prefix=/scratch/q97/codes/opt/petsc_3.12.3\ + --with-make-np=4" + + CC=mpicc CXX=mpicxx FC=mpif90 pip install petsc==3.12.3 -vvv +} + +install_python_dependencies(){ + source $INSTALL_PATH/bin/activate + pip3 install Cython + pip3 install mpi4py + export HDF5_VERSION=1.10.5 + CC=h5pcc HDF5_MPI="ON" pip3 install --no-cache-dir --global-option=build_ext --global-option="-L/apps/hdf5/1.10.5p/lib/ompi3/" --no-binary=h5py h5py + +} + +install_underworld(){ + export PETSC_DIR=/scratch/q97/codes/opt/petsc_3.12.3 + source $INSTALL_PATH/bin/activate + tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX) + cd $tmp_dir + git clone --branch v2.9.4b https://github.com/underworldcode/underworld2.git $tmp_dir + pip3 install . + rm -rf $tmp_dir + cd $CDIR +} + +install_uwgeodynamics(){ + source $INSTALL_PATH/bin/activate + tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX) + cd $tmp_dir + git clone https://github.com/underworldcode/uwgeodynamics.git $tmp_dir + pip3 install . + rm -rf $tmp_dir + cd $CDIR +} + +check_underworld_exists(){ + source $INSTALL_PATH/bin/activate + return $(python3 -c "import underworld") +} + +check_uwgeodynamics_exists(){ + source $INSTALL_PATH/bin/activate + return $(python3 -c "import UWGeodynamics") +} + +check_badlands_exists(){ + source $INSTALL_PATH/bin/activate + return $(python3 -c "import badlands") +} + +install_badlands(){ + source $INSTALL_PATH/bin/activate + pip3 install badlands +} + +install_full_stack(){ + if ! command -v swig 2>/dev/null; then + install_swig + else + echo "Found swig" + fi + + install_python_dependencies + + if ! check_underworld_exists; then + install_underworld + fi + + if ! check_uwgeodynamics_exists; then + install_uwgeodynamics + fi + + if ! check_badlands_exists; then + install_badlands + fi +} + + +if [ ! -d "$INSTALL_PATH" ] +then + echo "Environment not found, creating a new one" + mkdir $INSTALL_PATH + python3 --version + python3 -m venv $INSTALL_PATH +else + echo "Found Environment" + source $INSTALL_PATH/bin/activate +fi diff --git a/nci_gadi/script.pbs b/nci_gadi/script.pbs new file mode 100644 index 00000000..a7256c76 --- /dev/null +++ b/nci_gadi/script.pbs @@ -0,0 +1,19 @@ +#PBS -P q97 +#PBS -q normal +#PBS -l walltime=1:00:00 +#PBS -l mem=1000GB +#PBS -l jobfs=10MB +#PBS -l ncpus=12 +#PBS -l software=underworld +#PBS -l wd +#PBS -l storage=scratch/q97 +#PBS -N Model + +source /scratch/q97/codes/UWGeodynamics_2.9.10.sh + +MODELNAME="Model_Name" +OUTPUTPATH=`pwd` +SCRIPT="model_script.py" + +# execution +mpiexec python3 ./$SCRIPT 1> $OUTPUTPATH/$MODELNAME.$PBS_JOBID.log 2> $OUTPUTPATH/$MODELNAME.$PBS_JOBID.err From d913ab0b702542c6dfbf51b36bf62699f6b6829a Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 17:20:03 +1000 Subject: [PATCH 43/80] Update docs, get rid of Raijin --- docs/source/Installation.rst | 99 ++---------------------------------- 1 file changed, 5 insertions(+), 94 deletions(-) diff --git a/docs/source/Installation.rst b/docs/source/Installation.rst index 52314326..8d29effc 100644 --- a/docs/source/Installation.rst +++ b/docs/source/Installation.rst @@ -169,102 +169,12 @@ requirements - openmpi >= 1.8 - hdf5 >= 1.8 -NCI Raijin +NCI Gadi ~~~~~~~~~~ -The following script install Underworld and UWGeodynamics on raijin: - -.. code:: bash - - #!/bin/sh - # This script installs underworld on raijin.nci.org.au - # - # Usage: - # sh ./nci_raijin.sh - # - # exit when any command fails - set -e - - DATE=`date +%d%b%Y` # could be used to date checkout eg, - INSTALLPATH=`pwd`/$1 - UW_DIR=$INSTALLPATH/underworld-$DATE - - mkdir $INSTALLPATH - - cd $INSTALLPATH - git clone https://github.com/underworldcode/underworld2.git $UW_DIR - cd $UW_DIR - git checkout master # checkout the requested version - - # setup modules - module purge - RUN_MODS='pbs dot mpi4py/3.0.2-py36-ompi3' - module load hdf5/1.10.2p petsc/3.9.4 gcc/5.2.0 mesa/11.2.2 swig/3.0.12 scons/3.0.1 $RUN_MODS - echo "*** The module list is: ***" - module list -t - - # setup python environment with preinstalled packages (h5py, lavavu, pint) - export PYTHONPATH=/apps/underworld/opt/h5py/2.9.0-py36-ompi3/lib/python3.6/site-packages/h5py-2.9.0-py3.6-linux-x86_64.egg/:/apps/underworld/opt/lavavu/1.4.1_rc/:/apps/underworld/opt/pint/0.9_py36/lib/python3.6/site-packages/:$PYTHONPATH - echo "*** New PYTHONPATH: $PYTHONPATH ***" - - # build and install code - cd libUnderworld - CONFIG="./configure.py --python-dir=`python3-config --prefix` --with-debugging=0" - echo "*** The config line is: ***" - echo "$CONFIG" - echo "" - - $CONFIG - ./compile.py -j4 - cd .. ; source updatePyPath.sh - cd $INSTALLPATH - - # UWGeodynamics - - pip3 install git+https://github.com/underworldcode/uwgeodynamics --prefix=$INSTALLPATH - - cd $INSTALLPATH - touch module_paths.sh - - echo "#!/bin/bash" >> module_paths.sh - echo "source $UW_DIR/updatePyPath.sh" >> module_paths.sh - echo "module purge" >> module_paths.sh - echo "module load $RUN_MODS" >> module_paths.sh - echo "" >> module_paths.sh - echo "export PYTHONPATH=$UW_DIR:$UW_DIR/glucifer:$PYTHONPATH" >> module_paths.sh - echo "" >> module_paths.sh - echo "export PATH=$PATH" >> module_paths.sh - echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> module_paths.sh - - echo "#####################################################################" - echo "Underworld2 built successfully at: " - echo " $UW_DIR " - echo "#####################################################################" - - -We provide a minimal PBS script: - -.. code:: bash - - #PBS -P project - #PBS -q normal - #PBS -l walltime=1:00:00 - #PBS -l mem=1GB - #PBS -l jobfs=10MB - #PBS -l ncpus=6 - #PBS -l software=underworld - #PBS -l wd - #PBS -N name - - source path-to-your-underworld-installation/module_paths.sh - - MODELNAME="Model" - OUTPUTPATH=`pwd` - SCRIPT="Model.py" - - mpiexec --mca mpi_warn_on_fork 0 --mca opal_abort_print_stack 1 --mca mpi_param_check 1 \ - --mca mpi_add_procs_cutoff 256 python ./$SCRIPT 1> $OUTPUTPATH/$MODELNAME.$PBS_JOBID.log 2> $OUTPUTPATH/$MODELNAME.$PBS_JOBID.err - +We provide a `script `_ to install UWGeodynamics, Underworld and Badlands inside a virtual +environment on Gadi. +A minimal `PBS script `_ is also available. Pawsey MAGNUS ------------- @@ -376,3 +286,4 @@ That’s it!!! .. _Kitematic: https://kitematic.com/ .. _github: https://github.com/underworldcode/UWGeodynamics.git .. _Pint: https://pint.readthedocs.io/en/latest + From e009b797fbef997345cefb01101c6afc50fa0678 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 17:26:11 +1000 Subject: [PATCH 44/80] Change License to markdown --- LICENSE.md | 595 ++++++++++++++++++++++++++++++++++++++++++++++ LICENSE.txt | 674 ---------------------------------------------------- MANIFEST.in | 2 +- 3 files changed, 596 insertions(+), 675 deletions(-) create mode 100644 LICENSE.md delete mode 100644 LICENSE.txt diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..d2b23397 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,595 @@ +GNU General Public License +========================== + +_Version 3, 29 June 2007_ +_Copyright © 2007 Free Software Foundation, Inc. <>_ + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +## Preamble + +The GNU General Public License is a free, copyleft license for software and other +kinds of works. + +The licenses for most software and other practical works are designed to take away +your freedom to share and change the works. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change all versions of a +program--to make sure it remains free software for all its users. We, the Free +Software Foundation, use the GNU General Public License for most of our software; it +applies also to any other work released this way by its authors. You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General +Public Licenses are designed to make sure that you have the freedom to distribute +copies of free software (and charge for them if you wish), that you receive source +code or can get it if you want it, that you can change the software or use pieces of +it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or +asking you to surrender the rights. Therefore, you have certain responsibilities if +you distribute copies of the software, or if you modify it: responsibilities to +respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, +you must pass on to the recipients the same freedoms that you received. You must make +sure that they, too, receive or can get the source code. And you must show them these +terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: **(1)** assert +copyright on the software, and **(2)** offer you this License giving you legal permission +to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is +no warranty for this free software. For both users' and authors' sake, the GPL +requires that modified versions be marked as changed, so that their problems will not +be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of +the software inside them, although the manufacturer can do so. This is fundamentally +incompatible with the aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we have designed +this version of the GPL to prohibit the practice for those products. If such problems +arise substantially in other domains, we stand ready to extend this provision to +those domains in future versions of the GPL, as needed to protect the freedom of +users. + +Finally, every program is threatened constantly by software patents. States should +not allow patents to restrict development and use of software on general-purpose +computers, but in those that do, we wish to avoid the special danger that patents +applied to a free program could make it effectively proprietary. To prevent this, the +GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +## TERMS AND CONDITIONS + +### 0. Definitions + +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this +License. Each licensee is addressed as “you”. “Licensees” and +“recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work in +a fashion requiring copyright permission, other than the making of an exact copy. The +resulting work is called a “modified version” of the earlier work or a +work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on +the Program. + +To “propagate” a work means to do anything with it that, without +permission, would make you directly or secondarily liable for infringement under +applicable copyright law, except executing it on a computer or modifying a private +copy. Propagation includes copying, distribution (with or without modification), +making available to the public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through a computer +network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to the +extent that it includes a convenient and prominently visible feature that **(1)** +displays an appropriate copyright notice, and **(2)** tells the user that there is no +warranty for the work (except to the extent that warranties are provided), that +licensees may convey the work under this License, and how to view a copy of this +License. If the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +### 1. Source Code + +The “source code” for a work means the preferred form of the work for +making modifications to it. “Object code” means any non-source form of a +work. + +A “Standard Interface” means an interface that either is an official +standard defined by a recognized standards body, or, in the case of interfaces +specified for a particular programming language, one that is widely used among +developers working in that language. + +The “System Libraries” of an executable work include anything, other than +the work as a whole, that **(a)** is included in the normal form of packaging a Major +Component, but which is not part of that Major Component, and **(b)** serves only to +enable use of the work with that Major Component, or to implement a Standard +Interface for which an implementation is available to the public in source code form. +A “Major Component”, in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system (if any) on which +the executable work runs, or a compiler used to produce the work, or an object code +interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the +source code needed to generate, install, and (for an executable work) run the object +code and to modify the work, including scripts to control those activities. However, +it does not include the work's System Libraries, or general-purpose tools or +generally available free programs which are used unmodified in performing those +activities but which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for the work, and +the source code for shared libraries and dynamically linked subprograms that the work +is specifically designed to require, such as by intimate data communication or +control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate +automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +### 2. Basic Permissions + +All rights granted under this License are granted for the term of copyright on the +Program, and are irrevocable provided the stated conditions are met. This License +explicitly affirms your unlimited permission to run the unmodified Program. The +output from running a covered work is covered by this License only if the output, +given its content, constitutes a covered work. This License acknowledges your rights +of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without +conditions so long as your license otherwise remains in force. You may convey covered +works to others for the sole purpose of having them make modifications exclusively +for you, or provide you with facilities for running those works, provided that you +comply with the terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for you must do so +exclusively on your behalf, under your direction and control, on terms that prohibit +them from making any copies of your copyrighted material outside their relationship +with you. + +Conveying under any other circumstances is permitted solely under the conditions +stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +### 3. Protecting Users' Legal Rights From Anti-Circumvention Law + +No covered work shall be deemed part of an effective technological measure under any +applicable law fulfilling obligations under article 11 of the WIPO copyright treaty +adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention +of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of +technological measures to the extent such circumvention is effected by exercising +rights under this License with respect to the covered work, and you disclaim any +intention to limit operation or modification of the work as a means of enforcing, +against the work's users, your or third parties' legal rights to forbid circumvention +of technological measures. + +### 4. Conveying Verbatim Copies + +You may convey verbatim copies of the Program's source code as you receive it, in any +medium, provided that you conspicuously and appropriately publish on each copy an +appropriate copyright notice; keep intact all notices stating that this License and +any non-permissive terms added in accord with section 7 apply to the code; keep +intact all notices of the absence of any warranty; and give all recipients a copy of +this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer +support or warranty protection for a fee. + +### 5. Conveying Modified Source Versions + +You may convey a work based on the Program, or the modifications to produce it from +the Program, in the form of source code under the terms of section 4, provided that +you also meet all of these conditions: + +* **a)** The work must carry prominent notices stating that you modified it, and giving a +relevant date. +* **b)** The work must carry prominent notices stating that it is released under this +License and any conditions added under section 7. This requirement modifies the +requirement in section 4 to “keep intact all notices”. +* **c)** You must license the entire work, as a whole, under this License to anyone who +comes into possession of a copy. This License will therefore apply, along with any +applicable section 7 additional terms, to the whole of the work, and all its parts, +regardless of how they are packaged. This License gives no permission to license the +work in any other way, but it does not invalidate such permission if you have +separately received it. +* **d)** If the work has interactive user interfaces, each must display Appropriate Legal +Notices; however, if the Program has interactive interfaces that do not display +Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are +not by their nature extensions of the covered work, and which are not combined with +it such as to form a larger program, in or on a volume of a storage or distribution +medium, is called an “aggregate” if the compilation and its resulting +copyright are not used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work in an aggregate +does not cause this License to apply to the other parts of the aggregate. + +### 6. Conveying Non-Source Forms + +You may convey a covered work in object code form under the terms of sections 4 and +5, provided that you also convey the machine-readable Corresponding Source under the +terms of this License, in one of these ways: + +* **a)** Convey the object code in, or embodied in, a physical product (including a +physical distribution medium), accompanied by the Corresponding Source fixed on a +durable physical medium customarily used for software interchange. +* **b)** Convey the object code in, or embodied in, a physical product (including a +physical distribution medium), accompanied by a written offer, valid for at least +three years and valid for as long as you offer spare parts or customer support for +that product model, to give anyone who possesses the object code either **(1)** a copy of +the Corresponding Source for all the software in the product that is covered by this +License, on a durable physical medium customarily used for software interchange, for +a price no more than your reasonable cost of physically performing this conveying of +source, or **(2)** access to copy the Corresponding Source from a network server at no +charge. +* **c)** Convey individual copies of the object code with a copy of the written offer to +provide the Corresponding Source. This alternative is allowed only occasionally and +noncommercially, and only if you received the object code with such an offer, in +accord with subsection 6b. +* **d)** Convey the object code by offering access from a designated place (gratis or for +a charge), and offer equivalent access to the Corresponding Source in the same way +through the same place at no further charge. You need not require recipients to copy +the Corresponding Source along with the object code. If the place to copy the object +code is a network server, the Corresponding Source may be on a different server +(operated by you or a third party) that supports equivalent copying facilities, +provided you maintain clear directions next to the object code saying where to find +the Corresponding Source. Regardless of what server hosts the Corresponding Source, +you remain obligated to ensure that it is available for as long as needed to satisfy +these requirements. +* **e)** Convey the object code using peer-to-peer transmission, provided you inform +other peers where the object code and Corresponding Source of the work are being +offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the +Corresponding Source as a System Library, need not be included in conveying the +object code work. + +A “User Product” is either **(1)** a “consumer product”, which +means any tangible personal property which is normally used for personal, family, or +household purposes, or **(2)** anything designed or sold for incorporation into a +dwelling. In determining whether a product is a consumer product, doubtful cases +shall be resolved in favor of coverage. For a particular product received by a +particular user, “normally used” refers to a typical or common use of +that class of product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected to use, the +product. A product is a consumer product regardless of whether the product has +substantial commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, +procedures, authorization keys, or other information required to install and execute +modified versions of a covered work in that User Product from a modified version of +its Corresponding Source. The information must suffice to ensure that the continued +functioning of the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for +use in, a User Product, and the conveying occurs as part of a transaction in which +the right of possession and use of the User Product is transferred to the recipient +in perpetuity or for a fixed term (regardless of how the transaction is +characterized), the Corresponding Source conveyed under this section must be +accompanied by the Installation Information. But this requirement does not apply if +neither you nor any third party retains the ability to install modified object code +on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to +continue to provide support service, warranty, or updates for a work that has been +modified or installed by the recipient, or for the User Product in which it has been +modified or installed. Access to a network may be denied when the modification itself +materially and adversely affects the operation of the network or violates the rules +and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with +this section must be in a format that is publicly documented (and with an +implementation available to the public in source code form), and must require no +special password or key for unpacking, reading or copying. + +### 7. Additional Terms + +“Additional permissions” are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. Additional +permissions that are applicable to the entire Program shall be treated as though they +were included in this License, to the extent that they are valid under applicable +law. If additional permissions apply only to part of the Program, that part may be +used separately under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any +additional permissions from that copy, or from any part of it. (Additional +permissions may be written to require their own removal in certain cases when you +modify the work.) You may place additional permissions on material, added by you to a +covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a +covered work, you may (if authorized by the copyright holders of that material) +supplement the terms of this License with terms: + +* **a)** Disclaiming warranty or limiting liability differently from the terms of +sections 15 and 16 of this License; or +* **b)** Requiring preservation of specified reasonable legal notices or author +attributions in that material or in the Appropriate Legal Notices displayed by works +containing it; or +* **c)** Prohibiting misrepresentation of the origin of that material, or requiring that +modified versions of such material be marked in reasonable ways as different from the +original version; or +* **d)** Limiting the use for publicity purposes of names of licensors or authors of the +material; or +* **e)** Declining to grant rights under trademark law for use of some trade names, +trademarks, or service marks; or +* **f)** Requiring indemnification of licensors and authors of that material by anyone +who conveys the material (or modified versions of it) with contractual assumptions of +liability to the recipient, for any liability that these contractual assumptions +directly impose on those licensors and authors. + +All other non-permissive additional terms are considered “further +restrictions” within the meaning of section 10. If the Program as you received +it, or any part of it, contains a notice stating that it is governed by this License +along with a term that is a further restriction, you may remove that term. If a +license document contains a further restriction but permits relicensing or conveying +under this License, you may add to a covered work material governed by the terms of +that license document, provided that the further restriction does not survive such +relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in +the relevant source files, a statement of the additional terms that apply to those +files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a +separately written license, or stated as exceptions; the above requirements apply +either way. + +### 8. Termination + +You may not propagate or modify a covered work except as expressly provided under +this License. Any attempt otherwise to propagate or modify it is void, and will +automatically terminate your rights under this License (including any patent licenses +granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a +particular copyright holder is reinstated **(a)** provisionally, unless and until the +copyright holder explicitly and finally terminates your license, and **(b)** permanently, +if the copyright holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently +if the copyright holder notifies you of the violation by some reasonable means, this +is the first time you have received notice of violation of this License (for any +work) from that copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of +parties who have received copies or rights from you under this License. If your +rights have been terminated and not permanently reinstated, you do not qualify to +receive new licenses for the same material under section 10. + +### 9. Acceptance Not Required for Having Copies + +You are not required to accept this License in order to receive or run a copy of the +Program. Ancillary propagation of a covered work occurring solely as a consequence of +using peer-to-peer transmission to receive a copy likewise does not require +acceptance. However, nothing other than this License grants you permission to +propagate or modify any covered work. These actions infringe copyright if you do not +accept this License. Therefore, by modifying or propagating a covered work, you +indicate your acceptance of this License to do so. + +### 10. Automatic Licensing of Downstream Recipients + +Each time you convey a covered work, the recipient automatically receives a license +from the original licensors, to run, modify and propagate that work, subject to this +License. You are not responsible for enforcing compliance by third parties with this +License. + +An “entity transaction” is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an organization, or +merging organizations. If propagation of a covered work results from an entity +transaction, each party to that transaction who receives a copy of the work also +receives whatever licenses to the work the party's predecessor in interest had or +could give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if the predecessor +has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or +affirmed under this License. For example, you may not impose a license fee, royalty, +or other charge for exercise of rights granted under this License, and you may not +initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging +that any patent claim is infringed by making, using, selling, offering for sale, or +importing the Program or any portion of it. + +### 11. Patents + +A “contributor” is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The work thus +licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or +controlled by the contributor, whether already acquired or hereafter acquired, that +would be infringed by some manner, permitted by this License, of making, using, or +selling its contributor version, but do not include claims that would be infringed +only as a consequence of further modification of the contributor version. For +purposes of this definition, “control” includes the right to grant patent +sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license +under the contributor's essential patent claims, to make, use, sell, offer for sale, +import and otherwise run, modify and propagate the contents of its contributor +version. + +In the following three paragraphs, a “patent license” is any express +agreement or commitment, however denominated, not to enforce a patent (such as an +express permission to practice a patent or covenant not to sue for patent +infringement). To “grant” such a patent license to a party means to make +such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the +Corresponding Source of the work is not available for anyone to copy, free of charge +and under the terms of this License, through a publicly available network server or +other readily accessible means, then you must either **(1)** cause the Corresponding +Source to be so available, or **(2)** arrange to deprive yourself of the benefit of the +patent license for this particular work, or **(3)** arrange, in a manner consistent with +the requirements of this License, to extend the patent license to downstream +recipients. “Knowingly relying” means you have actual knowledge that, but +for the patent license, your conveying the covered work in a country, or your +recipient's use of the covered work in a country, would infringe one or more +identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you +convey, or propagate by procuring conveyance of, a covered work, and grant a patent +license to some of the parties receiving the covered work authorizing them to use, +propagate, modify or convey a specific copy of the covered work, then the patent +license you grant is automatically extended to all recipients of the covered work and +works based on it. + +A patent license is “discriminatory” if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on the +non-exercise of one or more of the rights that are specifically granted under this +License. You may not convey a covered work if you are a party to an arrangement with +a third party that is in the business of distributing software, under which you make +payment to the third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties who would receive +the covered work from you, a discriminatory patent license **(a)** in connection with +copies of the covered work conveyed by you (or copies made from those copies), or **(b)** +primarily for and in connection with specific products or compilations that contain +the covered work, unless you entered into that arrangement, or that patent license +was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied +license or other defenses to infringement that may otherwise be available to you +under applicable patent law. + +### 12. No Surrender of Others' Freedom + +If conditions are imposed on you (whether by court order, agreement or otherwise) +that contradict the conditions of this License, they do not excuse you from the +conditions of this License. If you cannot convey a covered work so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not convey it at all. For example, if you +agree to terms that obligate you to collect a royalty for further conveying from +those to whom you convey the Program, the only way you could satisfy both those terms +and this License would be to refrain entirely from conveying the Program. + +### 13. Use with the GNU Affero General Public License + +Notwithstanding any other provision of this License, you have permission to link or +combine any covered work with a work licensed under version 3 of the GNU Affero +General Public License into a single combined work, and to convey the resulting work. +The terms of this License will continue to apply to the part which is the covered +work, but the special requirements of the GNU Affero General Public License, section +13, concerning interaction through a network will apply to the combination as such. + +### 14. Revised Versions of this License + +The Free Software Foundation may publish revised and/or new versions of the GNU +General Public License from time to time. Such new versions will be similar in spirit +to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that +a certain numbered version of the GNU General Public License “or any later +version” applies to it, you have the option of following the terms and +conditions either of that numbered version or of any later version published by the +Free Software Foundation. If the Program does not specify a version number of the GNU +General Public License, you may choose any version ever published by the Free +Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU +General Public License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no +additional obligations are imposed on any author or copyright holder as a result of +your choosing to follow a later version. + +### 15. Disclaimer of Warranty + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE +QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +### 16. Limitation of Liability + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY +COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS +PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, +INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE +OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE +WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +### 17. Interpretation of Sections 15 and 16 + +If the disclaimer of warranty and limitation of liability provided above cannot be +given local legal effect according to their terms, reviewing courts shall apply local +law that most closely approximates an absolute waiver of all civil liability in +connection with the Program, unless a warranty or assumption of liability accompanies +a copy of the Program in return for a fee. + +_END OF TERMS AND CONDITIONS_ + +## How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to +the public, the best way to achieve this is to make it free software which everyone +can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them +to the start of each source file to most effectively state the exclusion of warranty; +and each file should have at least the “copyright” line and a pointer to +where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this +when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type 'show c' for details. + +The hypothetical commands `show w` and `show c` should show the appropriate parts of +the General Public License. Of course, your program's commands might be different; +for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to +sign a “copyright disclaimer” for the program, if necessary. For more +information on this, and how to apply and follow the GNU GPL, see +<>. + +The GNU General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may consider it +more useful to permit linking proprietary applications with the library. If this is +what you want to do, use the GNU Lesser General Public License instead of this +License. But first, please read +<>. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 94a9ed02..00000000 --- a/LICENSE.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/MANIFEST.in b/MANIFEST.in index 7f43b691..6802612a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,5 @@ # Include the license file -include LICENSE.txt +include LICENSE.md include uwgeodynamicsrc.template recursive-include utils *.sh recursive-include UWGeodynamics/ressources *.json From b0ccd7098ea8934d7372cbee1557475ce83b8e9a Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 22 Jun 2020 17:29:18 +1000 Subject: [PATCH 45/80] Cleaning --- build_wheels.sh | 5 --- utils/convert_notebook_wikis.sh | 3 -- utils/magnus_script.sh | 20 ------------ utils/markdown.tpl | 55 --------------------------------- utils/run_tests.sh | 2 -- 5 files changed, 85 deletions(-) delete mode 100755 build_wheels.sh delete mode 100755 utils/convert_notebook_wikis.sh delete mode 100644 utils/magnus_script.sh delete mode 100644 utils/markdown.tpl delete mode 100755 utils/run_tests.sh diff --git a/build_wheels.sh b/build_wheels.sh deleted file mode 100755 index cb49994d..00000000 --- a/build_wheels.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -python setup.py sdist -python setup.py bdist_wheel -python -m twine upload --verbose dist/* - diff --git a/utils/convert_notebook_wikis.sh b/utils/convert_notebook_wikis.sh deleted file mode 100755 index c57c7e81..00000000 --- a/utils/convert_notebook_wikis.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -jupyter nbconvert --to markdown --template=markdown.tpl ../manual/*.ipynb -mv ../manual/*.md ../docs/wiki/. diff --git a/utils/magnus_script.sh b/utils/magnus_script.sh deleted file mode 100644 index 17212183..00000000 --- a/utils/magnus_script.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -#!/bin/bash -#SBATCH --nodes=2 -#SBATCH --time=00:10:00 -#SBATCH --image=docker:rbeucher/underworld2_geodynamics:dev -#SBATCH --volume="/scratch/q97/rb5533:/workspace/user_data" - -echo "PRINTING ENVIRONMENT" -env - -echo "PRINTING SLURM SCRIPT" -scontrol show job ${SLURM_JOBID} -ddd - -module load shifter - -# you can ignore the next two lines.. this is just pulling a script from *within* the container. -#shifter cp /opt/underworld2/docs/examples/1_06_Rayleigh_Taylor.ipynb . -#shifter /opt/underworld2/utils/ipynb_to_py.sh 1_06_Rayleigh_Taylor.ipynb - -srun -n 48 shifter python 1_06_Rayleigh_Taylor.py diff --git a/utils/markdown.tpl b/utils/markdown.tpl deleted file mode 100644 index f39bb5ee..00000000 --- a/utils/markdown.tpl +++ /dev/null @@ -1,55 +0,0 @@ -{% extends 'display_priority.tpl' %} - - -{% block in_prompt %} -{% endblock in_prompt %} - -{% block output_prompt %} -{%- endblock output_prompt %} - -{% block input %} -``` -{%- if 'magics_language' in cell.metadata -%} - {{ cell.metadata.magics_language}} -{%- elif 'name' in nb.metadata.get('language_info', {}) -%} - {{ nb.metadata.language_info.name }} -{%- endif %} -{{ cell.source}} -``` -{% endblock input %} - -{% block data_priority scoped %} -{{ super() }} -{% endblock %} - -{% block data_svg %} -![svg]({{ output.metadata.filenames['image/svg+xml'] | path2url }}) -{% endblock data_svg %} - -{% block data_png %} -![png]({{ output.metadata.filenames['image/png'] | path2url }}) -{% endblock data_png %} - -{% block data_jpg %} -![jpeg]({{ output.metadata.filenames['image/jpeg'] | path2url }}) -{% endblock data_jpg %} - -{% block data_latex %} -{{ output.data['text/latex'] }} -{% endblock data_latex %} - -{% block data_html scoped %} -{{ output.data['text/html'] }} -{% endblock data_html %} - -{% block data_markdown scoped %} -{{ output.data['text/markdown'] }} -{% endblock data_markdown %} - -{% block data_text scoped %} -{{ output.data['text/plain'] | indent }} -{% endblock data_text %} - -{% block markdowncell scoped %} -{{ cell.source }} -{% endblock markdowncell %} diff --git a/utils/run_tests.sh b/utils/run_tests.sh deleted file mode 100755 index 86813a64..00000000 --- a/utils/run_tests.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -py.test -v From a452a386eb0c48b6b20caf9351303ad756c33d69 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Tue, 23 Jun 2020 14:03:01 +1000 Subject: [PATCH 46/80] Cleaning --- UWGeodynamics/TODO | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 UWGeodynamics/TODO diff --git a/UWGeodynamics/TODO b/UWGeodynamics/TODO deleted file mode 100644 index d462a8c3..00000000 --- a/UWGeodynamics/TODO +++ /dev/null @@ -1,5 +0,0 @@ -viscous Heating -adibatic Heating -add a bunch of default materials (same as LMR) -classify rheologies per material. -Add temperature dependent viscosity Kametsky From e1047ca7370a90f7b6af16bf9375eaaef4a0af9c Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 24 Jun 2020 16:06:05 +1000 Subject: [PATCH 47/80] Add scaling decorator --- UWGeodynamics/scaling/_scaling.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/UWGeodynamics/scaling/_scaling.py b/UWGeodynamics/scaling/_scaling.py index a2d39a5b..7c0a738c 100644 --- a/UWGeodynamics/scaling/_scaling.py +++ b/UWGeodynamics/scaling/_scaling.py @@ -190,3 +190,20 @@ def check(length, time, mass, temperature, substance): else: return (value * factor).to(units) + +def ndargs(f): + + def convert(obj): + if isinstance(obj, (list, tuple)): + return type(obj)([convert(val) for val in obj]) + else: + return non_dimensionalise(obj) + + def new_f(*args, **kwargs): + nd_args = [convert(arg) for arg in args] + nd_kwargs = {name:convert(val) for name, val in kwargs.items()} + print(nd_args) + print(nd_kwargs) + return f(*nd_args, **nd_kwargs) + new_f.__name__ = f.__name__ + return new_f From 863b5cc48d2ea2b6ac14c40981a6d26b55a9f92a Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Fri, 26 Jun 2020 03:17:10 +0000 Subject: [PATCH 48/80] UWGEO-21 Fix yielding function when elasticity is used. #173 --- UWGeodynamics/_model.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/UWGeodynamics/_model.py b/UWGeodynamics/_model.py index b9952db8..1d3e0704 100644 --- a/UWGeodynamics/_model.py +++ b/UWGeodynamics/_model.py @@ -2074,12 +2074,16 @@ def get_effective_eta(self, averaging_scheme): @property def _isYielding(self): - Model = self.Model - yield_condition = [(self.eff_eta < self.viscous_eta, - Model.strainRate_2ndInvariant), - (True, 0.0)] + if self.elastic_eta is not None: + yield_condition = [(self.eff_eta < self.elastic_eta, + Model.strainRate_2ndInvariant), + (True, 0.0)] + else: + yield_condition = [(self.eff_eta < self.viscous_eta, + Model.strainRate_2ndInvariant), + (True, 0.0)] return fn.branching.conditional(yield_condition) From 1247d7eb1d1d7be7bdcfb16dd1a0d7c0ba6f2c28 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Tue, 23 Jun 2020 05:08:07 +0000 Subject: [PATCH 49/80] cleaning --- CHANGELOG.txt => CHANGELOG.md | 6 ++++ .../LecodeIsostasy/LecodeIsostasy.py | 5 --- UWGeodynamics/__init__.py | 4 +-- UWGeodynamics/_model.py | 36 ++++++++++--------- UWGeodynamics/shapes.py | 13 ++----- tutorials/Tutorial_2_Melt.ipynb | 27 +++++++------- 6 files changed, 45 insertions(+), 46 deletions(-) rename CHANGELOG.txt => CHANGELOG.md (87%) diff --git a/CHANGELOG.txt b/CHANGELOG.md similarity index 87% rename from CHANGELOG.txt rename to CHANGELOG.md index ab5f943f..d356ec9a 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# Version 2.10 + + +- Layer2D which has now been deprecated for a while has been removed + + # Version 2.9 ### User related changes: diff --git a/UWGeodynamics/LecodeIsostasy/LecodeIsostasy.py b/UWGeodynamics/LecodeIsostasy/LecodeIsostasy.py index 23a17450..e63caf91 100644 --- a/UWGeodynamics/LecodeIsostasy/LecodeIsostasy.py +++ b/UWGeodynamics/LecodeIsostasy/LecodeIsostasy.py @@ -44,11 +44,6 @@ def __init__(self, reference_mat=None, average=False, self.velocityField = None self._densityFn = None self.materialIndexField = None - - if not isinstance(reference_mat, Material): - raise ValueError("""reference_mat must be a Material, index of - Material has been deprecated""") - self.reference_mat = reference_mat self.average = average self.surface = surface diff --git a/UWGeodynamics/__init__.py b/UWGeodynamics/__init__.py index 283ca296..881e47c6 100644 --- a/UWGeodynamics/__init__.py +++ b/UWGeodynamics/__init__.py @@ -363,8 +363,8 @@ def uwgeodynamics_fname(): _deprecated_ignore_map = { } -_deprecated_abort = {"solver": "Model.solver.set_inner_method()", - "penalty": "Model.solver.set_penalty()"} +_deprecated_abort = { +} _obsolete_set = set() _all_deprecated = set(chain(_deprecated_ignore_map, diff --git a/UWGeodynamics/_model.py b/UWGeodynamics/_model.py index 1d3e0704..6ed12359 100644 --- a/UWGeodynamics/_model.py +++ b/UWGeodynamics/_model.py @@ -1769,7 +1769,7 @@ def mesh_advector(self, axis): """ self._advector = Mesh_advector(self, axis) - def add_passive_tracers(self, name, vertices=None, + def add_passive_tracers(self, name, vertices, particleEscape=True, centroids=None, advect=True): """ Add a swarm of passive tracers to the Model @@ -1779,7 +1779,7 @@ def add_passive_tracers(self, name, vertices=None, name : Name of the swarm of tracers. vertices : - Numpy array that contains the coordinates of the tracers. + nD Numpy array that contains the coordinates of the tracers. particleEscape : (bool) Allow or prevent tracers from escaping the boundaries of the Model (default to True) @@ -1795,10 +1795,13 @@ def add_passive_tracers(self, name, vertices=None, >>> u = GEO.u >>> Model = GEO.Model() - >>> x = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), 1000) - >>> y = 32. * u.kilometre - >>> tracers = Model.add_passive_tracers(vertices=[x,y]) - + >>> npoints = 1000 + >>> x = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), npoints) + >>> y = GEO.nd(32. * u.kilometre) + >>> coords = np.ndarray((npoints, 2)) + >>> coords[:, 0] = x + >>> coords[:, 1] = y + >>> tracers = Model.add_passive_tracers(vertices=coords) You can pass a list of centroids to the Model.add_passive_tracers method. In that case, the coordinates of the passive tracers are relative @@ -1813,34 +1816,33 @@ def add_passive_tracers(self, name, vertices=None, >>> cxpos = np.linspace(GEO.nd(20*u.kilometer), GEO.nd(40*u.kilometer), 5) >>> cypos = np.linspace(GEO.nd(20*u.kilometer), GEO.nd(40*u.kilometer), 5) >>> cxpos, cypos = np.meshgrid(cxpos, cypos) - >>> tracers = Model.add_passive_tracers(vertices=[0,0], - ... centroids=[cxpos.ravel(), - ... cypos.ravel()) + + >>> coords = np.ndarray((cxpos.size, 2)) + >>> coords[:, 0] = cxpos.ravel() + >>> coords[:, 1] = cypos.ravel() + >>> tracers = Model.add_passive_tracers(vertices=np.array([[0,0]]), + ... centroids=coords) We provide a function to create circles on a grid: >>> import UWGeodynamics as GEO - >>> x_c, y_c = GEO.circles_grid(radius = 2.0 * u.kilometer, + >>> pts = GEO.circles_grid(radius = 2.0 * u.kilometer, ... minCoord=[Model.minCoord[0], lowercrust.bottom], ... maxCoord=[Model.maxCoord[0], 0.*u.kilometer]) """ - if centroids and not isinstance(centroids, list): - centroids = list(centroids) - - if not centroids: - + if centroids is None: tracers = PassiveTracers(self.mesh, name=name, particleEscape=particleEscape) tracers.add_particles_with_coordinates(vertices) else: - x = np.array(vertices[:, 0])[..., np.newaxis] + np.array(centroids[0]).ravel() - y = np.array(vertices[:, 1])[..., np.newaxis] + np.array(centroids[1]).ravel() + x = np.array(vertices[:, 0])[..., np.newaxis] + np.array(centroids[:, 0]).ravel() + y = np.array(vertices[:, 1])[..., np.newaxis] + np.array(centroids[:, 1]).ravel() x = x.ravel() y = y.ravel() diff --git a/UWGeodynamics/shapes.py b/UWGeodynamics/shapes.py index 890231fc..7fc8921b 100644 --- a/UWGeodynamics/shapes.py +++ b/UWGeodynamics/shapes.py @@ -86,7 +86,7 @@ def __init__(self, normal, origin=None, reverse=False): self._fncself = self._fn._fncself -class Layer(fn.Function): +class Layer2D(fn.Function): """Layer 2D""" def __init__(self, top, bottom): @@ -109,9 +109,10 @@ def __init__(self, top, bottom): coord = fn.input() self._fn = ((coord[1] <= nd(self.top)) & (coord[1] >= nd(self.bottom))) - super(Layer, self).__init__(argument_fns=None) + super(Layer2D, self).__init__(argument_fns=None) self._fncself = self._fn._fncself +Layer = Layer2D class Layer3D(fn.Function): """Layer3D""" @@ -140,14 +141,6 @@ def __init__(self, top, bottom): self._fncself = self._fn._fncself -class Layer2D(Layer): - - def __init__(self, top, bottom): - - Warning("Layer2D is now deprecated, use Layer instead") - super(Layer2D, self).__init__(top, bottom) - - class Box(fn.Function): """Box""" diff --git a/tutorials/Tutorial_2_Melt.ipynb b/tutorials/Tutorial_2_Melt.ipynb index 68902d89..f3d72a77 100644 --- a/tutorials/Tutorial_2_Melt.ipynb +++ b/tutorials/Tutorial_2_Melt.ipynb @@ -33,7 +33,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /opt/venv/lib/python3.7/site-packages/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -323,7 +323,7 @@ " ViscosityWet Olivine, Viscous Dislocation Creep, Goetze et al., 1978" ], "text/plain": [ - "" + "" ] }, "execution_count": 14, @@ -356,7 +356,7 @@ " ViscosityWet Dunite, Viscous Dislocation Creep, Brace and Kohlstedt, 1980" ], "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -389,7 +389,7 @@ " ViscosityWet Olivine, Viscous Dislocation Creep, Goetze et al., 1978" ], "text/plain": [ - "" + "" ] }, "execution_count": 16, @@ -509,7 +509,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -529,7 +529,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -556,7 +556,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 22, @@ -632,15 +632,18 @@ "cypos = np.linspace(GEO.nd(-40*u.kilometer), GEO.nd(-10*u.kilometer),5)\n", "\n", "cxpos, cypos = np.meshgrid(cxpos, cypos)\n", + "centroid_coords = np.ndarray((len(cxpos.ravel()), 2))\n", + "centroid_coords[:, 0] = cxpos.ravel()\n", + "centroid_coords[:, 1] = cypos.ravel()\n", "\n", "point = np.zeros((1, 2))\n", "\n", - "Lag_Grid = Model.add_passive_tracers(name=\"Lag_grid\", vertices=point, centroids=[cxpos.ravel(), cypos.ravel()])" + "Lag_Grid = Model.add_passive_tracers(name=\"Lag_grid\", vertices=point, centroids=centroid_coords)" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 26, "metadata": { "scrolled": true, "tags": [ @@ -673,16 +676,16 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 30, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } From 123f247cffc107cd663e166771dbea976e9dfc0d Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Tue, 23 Jun 2020 05:27:31 +0000 Subject: [PATCH 50/80] cleaning --- .readthedocs.yml | 4 +- MANIFEST.in | 5 -- README.md | 6 +-- .../1_12_Slab_Detachment_Benchmark.ipynb | 0 .../benchmarks}/1_22_Indentor_Benchmark.ipynb | 0 .../2D_Self_Subduction_Case1.ipynb | 0 .../2D_Self_Subduction_Case2.ipynb | 0 .../Kaus_BrickBenchmark-Compression.ipynb | 0 .../Kaus_BrickBenchmark_Extension.ipynb | 0 .../examples}/1_01_Steady_State_Heat.ipynb | 0 .../examples}/1_02_Convection_Example.ipynb | 0 .../examples}/1_03_BlankenbachBenchmark.ipynb | 0 .../examples}/1_05_StokesSinker.ipynb | 0 .../examples}/1_06_HypnicJerk.ipynb | 0 .../examples}/1_07_SlabSubduction.ipynb | 0 .../1_08_ViscoElasticHalfSpace.ipynb | 0 .../examples}/1_09_ViscoElasticShear.ipynb | 0 ...iscoelastoplasticity-in-simple-shear.ipynb | 0 .../examples}/1_11_StokesSinker3D.ipynb | 0 .../1_20_ColumnsTractionBottom.ipynb | 0 .../1_21_3D_ColumnsTractionBottom.ipynb | 0 .../1_23_FreeSurface_Simple_Example.ipynb | 0 .../examples}/1_24_Define_3D_volumes.ipynb | 0 .../examples}/1_25_Hot_Canon_Ball.ipynb | 0 ...mericalSandboxCompression-MovingWall.ipynb | 0 .../1_27_ColumnPureThermalAdvection.ipynb | 0 .../1_30_Poiseuille_Under_Pressure.ipynb | 0 ..._geotherm_and_TP_dependent_densities.ipynb | 0 .../1_32_Passive_Tracers_tests.ipynb | 0 .../examples}/2_09_ShearBandsPureShear.ipynb | 0 ...Rayleigh-Taylor_van_Keken_et_al_1997.ipynb | 0 .../examples}/images/3D_hafspaces.png | Bin .../img => examples/images}/3D_layer.png | Bin .../examples}/images/CompressionSetUp.png | Bin .../examples}/images/Extension.png | Bin .../examples}/images/ExtensionA.png | Bin .../examples}/images/ExtensionB.png | Bin .../examples}/images/HotCanonFig.png | Bin .../examples}/images/HypnicJerk.gif | Bin .../examples}/images/MovingWall.gif | Bin .../examples}/images/SlabDetachment.png | Bin .../examples}/images/Stokes2D.gif | Bin .../examples}/images/vanKekken.gif | Bin .../nci_gadi}/install_on_gadi.sh | 0 {nci_gadi => docs/nci_gadi}/script.pbs | 0 docs/{ => readthedocs}/Makefile | 4 +- docs/{ => readthedocs}/make.bat | 0 docs/{ => readthedocs}/requirements.txt | 0 .../src}/Benchmarks.rst | 12 ++--- docs/{source => readthedocs/src}/Examples.rst | 30 ++++++------ .../src}/Installation.rst | 4 +- .../src}/Troubleshoot.rst | 0 .../{source => readthedocs/src}/Tutorials.rst | 36 +++++++------- .../{source => readthedocs/src}/UserGuide.rst | 6 ++- docs/{source => readthedocs/src}/conf.py | 0 .../src}/img/2D_polygon.png | Bin .../src}/img/3D_halfspaces.png | Bin .../src}/img/3D_halfspaces2.png | Bin .../readthedocs/src/img}/3D_layer.png | Bin .../src}/img/Design.svg | 0 .../src}/img/Material1.png | Bin .../src}/img/MaterialRegistry.gif | Bin .../src}/img/PlasticityRegistry.gif | Bin .../src}/img/SandboxCompression.gif | Bin .../src}/img/Tutorial1.gif | Bin .../src}/img/Tutorial11.gif | Bin .../src}/img/Tutorial4.png | Bin .../src}/img/Tutorial_9.gif | Bin .../src}/img/ViscousCreepRegistry.gif | Bin .../src}/img/annulus.png | Bin docs/{source => readthedocs/src}/img/box.png | Bin .../src}/img/collision_wedge.gif | Bin .../src}/img/density.png | Bin docs/{source => readthedocs/src}/img/disk.png | Bin docs/{source => readthedocs/src}/img/gif1.gif | Bin .../src}/img/kitematic.gif | Bin .../src}/img/layers.png | Bin .../{source => readthedocs/src}/img/logos.png | Bin .../src}/img/mechanicalBCs1.png | Bin .../src}/img/mechanicalBCs2.png | Bin .../src}/img/multiple_materials.png | Bin .../src}/img/multishape-1.png | Bin .../src}/img/multishape.png | Bin .../src}/img/polygon.png | Bin .../src}/img/tabtab.gif | Bin .../src}/img/thermalBCs1.png | Bin .../src}/img/thermalBCs2.png | Bin .../src}/img/underworld.png | Bin docs/{source => readthedocs/src}/index.rst | 0 {tutorials => docs/tutorials}/.gitignore | 0 .../Tutorial_10_Thrust_Wedges.ipynb | 0 .../Tutorial_11_Coupling_with_Badlands.ipynb | 0 .../Tutorial_1_ThermoMechanical_Model.ipynb | 0 .../tutorials}/Tutorial_2_Melt.ipynb | 0 ...rial_3B_SandboxExtension_deform_mesh.ipynb | 0 ...orial_3_SandboxExtension_static_mesh.ipynb | 0 ...torial_4_NumericalSandboxCompression.ipynb | 0 .../Tutorial_5_Convergence_Model.ipynb | 0 .../Tutorial_6_Simple_Surface_Processes.ipynb | 0 .../Tutorial_7_3D_Lithospheric_Model.ipynb | 0 .../Tutorial_8_Subduction_ViscoElastic.ipynb | 0 .../Tutorial_9_passive_margins.ipynb | 0 .../tutorials}/images/CompressionA.png | Bin .../tutorials}/images/CompressionB.png | Bin .../tutorials}/images/CompressionSetUp.png | Bin .../tutorials}/images/Extension.png | Bin .../tutorials}/images/ExtensionA.png | Bin .../tutorials}/images/ExtensionB.png | Bin .../tutorials}/images/LAnson2018.png | Bin .../tutorials}/images/Rey_et_al2009.png | Bin .../tutorials}/images/Tutorial1.gif | Bin .../tutorials}/images/Tutorial11.gif | Bin .../tutorials}/images/Tutorial4.png | Bin .../tutorials}/images/Tutorial_10.gif | Bin .../tutorials}/images/Tutorial_10_bcs.png | Bin .../tutorials}/images/Tutorial_9.gif | Bin .../tutorials}/images/underworld.png | Bin .../tutorials}/ressources/badlands.xml | 0 tests/test_benchmarks.py | 12 ++--- tests/test_examples.py | 44 +++++++++--------- tests/test_tutorials.py | 44 +++++++++--------- 121 files changed, 102 insertions(+), 105 deletions(-) rename {benchmarks => docs/benchmarks}/1_12_Slab_Detachment_Benchmark.ipynb (100%) rename {benchmarks => docs/benchmarks}/1_22_Indentor_Benchmark.ipynb (100%) rename {benchmarks => docs/benchmarks}/2D_Self_Subduction_Case1.ipynb (100%) rename {benchmarks => docs/benchmarks}/2D_Self_Subduction_Case2.ipynb (100%) rename {benchmarks => docs/benchmarks}/Kaus_BrickBenchmark-Compression.ipynb (100%) rename {benchmarks => docs/benchmarks}/Kaus_BrickBenchmark_Extension.ipynb (100%) rename {examples => docs/examples}/1_01_Steady_State_Heat.ipynb (100%) rename {examples => docs/examples}/1_02_Convection_Example.ipynb (100%) rename {examples => docs/examples}/1_03_BlankenbachBenchmark.ipynb (100%) rename {examples => docs/examples}/1_05_StokesSinker.ipynb (100%) rename {examples => docs/examples}/1_06_HypnicJerk.ipynb (100%) rename {examples => docs/examples}/1_07_SlabSubduction.ipynb (100%) rename {examples => docs/examples}/1_08_ViscoElasticHalfSpace.ipynb (100%) rename {examples => docs/examples}/1_09_ViscoElasticShear.ipynb (100%) rename {examples => docs/examples}/1_10_Viscoelastoplasticity-in-simple-shear.ipynb (100%) rename {examples => docs/examples}/1_11_StokesSinker3D.ipynb (100%) rename {examples => docs/examples}/1_20_ColumnsTractionBottom.ipynb (100%) rename {examples => docs/examples}/1_21_3D_ColumnsTractionBottom.ipynb (100%) rename {examples => docs/examples}/1_23_FreeSurface_Simple_Example.ipynb (100%) rename {examples => docs/examples}/1_24_Define_3D_volumes.ipynb (100%) rename {examples => docs/examples}/1_25_Hot_Canon_Ball.ipynb (100%) rename {examples => docs/examples}/1_26_NumericalSandboxCompression-MovingWall.ipynb (100%) rename {examples => docs/examples}/1_27_ColumnPureThermalAdvection.ipynb (100%) rename {examples => docs/examples}/1_30_Poiseuille_Under_Pressure.ipynb (100%) rename {examples => docs/examples}/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb (100%) rename {examples => docs/examples}/1_32_Passive_Tracers_tests.ipynb (100%) rename {examples => docs/examples}/2_09_ShearBandsPureShear.ipynb (100%) rename {examples => docs/examples}/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb (100%) rename {examples => docs/examples}/images/3D_hafspaces.png (100%) rename docs/{source/img => examples/images}/3D_layer.png (100%) rename {examples => docs/examples}/images/CompressionSetUp.png (100%) rename {examples => docs/examples}/images/Extension.png (100%) rename {examples => docs/examples}/images/ExtensionA.png (100%) rename {examples => docs/examples}/images/ExtensionB.png (100%) rename {examples => docs/examples}/images/HotCanonFig.png (100%) rename {examples => docs/examples}/images/HypnicJerk.gif (100%) rename {examples => docs/examples}/images/MovingWall.gif (100%) rename {examples => docs/examples}/images/SlabDetachment.png (100%) rename {examples => docs/examples}/images/Stokes2D.gif (100%) rename {examples => docs/examples}/images/vanKekken.gif (100%) rename {nci_gadi => docs/nci_gadi}/install_on_gadi.sh (100%) rename {nci_gadi => docs/nci_gadi}/script.pbs (100%) rename docs/{ => readthedocs}/Makefile (95%) rename docs/{ => readthedocs}/make.bat (100%) rename docs/{ => readthedocs}/requirements.txt (100%) rename docs/{source => readthedocs/src}/Benchmarks.rst (59%) rename docs/{source => readthedocs/src}/Examples.rst (57%) rename docs/{source => readthedocs/src}/Installation.rst (97%) rename docs/{source => readthedocs/src}/Troubleshoot.rst (100%) rename docs/{source => readthedocs/src}/Tutorials.rst (58%) rename docs/{source => readthedocs/src}/UserGuide.rst (99%) rename docs/{source => readthedocs/src}/conf.py (100%) rename docs/{source => readthedocs/src}/img/2D_polygon.png (100%) rename docs/{source => readthedocs/src}/img/3D_halfspaces.png (100%) rename docs/{source => readthedocs/src}/img/3D_halfspaces2.png (100%) rename {examples/images => docs/readthedocs/src/img}/3D_layer.png (100%) rename docs/{source => readthedocs/src}/img/Design.svg (100%) rename docs/{source => readthedocs/src}/img/Material1.png (100%) rename docs/{source => readthedocs/src}/img/MaterialRegistry.gif (100%) rename docs/{source => readthedocs/src}/img/PlasticityRegistry.gif (100%) rename docs/{source => readthedocs/src}/img/SandboxCompression.gif (100%) rename docs/{source => readthedocs/src}/img/Tutorial1.gif (100%) rename docs/{source => readthedocs/src}/img/Tutorial11.gif (100%) rename docs/{source => readthedocs/src}/img/Tutorial4.png (100%) rename docs/{source => readthedocs/src}/img/Tutorial_9.gif (100%) rename docs/{source => readthedocs/src}/img/ViscousCreepRegistry.gif (100%) rename docs/{source => readthedocs/src}/img/annulus.png (100%) rename docs/{source => readthedocs/src}/img/box.png (100%) rename docs/{source => readthedocs/src}/img/collision_wedge.gif (100%) rename docs/{source => readthedocs/src}/img/density.png (100%) rename docs/{source => readthedocs/src}/img/disk.png (100%) rename docs/{source => readthedocs/src}/img/gif1.gif (100%) rename docs/{source => readthedocs/src}/img/kitematic.gif (100%) rename docs/{source => readthedocs/src}/img/layers.png (100%) rename docs/{source => readthedocs/src}/img/logos.png (100%) rename docs/{source => readthedocs/src}/img/mechanicalBCs1.png (100%) rename docs/{source => readthedocs/src}/img/mechanicalBCs2.png (100%) rename docs/{source => readthedocs/src}/img/multiple_materials.png (100%) rename docs/{source => readthedocs/src}/img/multishape-1.png (100%) rename docs/{source => readthedocs/src}/img/multishape.png (100%) rename docs/{source => readthedocs/src}/img/polygon.png (100%) rename docs/{source => readthedocs/src}/img/tabtab.gif (100%) rename docs/{source => readthedocs/src}/img/thermalBCs1.png (100%) rename docs/{source => readthedocs/src}/img/thermalBCs2.png (100%) rename docs/{source => readthedocs/src}/img/underworld.png (100%) rename docs/{source => readthedocs/src}/index.rst (100%) rename {tutorials => docs/tutorials}/.gitignore (100%) rename {tutorials => docs/tutorials}/Tutorial_10_Thrust_Wedges.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_11_Coupling_with_Badlands.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_1_ThermoMechanical_Model.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_2_Melt.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_3B_SandboxExtension_deform_mesh.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_3_SandboxExtension_static_mesh.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_4_NumericalSandboxCompression.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_5_Convergence_Model.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_6_Simple_Surface_Processes.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_7_3D_Lithospheric_Model.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_8_Subduction_ViscoElastic.ipynb (100%) rename {tutorials => docs/tutorials}/Tutorial_9_passive_margins.ipynb (100%) rename {tutorials => docs/tutorials}/images/CompressionA.png (100%) rename {tutorials => docs/tutorials}/images/CompressionB.png (100%) rename {tutorials => docs/tutorials}/images/CompressionSetUp.png (100%) rename {tutorials => docs/tutorials}/images/Extension.png (100%) rename {tutorials => docs/tutorials}/images/ExtensionA.png (100%) rename {tutorials => docs/tutorials}/images/ExtensionB.png (100%) rename {tutorials => docs/tutorials}/images/LAnson2018.png (100%) rename {tutorials => docs/tutorials}/images/Rey_et_al2009.png (100%) rename {tutorials => docs/tutorials}/images/Tutorial1.gif (100%) rename {tutorials => docs/tutorials}/images/Tutorial11.gif (100%) rename {tutorials => docs/tutorials}/images/Tutorial4.png (100%) rename {tutorials => docs/tutorials}/images/Tutorial_10.gif (100%) rename {tutorials => docs/tutorials}/images/Tutorial_10_bcs.png (100%) rename {tutorials => docs/tutorials}/images/Tutorial_9.gif (100%) rename {tutorials => docs/tutorials}/images/underworld.png (100%) rename {tutorials => docs/tutorials}/ressources/badlands.xml (100%) diff --git a/.readthedocs.yml b/.readthedocs.yml index 55036d42..374626f7 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -7,7 +7,7 @@ version: 2 # Build documentation in the docs/ directory with Sphinx sphinx: - configuration: docs/source/conf.py + configuration: docs/readthedocs/source/conf.py # Optionally build your docs in additional formats such as PDF formats: @@ -17,4 +17,4 @@ formats: python: version: 3.7 install: - - requirements: docs/requirements.txt \ No newline at end of file + - requirements: docs/readthedocs/requirements.txt diff --git a/MANIFEST.in b/MANIFEST.in index 6802612a..9d70e494 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -6,8 +6,3 @@ recursive-include UWGeodynamics/ressources *.json recursive-include UWGeodynamics/uwgeo-data * prune docs -prune manual -prune examples -prune tutorials -prune docker -prune docker-dev diff --git a/README.md b/README.md index 135fc4ee..a1deb217 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/source/img/logos.png)](https://www.earthbyte.org/the-basin-genesis-hub) +[![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/readthedocs/src/img/logos.png)](https://www.earthbyte.org/the-basin-genesis-hub) # Underworld Geodynamics project @@ -10,7 +10,7 @@ ![tests](https://github.com/underworldcode/UWGeodynamics/workflows/tests/badge.svg) ![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/tutorials/images/Tutorial1.gif) -![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/source/img/collision_wedge.gif) +![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/readthedocs/src/img/collision_wedge.gif) The UWGeodynamics module facilitates prototyping of geodynamics models using Underworld. It can be seen as a set of high-level functions within @@ -38,7 +38,7 @@ We hope that the user will naturally move to the low-level functionalities as he or her gets more confident, and by doing so will access the wide range of possibilities offered by Underworld. -![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/source/img/SandboxCompression.gif) +![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/readthedocs/src/img/SandboxCompression.gif) ## UWGeodynamics and Underworld diff --git a/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb b/docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb similarity index 100% rename from benchmarks/1_12_Slab_Detachment_Benchmark.ipynb rename to docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb diff --git a/benchmarks/1_22_Indentor_Benchmark.ipynb b/docs/benchmarks/1_22_Indentor_Benchmark.ipynb similarity index 100% rename from benchmarks/1_22_Indentor_Benchmark.ipynb rename to docs/benchmarks/1_22_Indentor_Benchmark.ipynb diff --git a/benchmarks/2D_Self_Subduction_Case1.ipynb b/docs/benchmarks/2D_Self_Subduction_Case1.ipynb similarity index 100% rename from benchmarks/2D_Self_Subduction_Case1.ipynb rename to docs/benchmarks/2D_Self_Subduction_Case1.ipynb diff --git a/benchmarks/2D_Self_Subduction_Case2.ipynb b/docs/benchmarks/2D_Self_Subduction_Case2.ipynb similarity index 100% rename from benchmarks/2D_Self_Subduction_Case2.ipynb rename to docs/benchmarks/2D_Self_Subduction_Case2.ipynb diff --git a/benchmarks/Kaus_BrickBenchmark-Compression.ipynb b/docs/benchmarks/Kaus_BrickBenchmark-Compression.ipynb similarity index 100% rename from benchmarks/Kaus_BrickBenchmark-Compression.ipynb rename to docs/benchmarks/Kaus_BrickBenchmark-Compression.ipynb diff --git a/benchmarks/Kaus_BrickBenchmark_Extension.ipynb b/docs/benchmarks/Kaus_BrickBenchmark_Extension.ipynb similarity index 100% rename from benchmarks/Kaus_BrickBenchmark_Extension.ipynb rename to docs/benchmarks/Kaus_BrickBenchmark_Extension.ipynb diff --git a/examples/1_01_Steady_State_Heat.ipynb b/docs/examples/1_01_Steady_State_Heat.ipynb similarity index 100% rename from examples/1_01_Steady_State_Heat.ipynb rename to docs/examples/1_01_Steady_State_Heat.ipynb diff --git a/examples/1_02_Convection_Example.ipynb b/docs/examples/1_02_Convection_Example.ipynb similarity index 100% rename from examples/1_02_Convection_Example.ipynb rename to docs/examples/1_02_Convection_Example.ipynb diff --git a/examples/1_03_BlankenbachBenchmark.ipynb b/docs/examples/1_03_BlankenbachBenchmark.ipynb similarity index 100% rename from examples/1_03_BlankenbachBenchmark.ipynb rename to docs/examples/1_03_BlankenbachBenchmark.ipynb diff --git a/examples/1_05_StokesSinker.ipynb b/docs/examples/1_05_StokesSinker.ipynb similarity index 100% rename from examples/1_05_StokesSinker.ipynb rename to docs/examples/1_05_StokesSinker.ipynb diff --git a/examples/1_06_HypnicJerk.ipynb b/docs/examples/1_06_HypnicJerk.ipynb similarity index 100% rename from examples/1_06_HypnicJerk.ipynb rename to docs/examples/1_06_HypnicJerk.ipynb diff --git a/examples/1_07_SlabSubduction.ipynb b/docs/examples/1_07_SlabSubduction.ipynb similarity index 100% rename from examples/1_07_SlabSubduction.ipynb rename to docs/examples/1_07_SlabSubduction.ipynb diff --git a/examples/1_08_ViscoElasticHalfSpace.ipynb b/docs/examples/1_08_ViscoElasticHalfSpace.ipynb similarity index 100% rename from examples/1_08_ViscoElasticHalfSpace.ipynb rename to docs/examples/1_08_ViscoElasticHalfSpace.ipynb diff --git a/examples/1_09_ViscoElasticShear.ipynb b/docs/examples/1_09_ViscoElasticShear.ipynb similarity index 100% rename from examples/1_09_ViscoElasticShear.ipynb rename to docs/examples/1_09_ViscoElasticShear.ipynb diff --git a/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb b/docs/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb similarity index 100% rename from examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb rename to docs/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb diff --git a/examples/1_11_StokesSinker3D.ipynb b/docs/examples/1_11_StokesSinker3D.ipynb similarity index 100% rename from examples/1_11_StokesSinker3D.ipynb rename to docs/examples/1_11_StokesSinker3D.ipynb diff --git a/examples/1_20_ColumnsTractionBottom.ipynb b/docs/examples/1_20_ColumnsTractionBottom.ipynb similarity index 100% rename from examples/1_20_ColumnsTractionBottom.ipynb rename to docs/examples/1_20_ColumnsTractionBottom.ipynb diff --git a/examples/1_21_3D_ColumnsTractionBottom.ipynb b/docs/examples/1_21_3D_ColumnsTractionBottom.ipynb similarity index 100% rename from examples/1_21_3D_ColumnsTractionBottom.ipynb rename to docs/examples/1_21_3D_ColumnsTractionBottom.ipynb diff --git a/examples/1_23_FreeSurface_Simple_Example.ipynb b/docs/examples/1_23_FreeSurface_Simple_Example.ipynb similarity index 100% rename from examples/1_23_FreeSurface_Simple_Example.ipynb rename to docs/examples/1_23_FreeSurface_Simple_Example.ipynb diff --git a/examples/1_24_Define_3D_volumes.ipynb b/docs/examples/1_24_Define_3D_volumes.ipynb similarity index 100% rename from examples/1_24_Define_3D_volumes.ipynb rename to docs/examples/1_24_Define_3D_volumes.ipynb diff --git a/examples/1_25_Hot_Canon_Ball.ipynb b/docs/examples/1_25_Hot_Canon_Ball.ipynb similarity index 100% rename from examples/1_25_Hot_Canon_Ball.ipynb rename to docs/examples/1_25_Hot_Canon_Ball.ipynb diff --git a/examples/1_26_NumericalSandboxCompression-MovingWall.ipynb b/docs/examples/1_26_NumericalSandboxCompression-MovingWall.ipynb similarity index 100% rename from examples/1_26_NumericalSandboxCompression-MovingWall.ipynb rename to docs/examples/1_26_NumericalSandboxCompression-MovingWall.ipynb diff --git a/examples/1_27_ColumnPureThermalAdvection.ipynb b/docs/examples/1_27_ColumnPureThermalAdvection.ipynb similarity index 100% rename from examples/1_27_ColumnPureThermalAdvection.ipynb rename to docs/examples/1_27_ColumnPureThermalAdvection.ipynb diff --git a/examples/1_30_Poiseuille_Under_Pressure.ipynb b/docs/examples/1_30_Poiseuille_Under_Pressure.ipynb similarity index 100% rename from examples/1_30_Poiseuille_Under_Pressure.ipynb rename to docs/examples/1_30_Poiseuille_Under_Pressure.ipynb diff --git a/examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb b/docs/examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb similarity index 100% rename from examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb rename to docs/examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb diff --git a/examples/1_32_Passive_Tracers_tests.ipynb b/docs/examples/1_32_Passive_Tracers_tests.ipynb similarity index 100% rename from examples/1_32_Passive_Tracers_tests.ipynb rename to docs/examples/1_32_Passive_Tracers_tests.ipynb diff --git a/examples/2_09_ShearBandsPureShear.ipynb b/docs/examples/2_09_ShearBandsPureShear.ipynb similarity index 100% rename from examples/2_09_ShearBandsPureShear.ipynb rename to docs/examples/2_09_ShearBandsPureShear.ipynb diff --git a/examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb b/docs/examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb similarity index 100% rename from examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb rename to docs/examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb diff --git a/examples/images/3D_hafspaces.png b/docs/examples/images/3D_hafspaces.png similarity index 100% rename from examples/images/3D_hafspaces.png rename to docs/examples/images/3D_hafspaces.png diff --git a/docs/source/img/3D_layer.png b/docs/examples/images/3D_layer.png similarity index 100% rename from docs/source/img/3D_layer.png rename to docs/examples/images/3D_layer.png diff --git a/examples/images/CompressionSetUp.png b/docs/examples/images/CompressionSetUp.png similarity index 100% rename from examples/images/CompressionSetUp.png rename to docs/examples/images/CompressionSetUp.png diff --git a/examples/images/Extension.png b/docs/examples/images/Extension.png similarity index 100% rename from examples/images/Extension.png rename to docs/examples/images/Extension.png diff --git a/examples/images/ExtensionA.png b/docs/examples/images/ExtensionA.png similarity index 100% rename from examples/images/ExtensionA.png rename to docs/examples/images/ExtensionA.png diff --git a/examples/images/ExtensionB.png b/docs/examples/images/ExtensionB.png similarity index 100% rename from examples/images/ExtensionB.png rename to docs/examples/images/ExtensionB.png diff --git a/examples/images/HotCanonFig.png b/docs/examples/images/HotCanonFig.png similarity index 100% rename from examples/images/HotCanonFig.png rename to docs/examples/images/HotCanonFig.png diff --git a/examples/images/HypnicJerk.gif b/docs/examples/images/HypnicJerk.gif similarity index 100% rename from examples/images/HypnicJerk.gif rename to docs/examples/images/HypnicJerk.gif diff --git a/examples/images/MovingWall.gif b/docs/examples/images/MovingWall.gif similarity index 100% rename from examples/images/MovingWall.gif rename to docs/examples/images/MovingWall.gif diff --git a/examples/images/SlabDetachment.png b/docs/examples/images/SlabDetachment.png similarity index 100% rename from examples/images/SlabDetachment.png rename to docs/examples/images/SlabDetachment.png diff --git a/examples/images/Stokes2D.gif b/docs/examples/images/Stokes2D.gif similarity index 100% rename from examples/images/Stokes2D.gif rename to docs/examples/images/Stokes2D.gif diff --git a/examples/images/vanKekken.gif b/docs/examples/images/vanKekken.gif similarity index 100% rename from examples/images/vanKekken.gif rename to docs/examples/images/vanKekken.gif diff --git a/nci_gadi/install_on_gadi.sh b/docs/nci_gadi/install_on_gadi.sh similarity index 100% rename from nci_gadi/install_on_gadi.sh rename to docs/nci_gadi/install_on_gadi.sh diff --git a/nci_gadi/script.pbs b/docs/nci_gadi/script.pbs similarity index 100% rename from nci_gadi/script.pbs rename to docs/nci_gadi/script.pbs diff --git a/docs/Makefile b/docs/readthedocs/Makefile similarity index 95% rename from docs/Makefile rename to docs/readthedocs/Makefile index 1cc291af..fa4d3fed 100644 --- a/docs/Makefile +++ b/docs/readthedocs/Makefile @@ -5,7 +5,7 @@ SPHINXOPTS = SPHINXBUILD = sphinx-build SPHINXPROJ = UWGeodynamics -SOURCEDIR = source +SOURCEDIR = src BUILDDIR = build # Put it first so that "make" without argument is like "make help". @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/make.bat b/docs/readthedocs/make.bat similarity index 100% rename from docs/make.bat rename to docs/readthedocs/make.bat diff --git a/docs/requirements.txt b/docs/readthedocs/requirements.txt similarity index 100% rename from docs/requirements.txt rename to docs/readthedocs/requirements.txt diff --git a/docs/source/Benchmarks.rst b/docs/readthedocs/src/Benchmarks.rst similarity index 59% rename from docs/source/Benchmarks.rst rename to docs/readthedocs/src/Benchmarks.rst index aa7c252d..042ff5a3 100644 --- a/docs/source/Benchmarks.rst +++ b/docs/readthedocs/src/Benchmarks.rst @@ -21,9 +21,9 @@ Averaging Viscosity Method 2. `Subduction Case 2`_ -.. _Indentor Benchmark: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/benchmarks/1_22_Indentor_Benchmark.ipynb -.. _Brick Benchmark in compression: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/benchmarks/Kaus_BrickBenchmark-Compression.ipynb -.. _Brick Benchmark in extension: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/benchmarks/Kaus_BrickBenchmark_Extension.ipynb -.. _Subduction Case 1: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/benchmarks/2D_Self_Subduction_Case1.ipynb -.. _Subduction Case 2: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/benchmarks/2D_Self_Subduction_Case2.ipynb -.. _Slab Detachment: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb +.. _Indentor Benchmark: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/benchmarks/1_22_Indentor_Benchmark.ipynb +.. _Brick Benchmark in compression: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/benchmarks/Kaus_BrickBenchmark-Compression.ipynb +.. _Brick Benchmark in extension: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/benchmarks/Kaus_BrickBenchmark_Extension.ipynb +.. _Subduction Case 1: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/benchmarks/2D_Self_Subduction_Case1.ipynb +.. _Subduction Case 2: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/benchmarks/2D_Self_Subduction_Case2.ipynb +.. _Slab Detachment: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb diff --git a/docs/source/Examples.rst b/docs/readthedocs/src/Examples.rst similarity index 57% rename from docs/source/Examples.rst rename to docs/readthedocs/src/Examples.rst index a1e3b639..cc62f44e 100644 --- a/docs/source/Examples.rst +++ b/docs/readthedocs/src/Examples.rst @@ -22,18 +22,18 @@ available in **UWGeodynamics**. 15. `Hot Canon Ball`_ (Internal boundary condition) -.. _Steady State heat: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_01_Steady_State_Heat.ipynb -.. _Convection: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_02_Convection_Example.ipynb -.. _Blankenbach Benchmark: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_03_BlankenbachBenchmark.ipynb -.. _Stokes sinker: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_05_StokesSinker.ipynb -.. _Hypnic Jerk: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_06_HypnicJerk.ipynb -.. _Slab Subduction: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_07_SlabSubduction.ipynb -.. _Pure Shear example: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/2_09_ShearBandsPureShear.ipynb -.. _Visco-elastic half space: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_08_ViscoElasticHalfSpace.ipynb -.. _Visco-elasto-plasticity in simple shear: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb -.. _3D Stokes Sinker: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_11_StokesSinker3D.ipynb -.. _2D Bottom Traction condition: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_20_ColumnsTractionBottom.ipynb -.. _3D Bottom Traction condition: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_21_3D_ColumnsTractionBottom.ipynb -.. _Free surface simple example: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_23_FreeSurface_Simple_Example.ipynb -.. _Hot Canon Ball: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/1_25_Hot_Canon_Ball.ipynb -.. _Rayleigh Taylor: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb +.. _Steady State heat: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_01_Steady_State_Heat.ipynb +.. _Convection: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_02_Convection_Example.ipynb +.. _Blankenbach Benchmark: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_03_BlankenbachBenchmark.ipynb +.. _Stokes sinker: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_05_StokesSinker.ipynb +.. _Hypnic Jerk: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_06_HypnicJerk.ipynb +.. _Slab Subduction: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_07_SlabSubduction.ipynb +.. _Pure Shear example: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/2_09_ShearBandsPureShear.ipynb +.. _Visco-elastic half space: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_08_ViscoElasticHalfSpace.ipynb +.. _Visco-elasto-plasticity in simple shear: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb +.. _3D Stokes Sinker: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_11_StokesSinker3D.ipynb +.. _2D Bottom Traction condition: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_20_ColumnsTractionBottom.ipynb +.. _3D Bottom Traction condition: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_21_3D_ColumnsTractionBottom.ipynb +.. _Free surface simple example: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_23_FreeSurface_Simple_Example.ipynb +.. _Hot Canon Ball: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/1_25_Hot_Canon_Ball.ipynb +.. _Rayleigh Taylor: http://nbviewer.jupyter.org/github/rbeucher/UWGeodynamics/blob/master/docs/examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb diff --git a/docs/source/Installation.rst b/docs/readthedocs/src/Installation.rst similarity index 97% rename from docs/source/Installation.rst rename to docs/readthedocs/src/Installation.rst index 8d29effc..f75d74f1 100644 --- a/docs/source/Installation.rst +++ b/docs/readthedocs/src/Installation.rst @@ -172,9 +172,9 @@ requirements NCI Gadi ~~~~~~~~~~ -We provide a `script `_ to install UWGeodynamics, Underworld and Badlands inside a virtual +We provide a `script `_ to install UWGeodynamics, Underworld and Badlands inside a virtual environment on Gadi. -A minimal `PBS script `_ is also available. +A minimal `PBS script `_ is also available. Pawsey MAGNUS ------------- diff --git a/docs/source/Troubleshoot.rst b/docs/readthedocs/src/Troubleshoot.rst similarity index 100% rename from docs/source/Troubleshoot.rst rename to docs/readthedocs/src/Troubleshoot.rst diff --git a/docs/source/Tutorials.rst b/docs/readthedocs/src/Tutorials.rst similarity index 58% rename from docs/source/Tutorials.rst rename to docs/readthedocs/src/Tutorials.rst index 400cee58..e8dd91dc 100644 --- a/docs/source/Tutorials.rst +++ b/docs/readthedocs/src/Tutorials.rst @@ -2,12 +2,12 @@ Tutorials ========= -We provide a series of tutorials as Jupyter notebook: +We provide a series of docs/tutorials as Jupyter notebook: 1. `Tutorial 1 Simple Rift`_ .. image:: img/Tutorial1.gif - :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb + :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb [Output Data](https://www.dropbox.com/s/3gy3boh9mf9s807/Tutorial1_BGH.zip?dl=0) @@ -18,14 +18,14 @@ We provide a series of tutorials as Jupyter notebook: 3. `Tutorial 3 Sandbox Extension`_ .. image:: img/underworld.png - :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb + :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb [Output Data](https://www.dropbox.com/s/9j24v5ex1eanro2/Tutorial3_BGH.zip?dl=0) 4. `Tutorial 4 Sandbox Compression`_ .. image:: img/Tutorial4.png - :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb + :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb [Output Data](https://www.dropbox.com/s/4wlp3cociwysz3l/Tutorial4_BGH.zip?dl=0) @@ -40,7 +40,7 @@ We provide a series of tutorials as Jupyter notebook: 9. `Tutorial 9 Passive Margins`_ .. image:: img/Tutorial_9.gif - :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_9_passive_margins.ipynb + :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_9_passive_margins.ipynb [Output Data](https://www.dropbox.com/s/g1ocpse0mld4tiy/Tutorial9_BGH.zip?dl=0) @@ -53,16 +53,16 @@ We provide a series of tutorials as Jupyter notebook: [Output Data](https://www.dropbox.com/s/qpzrxp9fcf35w38/Tutorial11_BGH.zip?dl=0) .. image:: img/Tutorial11.gif - :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb - -.. _Tutorial 1 Simple Rift: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb -.. _Tutorial 2 Melt: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_2_Melt.ipynb -.. _Tutorial 3 Sandbox Extension: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb -.. _Tutorial 4 Sandbox Compression: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb -.. _Tutorial 5 Simple Compression: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_5_Convergence_Model.ipynb -.. _Tutorial 6 Simple Surface Processes: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb -.. _Tutorial 7 3D Rift: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb -.. _Tutorial 8 ViscoElasticity: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb -.. _Tutorial 9 Passive Margins: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_9_passive_margins.ipynb -.. _Tutorial 10 Thrust Wedge: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_10_Thrust_Wedges.ipynb -.. _Tutorial 11 Coupling with Badlands: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb + :target: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb + +.. _Tutorial 1 Simple Rift: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb +.. _Tutorial 2 Melt: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_2_Melt.ipynb +.. _Tutorial 3 Sandbox Extension: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb +.. _Tutorial 4 Sandbox Compression: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb +.. _Tutorial 5 Simple Compression: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_5_Convergence_Model.ipynb +.. _Tutorial 6 Simple Surface Processes: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb +.. _Tutorial 7 3D Rift: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb +.. _Tutorial 8 ViscoElasticity: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb +.. _Tutorial 9 Passive Margins: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_9_passive_margins.ipynb +.. _Tutorial 10 Thrust Wedge: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb +.. _Tutorial 11 Coupling with Badlands: http://nbviewer.jupyter.org/github/underworldcode/UWGeodynamics/blob/master/docs/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb diff --git a/docs/source/UserGuide.rst b/docs/readthedocs/src/UserGuide.rst similarity index 99% rename from docs/source/UserGuide.rst rename to docs/readthedocs/src/UserGuide.rst index 4ad5e151..63f3f165 100644 --- a/docs/source/UserGuide.rst +++ b/docs/readthedocs/src/UserGuide.rst @@ -1670,11 +1670,13 @@ position of the centroids. The pattern is repeated around each centroid. >>> cxpos = np.linspace(GEO.nd(20*u.kilometer), GEO.nd(40*u.kilometer),5) >>> cypos = np.linspace(GEO.nd(20*u.kilometer), GEO.nd(40*u.kilometer),5) >>> cxpos, cypos = np.meshgrid(cxpos, cypos) + >>> coords_centroid = np.ndarray((cxpos.size, 2)) + >>> coords_centroid[:, 0] = cxpos.ravel() + >>> coords_centroid[:, 1] = cypos.ravel() >>> >>> coords = np.zeros((1, 2)) >>> tracers = Model.add_passive_tracers(vertices=coords, - ... centroids=[cxpos.ravel(), - ... cypos.ravel()) + ... centroids=coords_centroid) We provide a function to create circles on a grid: diff --git a/docs/source/conf.py b/docs/readthedocs/src/conf.py similarity index 100% rename from docs/source/conf.py rename to docs/readthedocs/src/conf.py diff --git a/docs/source/img/2D_polygon.png b/docs/readthedocs/src/img/2D_polygon.png similarity index 100% rename from docs/source/img/2D_polygon.png rename to docs/readthedocs/src/img/2D_polygon.png diff --git a/docs/source/img/3D_halfspaces.png b/docs/readthedocs/src/img/3D_halfspaces.png similarity index 100% rename from docs/source/img/3D_halfspaces.png rename to docs/readthedocs/src/img/3D_halfspaces.png diff --git a/docs/source/img/3D_halfspaces2.png b/docs/readthedocs/src/img/3D_halfspaces2.png similarity index 100% rename from docs/source/img/3D_halfspaces2.png rename to docs/readthedocs/src/img/3D_halfspaces2.png diff --git a/examples/images/3D_layer.png b/docs/readthedocs/src/img/3D_layer.png similarity index 100% rename from examples/images/3D_layer.png rename to docs/readthedocs/src/img/3D_layer.png diff --git a/docs/source/img/Design.svg b/docs/readthedocs/src/img/Design.svg similarity index 100% rename from docs/source/img/Design.svg rename to docs/readthedocs/src/img/Design.svg diff --git a/docs/source/img/Material1.png b/docs/readthedocs/src/img/Material1.png similarity index 100% rename from docs/source/img/Material1.png rename to docs/readthedocs/src/img/Material1.png diff --git a/docs/source/img/MaterialRegistry.gif b/docs/readthedocs/src/img/MaterialRegistry.gif similarity index 100% rename from docs/source/img/MaterialRegistry.gif rename to docs/readthedocs/src/img/MaterialRegistry.gif diff --git a/docs/source/img/PlasticityRegistry.gif b/docs/readthedocs/src/img/PlasticityRegistry.gif similarity index 100% rename from docs/source/img/PlasticityRegistry.gif rename to docs/readthedocs/src/img/PlasticityRegistry.gif diff --git a/docs/source/img/SandboxCompression.gif b/docs/readthedocs/src/img/SandboxCompression.gif similarity index 100% rename from docs/source/img/SandboxCompression.gif rename to docs/readthedocs/src/img/SandboxCompression.gif diff --git a/docs/source/img/Tutorial1.gif b/docs/readthedocs/src/img/Tutorial1.gif similarity index 100% rename from docs/source/img/Tutorial1.gif rename to docs/readthedocs/src/img/Tutorial1.gif diff --git a/docs/source/img/Tutorial11.gif b/docs/readthedocs/src/img/Tutorial11.gif similarity index 100% rename from docs/source/img/Tutorial11.gif rename to docs/readthedocs/src/img/Tutorial11.gif diff --git a/docs/source/img/Tutorial4.png b/docs/readthedocs/src/img/Tutorial4.png similarity index 100% rename from docs/source/img/Tutorial4.png rename to docs/readthedocs/src/img/Tutorial4.png diff --git a/docs/source/img/Tutorial_9.gif b/docs/readthedocs/src/img/Tutorial_9.gif similarity index 100% rename from docs/source/img/Tutorial_9.gif rename to docs/readthedocs/src/img/Tutorial_9.gif diff --git a/docs/source/img/ViscousCreepRegistry.gif b/docs/readthedocs/src/img/ViscousCreepRegistry.gif similarity index 100% rename from docs/source/img/ViscousCreepRegistry.gif rename to docs/readthedocs/src/img/ViscousCreepRegistry.gif diff --git a/docs/source/img/annulus.png b/docs/readthedocs/src/img/annulus.png similarity index 100% rename from docs/source/img/annulus.png rename to docs/readthedocs/src/img/annulus.png diff --git a/docs/source/img/box.png b/docs/readthedocs/src/img/box.png similarity index 100% rename from docs/source/img/box.png rename to docs/readthedocs/src/img/box.png diff --git a/docs/source/img/collision_wedge.gif b/docs/readthedocs/src/img/collision_wedge.gif similarity index 100% rename from docs/source/img/collision_wedge.gif rename to docs/readthedocs/src/img/collision_wedge.gif diff --git a/docs/source/img/density.png b/docs/readthedocs/src/img/density.png similarity index 100% rename from docs/source/img/density.png rename to docs/readthedocs/src/img/density.png diff --git a/docs/source/img/disk.png b/docs/readthedocs/src/img/disk.png similarity index 100% rename from docs/source/img/disk.png rename to docs/readthedocs/src/img/disk.png diff --git a/docs/source/img/gif1.gif b/docs/readthedocs/src/img/gif1.gif similarity index 100% rename from docs/source/img/gif1.gif rename to docs/readthedocs/src/img/gif1.gif diff --git a/docs/source/img/kitematic.gif b/docs/readthedocs/src/img/kitematic.gif similarity index 100% rename from docs/source/img/kitematic.gif rename to docs/readthedocs/src/img/kitematic.gif diff --git a/docs/source/img/layers.png b/docs/readthedocs/src/img/layers.png similarity index 100% rename from docs/source/img/layers.png rename to docs/readthedocs/src/img/layers.png diff --git a/docs/source/img/logos.png b/docs/readthedocs/src/img/logos.png similarity index 100% rename from docs/source/img/logos.png rename to docs/readthedocs/src/img/logos.png diff --git a/docs/source/img/mechanicalBCs1.png b/docs/readthedocs/src/img/mechanicalBCs1.png similarity index 100% rename from docs/source/img/mechanicalBCs1.png rename to docs/readthedocs/src/img/mechanicalBCs1.png diff --git a/docs/source/img/mechanicalBCs2.png b/docs/readthedocs/src/img/mechanicalBCs2.png similarity index 100% rename from docs/source/img/mechanicalBCs2.png rename to docs/readthedocs/src/img/mechanicalBCs2.png diff --git a/docs/source/img/multiple_materials.png b/docs/readthedocs/src/img/multiple_materials.png similarity index 100% rename from docs/source/img/multiple_materials.png rename to docs/readthedocs/src/img/multiple_materials.png diff --git a/docs/source/img/multishape-1.png b/docs/readthedocs/src/img/multishape-1.png similarity index 100% rename from docs/source/img/multishape-1.png rename to docs/readthedocs/src/img/multishape-1.png diff --git a/docs/source/img/multishape.png b/docs/readthedocs/src/img/multishape.png similarity index 100% rename from docs/source/img/multishape.png rename to docs/readthedocs/src/img/multishape.png diff --git a/docs/source/img/polygon.png b/docs/readthedocs/src/img/polygon.png similarity index 100% rename from docs/source/img/polygon.png rename to docs/readthedocs/src/img/polygon.png diff --git a/docs/source/img/tabtab.gif b/docs/readthedocs/src/img/tabtab.gif similarity index 100% rename from docs/source/img/tabtab.gif rename to docs/readthedocs/src/img/tabtab.gif diff --git a/docs/source/img/thermalBCs1.png b/docs/readthedocs/src/img/thermalBCs1.png similarity index 100% rename from docs/source/img/thermalBCs1.png rename to docs/readthedocs/src/img/thermalBCs1.png diff --git a/docs/source/img/thermalBCs2.png b/docs/readthedocs/src/img/thermalBCs2.png similarity index 100% rename from docs/source/img/thermalBCs2.png rename to docs/readthedocs/src/img/thermalBCs2.png diff --git a/docs/source/img/underworld.png b/docs/readthedocs/src/img/underworld.png similarity index 100% rename from docs/source/img/underworld.png rename to docs/readthedocs/src/img/underworld.png diff --git a/docs/source/index.rst b/docs/readthedocs/src/index.rst similarity index 100% rename from docs/source/index.rst rename to docs/readthedocs/src/index.rst diff --git a/tutorials/.gitignore b/docs/tutorials/.gitignore similarity index 100% rename from tutorials/.gitignore rename to docs/tutorials/.gitignore diff --git a/tutorials/Tutorial_10_Thrust_Wedges.ipynb b/docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb similarity index 100% rename from tutorials/Tutorial_10_Thrust_Wedges.ipynb rename to docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb diff --git a/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb b/docs/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb similarity index 100% rename from tutorials/Tutorial_11_Coupling_with_Badlands.ipynb rename to docs/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb diff --git a/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb b/docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb similarity index 100% rename from tutorials/Tutorial_1_ThermoMechanical_Model.ipynb rename to docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb diff --git a/tutorials/Tutorial_2_Melt.ipynb b/docs/tutorials/Tutorial_2_Melt.ipynb similarity index 100% rename from tutorials/Tutorial_2_Melt.ipynb rename to docs/tutorials/Tutorial_2_Melt.ipynb diff --git a/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb b/docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb similarity index 100% rename from tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb rename to docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb diff --git a/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb b/docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb similarity index 100% rename from tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb rename to docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb diff --git a/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb b/docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb similarity index 100% rename from tutorials/Tutorial_4_NumericalSandboxCompression.ipynb rename to docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb diff --git a/tutorials/Tutorial_5_Convergence_Model.ipynb b/docs/tutorials/Tutorial_5_Convergence_Model.ipynb similarity index 100% rename from tutorials/Tutorial_5_Convergence_Model.ipynb rename to docs/tutorials/Tutorial_5_Convergence_Model.ipynb diff --git a/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb b/docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb similarity index 100% rename from tutorials/Tutorial_6_Simple_Surface_Processes.ipynb rename to docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb diff --git a/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb b/docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb similarity index 100% rename from tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb rename to docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb diff --git a/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb b/docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb similarity index 100% rename from tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb rename to docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb diff --git a/tutorials/Tutorial_9_passive_margins.ipynb b/docs/tutorials/Tutorial_9_passive_margins.ipynb similarity index 100% rename from tutorials/Tutorial_9_passive_margins.ipynb rename to docs/tutorials/Tutorial_9_passive_margins.ipynb diff --git a/tutorials/images/CompressionA.png b/docs/tutorials/images/CompressionA.png similarity index 100% rename from tutorials/images/CompressionA.png rename to docs/tutorials/images/CompressionA.png diff --git a/tutorials/images/CompressionB.png b/docs/tutorials/images/CompressionB.png similarity index 100% rename from tutorials/images/CompressionB.png rename to docs/tutorials/images/CompressionB.png diff --git a/tutorials/images/CompressionSetUp.png b/docs/tutorials/images/CompressionSetUp.png similarity index 100% rename from tutorials/images/CompressionSetUp.png rename to docs/tutorials/images/CompressionSetUp.png diff --git a/tutorials/images/Extension.png b/docs/tutorials/images/Extension.png similarity index 100% rename from tutorials/images/Extension.png rename to docs/tutorials/images/Extension.png diff --git a/tutorials/images/ExtensionA.png b/docs/tutorials/images/ExtensionA.png similarity index 100% rename from tutorials/images/ExtensionA.png rename to docs/tutorials/images/ExtensionA.png diff --git a/tutorials/images/ExtensionB.png b/docs/tutorials/images/ExtensionB.png similarity index 100% rename from tutorials/images/ExtensionB.png rename to docs/tutorials/images/ExtensionB.png diff --git a/tutorials/images/LAnson2018.png b/docs/tutorials/images/LAnson2018.png similarity index 100% rename from tutorials/images/LAnson2018.png rename to docs/tutorials/images/LAnson2018.png diff --git a/tutorials/images/Rey_et_al2009.png b/docs/tutorials/images/Rey_et_al2009.png similarity index 100% rename from tutorials/images/Rey_et_al2009.png rename to docs/tutorials/images/Rey_et_al2009.png diff --git a/tutorials/images/Tutorial1.gif b/docs/tutorials/images/Tutorial1.gif similarity index 100% rename from tutorials/images/Tutorial1.gif rename to docs/tutorials/images/Tutorial1.gif diff --git a/tutorials/images/Tutorial11.gif b/docs/tutorials/images/Tutorial11.gif similarity index 100% rename from tutorials/images/Tutorial11.gif rename to docs/tutorials/images/Tutorial11.gif diff --git a/tutorials/images/Tutorial4.png b/docs/tutorials/images/Tutorial4.png similarity index 100% rename from tutorials/images/Tutorial4.png rename to docs/tutorials/images/Tutorial4.png diff --git a/tutorials/images/Tutorial_10.gif b/docs/tutorials/images/Tutorial_10.gif similarity index 100% rename from tutorials/images/Tutorial_10.gif rename to docs/tutorials/images/Tutorial_10.gif diff --git a/tutorials/images/Tutorial_10_bcs.png b/docs/tutorials/images/Tutorial_10_bcs.png similarity index 100% rename from tutorials/images/Tutorial_10_bcs.png rename to docs/tutorials/images/Tutorial_10_bcs.png diff --git a/tutorials/images/Tutorial_9.gif b/docs/tutorials/images/Tutorial_9.gif similarity index 100% rename from tutorials/images/Tutorial_9.gif rename to docs/tutorials/images/Tutorial_9.gif diff --git a/tutorials/images/underworld.png b/docs/tutorials/images/underworld.png similarity index 100% rename from tutorials/images/underworld.png rename to docs/tutorials/images/underworld.png diff --git a/tutorials/ressources/badlands.xml b/docs/tutorials/ressources/badlands.xml similarity index 100% rename from tutorials/ressources/badlands.xml rename to docs/tutorials/ressources/badlands.xml diff --git a/tests/test_benchmarks.py b/tests/test_benchmarks.py index 238aa594..a1a9b94f 100644 --- a/tests/test_benchmarks.py +++ b/tests/test_benchmarks.py @@ -2,19 +2,19 @@ def test_slab_detachment_benchmark(): - _notebook_run("benchmarks/1_12_Slab_Detachment_Benchmark.ipynb") + _notebook_run("docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb") def test_indentor_benchmark(): - _notebook_run("benchmarks/1_22_Indentor_Benchmark.ipynb") + _notebook_run("docs/benchmarks/1_22_Indentor_Benchmark.ipynb") def test_self_subduction_case1(): - _notebook_run("benchmarks/2D_Self_Subduction_Case1.ipynb") + _notebook_run("docs/benchmarks/2D_Self_Subduction_Case1.ipynb") def test_self_subduction_case2(): - _notebook_run("benchmarks/2D_Self_Subduction_Case2.ipynb") + _notebook_run("docs/benchmarks/2D_Self_Subduction_Case2.ipynb") def test_brick_compression(): - _notebook_run("benchmarks/Kaus_BrickBenchmark-Compression.ipynb") + _notebook_run("docs/benchmarks/Kaus_BrickBenchmark-Compression.ipynb") def test_brick_extension(): - _notebook_run("benchmarks/Kaus_BrickBenchmark_Extension.ipynb") + _notebook_run("docs/benchmarks/Kaus_BrickBenchmark_Extension.ipynb") diff --git a/tests/test_examples.py b/tests/test_examples.py index f7059190..f4d99cb8 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -1,89 +1,89 @@ from .utils import _notebook_run def test_steady_state_example(): - _notebook_run("examples/1_01_Steady_State_Heat.ipynb") + _notebook_run("docs/examples/1_01_Steady_State_Heat.ipynb") def test_convection_example(): - _notebook_run("examples/1_02_Convection_Example.ipynb") + _notebook_run("docs/examples/1_02_Convection_Example.ipynb") def test_convection_blankenbach(): - _notebook_run("examples/1_03_BlankenbachBenchmark.ipynb") + _notebook_run("docs/examples/1_03_BlankenbachBenchmark.ipynb") def test_stokes_sinker(): - _notebook_run("examples/1_05_StokesSinker.ipynb") + _notebook_run("docs/examples/1_05_StokesSinker.ipynb") def test_hypnic_jerk(): - _notebook_run("examples/1_06_HypnicJerk.ipynb") + _notebook_run("docs/examples/1_06_HypnicJerk.ipynb") # ### Not sure why this is not working. This triggers non-linear solver. # ### def test_slab_subduction(): -# ### _notebook_run("examples/1_07_SlabSubduction.ipynb") +# ### _notebook_run("docs/examples/1_07_SlabSubduction.ipynb") def test_viscoelastic_halfspace(): - _notebook_run("examples/1_08_ViscoElasticHalfSpace.ipynb") + _notebook_run("docs/examples/1_08_ViscoElasticHalfSpace.ipynb") def test_viscoelastic_shear(): - _notebook_run("examples/1_09_ViscoElasticShear.ipynb") + _notebook_run("docs/examples/1_09_ViscoElasticShear.ipynb") def test_viscoplasticity_simple_shear(): - _notebook_run("examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb") + _notebook_run("docs/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb") def test_stokes_sinker_3D(): - _notebook_run("examples/1_11_StokesSinker3D.ipynb") + _notebook_run("docs/examples/1_11_StokesSinker3D.ipynb") def test_columns_traction_bottom(): - _notebook_run("examples/1_20_ColumnsTractionBottom.ipynb") + _notebook_run("docs/examples/1_20_ColumnsTractionBottom.ipynb") def test_columns_traction_bottom_3D(): - _notebook_run("examples/1_21_3D_ColumnsTractionBottom.ipynb") + _notebook_run("docs/examples/1_21_3D_ColumnsTractionBottom.ipynb") def test_freesurface_simple(): - _notebook_run("examples/1_23_FreeSurface_Simple_Example.ipynb") + _notebook_run("docs/examples/1_23_FreeSurface_Simple_Example.ipynb") def test_define_3D_volume(): - _notebook_run("examples/1_24_Define_3D_volumes.ipynb") + _notebook_run("docs/examples/1_24_Define_3D_volumes.ipynb") def test_hot_canon_ball(): - _notebook_run("examples/1_25_Hot_Canon_Ball.ipynb") + _notebook_run("docs/examples/1_25_Hot_Canon_Ball.ipynb") def test_numerical_sandbox_moving_wall(): - _notebook_run("examples/1_26_NumericalSandboxCompression-MovingWall.ipynb") + _notebook_run("docs/examples/1_26_NumericalSandboxCompression-MovingWall.ipynb") def test_column_pure_thermal_advection(): - _notebook_run("examples/1_27_ColumnPureThermalAdvection.ipynb") + _notebook_run("docs/examples/1_27_ColumnPureThermalAdvection.ipynb") def test_poiseuille_under_pressure(): - _notebook_run("examples/1_30_Poiseuille_Under_Pressure.ipynb") + _notebook_run("docs/examples/1_30_Poiseuille_Under_Pressure.ipynb") def test_user_defined_geotherm(): - _notebook_run("examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb") + _notebook_run("docs/examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb") def test_passive_tracers(): - _notebook_run("examples/1_32_Passive_Tracers_tests.ipynb") + _notebook_run("docs/examples/1_32_Passive_Tracers_tests.ipynb") def test_shear_band_pure_shear(): - _notebook_run("examples/2_09_ShearBandsPureShear.ipynb") + _notebook_run("docs/examples/2_09_ShearBandsPureShear.ipynb") def test_rayleigh_taylor_kekken(): - _notebook_run("examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb") + _notebook_run("docs/examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb") diff --git a/tests/test_tutorials.py b/tests/test_tutorials.py index 9b1a42d6..4ba54887 100644 --- a/tests/test_tutorials.py +++ b/tests/test_tutorials.py @@ -2,81 +2,81 @@ from .utils import _notebook_run_parallel def test_tutorial1(): - _notebook_run("tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") + _notebook_run("docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") def test_tutorial1_parallel(): - _notebook_run_parallel("tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") def test_tutorial2(): - _notebook_run("tutorials/Tutorial_2_Melt.ipynb") + _notebook_run("docs/tutorials/Tutorial_2_Melt.ipynb") def test_tutorial2_parallel(): - _notebook_run_parallel("tutorials/Tutorial_2_Melt.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_2_Melt.ipynb") def test_tutorial3(): - _notebook_run("tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") + _notebook_run("docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") def test_tutorial3_parallel(): - _notebook_run_parallel("tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") def test_tutorial3B(): - _notebook_run("tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") + _notebook_run("docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") def test_tutorial3B_parallel(): - _notebook_run_parallel("tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") def test_tutorial4(): - _notebook_run("tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") + _notebook_run("docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") def test_tutorial4_parallel(): - _notebook_run_parallel("tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") def test_tutorial5(): - _notebook_run("tutorials/Tutorial_5_Convergence_Model.ipynb") + _notebook_run("docs/tutorials/Tutorial_5_Convergence_Model.ipynb") def test_tutorial5_parallel(): - _notebook_run_parallel("tutorials/Tutorial_5_Convergence_Model.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_5_Convergence_Model.ipynb") def test_tutorial6(): - _notebook_run("tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") + _notebook_run("docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") def test_tutorial6_parallel(): - _notebook_run_parallel("tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") def test_tutorial7(): - _notebook_run("tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") + _notebook_run("docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") def test_tutorial7_parallel(): - _notebook_run_parallel("tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") def test_tutorial8(): - _notebook_run("tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") + _notebook_run("docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") def test_tutorial8_parallel(): - _notebook_run_parallel("tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") def test_tutorial9(): - _notebook_run("tutorials/Tutorial_9_passive_margins.ipynb") + _notebook_run("docs/tutorials/Tutorial_9_passive_margins.ipynb") def test_tutorial9_parallel(): - _notebook_run_parallel("tutorials/Tutorial_9_passive_margins.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_9_passive_margins.ipynb") def test_tutorial10(): - _notebook_run("tutorials/Tutorial_10_Thrust_Wedges.ipynb") + _notebook_run("docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb") def test_tutorial10_parallel(): - _notebook_run_parallel("tutorials/Tutorial_10_Thrust_Wedges.ipynb") + _notebook_run_parallel("docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb") From ab94f7a7b95d31c96fd4ba0f844570ca5a644e58 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Tue, 23 Jun 2020 05:43:55 +0000 Subject: [PATCH 51/80] cleaning --- tests/test_benchmarks.py | 12 +++++------ tests/test_examples.py | 44 ++++++++++++++++++++-------------------- tests/test_tutorials.py | 44 ++++++++++++++++++++-------------------- tests/utils.py | 4 ++-- 4 files changed, 52 insertions(+), 52 deletions(-) diff --git a/tests/test_benchmarks.py b/tests/test_benchmarks.py index a1a9b94f..238aa594 100644 --- a/tests/test_benchmarks.py +++ b/tests/test_benchmarks.py @@ -2,19 +2,19 @@ def test_slab_detachment_benchmark(): - _notebook_run("docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb") + _notebook_run("benchmarks/1_12_Slab_Detachment_Benchmark.ipynb") def test_indentor_benchmark(): - _notebook_run("docs/benchmarks/1_22_Indentor_Benchmark.ipynb") + _notebook_run("benchmarks/1_22_Indentor_Benchmark.ipynb") def test_self_subduction_case1(): - _notebook_run("docs/benchmarks/2D_Self_Subduction_Case1.ipynb") + _notebook_run("benchmarks/2D_Self_Subduction_Case1.ipynb") def test_self_subduction_case2(): - _notebook_run("docs/benchmarks/2D_Self_Subduction_Case2.ipynb") + _notebook_run("benchmarks/2D_Self_Subduction_Case2.ipynb") def test_brick_compression(): - _notebook_run("docs/benchmarks/Kaus_BrickBenchmark-Compression.ipynb") + _notebook_run("benchmarks/Kaus_BrickBenchmark-Compression.ipynb") def test_brick_extension(): - _notebook_run("docs/benchmarks/Kaus_BrickBenchmark_Extension.ipynb") + _notebook_run("benchmarks/Kaus_BrickBenchmark_Extension.ipynb") diff --git a/tests/test_examples.py b/tests/test_examples.py index f4d99cb8..f7059190 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -1,89 +1,89 @@ from .utils import _notebook_run def test_steady_state_example(): - _notebook_run("docs/examples/1_01_Steady_State_Heat.ipynb") + _notebook_run("examples/1_01_Steady_State_Heat.ipynb") def test_convection_example(): - _notebook_run("docs/examples/1_02_Convection_Example.ipynb") + _notebook_run("examples/1_02_Convection_Example.ipynb") def test_convection_blankenbach(): - _notebook_run("docs/examples/1_03_BlankenbachBenchmark.ipynb") + _notebook_run("examples/1_03_BlankenbachBenchmark.ipynb") def test_stokes_sinker(): - _notebook_run("docs/examples/1_05_StokesSinker.ipynb") + _notebook_run("examples/1_05_StokesSinker.ipynb") def test_hypnic_jerk(): - _notebook_run("docs/examples/1_06_HypnicJerk.ipynb") + _notebook_run("examples/1_06_HypnicJerk.ipynb") # ### Not sure why this is not working. This triggers non-linear solver. # ### def test_slab_subduction(): -# ### _notebook_run("docs/examples/1_07_SlabSubduction.ipynb") +# ### _notebook_run("examples/1_07_SlabSubduction.ipynb") def test_viscoelastic_halfspace(): - _notebook_run("docs/examples/1_08_ViscoElasticHalfSpace.ipynb") + _notebook_run("examples/1_08_ViscoElasticHalfSpace.ipynb") def test_viscoelastic_shear(): - _notebook_run("docs/examples/1_09_ViscoElasticShear.ipynb") + _notebook_run("examples/1_09_ViscoElasticShear.ipynb") def test_viscoplasticity_simple_shear(): - _notebook_run("docs/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb") + _notebook_run("examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb") def test_stokes_sinker_3D(): - _notebook_run("docs/examples/1_11_StokesSinker3D.ipynb") + _notebook_run("examples/1_11_StokesSinker3D.ipynb") def test_columns_traction_bottom(): - _notebook_run("docs/examples/1_20_ColumnsTractionBottom.ipynb") + _notebook_run("examples/1_20_ColumnsTractionBottom.ipynb") def test_columns_traction_bottom_3D(): - _notebook_run("docs/examples/1_21_3D_ColumnsTractionBottom.ipynb") + _notebook_run("examples/1_21_3D_ColumnsTractionBottom.ipynb") def test_freesurface_simple(): - _notebook_run("docs/examples/1_23_FreeSurface_Simple_Example.ipynb") + _notebook_run("examples/1_23_FreeSurface_Simple_Example.ipynb") def test_define_3D_volume(): - _notebook_run("docs/examples/1_24_Define_3D_volumes.ipynb") + _notebook_run("examples/1_24_Define_3D_volumes.ipynb") def test_hot_canon_ball(): - _notebook_run("docs/examples/1_25_Hot_Canon_Ball.ipynb") + _notebook_run("examples/1_25_Hot_Canon_Ball.ipynb") def test_numerical_sandbox_moving_wall(): - _notebook_run("docs/examples/1_26_NumericalSandboxCompression-MovingWall.ipynb") + _notebook_run("examples/1_26_NumericalSandboxCompression-MovingWall.ipynb") def test_column_pure_thermal_advection(): - _notebook_run("docs/examples/1_27_ColumnPureThermalAdvection.ipynb") + _notebook_run("examples/1_27_ColumnPureThermalAdvection.ipynb") def test_poiseuille_under_pressure(): - _notebook_run("docs/examples/1_30_Poiseuille_Under_Pressure.ipynb") + _notebook_run("examples/1_30_Poiseuille_Under_Pressure.ipynb") def test_user_defined_geotherm(): - _notebook_run("docs/examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb") + _notebook_run("examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb") def test_passive_tracers(): - _notebook_run("docs/examples/1_32_Passive_Tracers_tests.ipynb") + _notebook_run("examples/1_32_Passive_Tracers_tests.ipynb") def test_shear_band_pure_shear(): - _notebook_run("docs/examples/2_09_ShearBandsPureShear.ipynb") + _notebook_run("examples/2_09_ShearBandsPureShear.ipynb") def test_rayleigh_taylor_kekken(): - _notebook_run("docs/examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb") + _notebook_run("examples/2_15_Rayleigh-Taylor_van_Keken_et_al_1997.ipynb") diff --git a/tests/test_tutorials.py b/tests/test_tutorials.py index 4ba54887..9b1a42d6 100644 --- a/tests/test_tutorials.py +++ b/tests/test_tutorials.py @@ -2,81 +2,81 @@ from .utils import _notebook_run_parallel def test_tutorial1(): - _notebook_run("docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") + _notebook_run("tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") def test_tutorial1_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") + _notebook_run_parallel("tutorials/Tutorial_1_ThermoMechanical_Model.ipynb") def test_tutorial2(): - _notebook_run("docs/tutorials/Tutorial_2_Melt.ipynb") + _notebook_run("tutorials/Tutorial_2_Melt.ipynb") def test_tutorial2_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_2_Melt.ipynb") + _notebook_run_parallel("tutorials/Tutorial_2_Melt.ipynb") def test_tutorial3(): - _notebook_run("docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") + _notebook_run("tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") def test_tutorial3_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") + _notebook_run_parallel("tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb") def test_tutorial3B(): - _notebook_run("docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") + _notebook_run("tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") def test_tutorial3B_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") + _notebook_run_parallel("tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb") def test_tutorial4(): - _notebook_run("docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") + _notebook_run("tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") def test_tutorial4_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") + _notebook_run_parallel("tutorials/Tutorial_4_NumericalSandboxCompression.ipynb") def test_tutorial5(): - _notebook_run("docs/tutorials/Tutorial_5_Convergence_Model.ipynb") + _notebook_run("tutorials/Tutorial_5_Convergence_Model.ipynb") def test_tutorial5_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_5_Convergence_Model.ipynb") + _notebook_run_parallel("tutorials/Tutorial_5_Convergence_Model.ipynb") def test_tutorial6(): - _notebook_run("docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") + _notebook_run("tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") def test_tutorial6_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") + _notebook_run_parallel("tutorials/Tutorial_6_Simple_Surface_Processes.ipynb") def test_tutorial7(): - _notebook_run("docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") + _notebook_run("tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") def test_tutorial7_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") + _notebook_run_parallel("tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb") def test_tutorial8(): - _notebook_run("docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") + _notebook_run("tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") def test_tutorial8_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") + _notebook_run_parallel("tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb") def test_tutorial9(): - _notebook_run("docs/tutorials/Tutorial_9_passive_margins.ipynb") + _notebook_run("tutorials/Tutorial_9_passive_margins.ipynb") def test_tutorial9_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_9_passive_margins.ipynb") + _notebook_run_parallel("tutorials/Tutorial_9_passive_margins.ipynb") def test_tutorial10(): - _notebook_run("docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb") + _notebook_run("tutorials/Tutorial_10_Thrust_Wedges.ipynb") def test_tutorial10_parallel(): - _notebook_run_parallel("docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb") + _notebook_run_parallel("tutorials/Tutorial_10_Thrust_Wedges.ipynb") diff --git a/tests/utils.py b/tests/utils.py index 17b47aca..17f49af5 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -5,8 +5,8 @@ import re TEST_DIR = os.path.dirname(os.path.abspath(__file__)) -PROJECT_DIR = os.path.abspath(os.path.join(TEST_DIR, os.pardir)) -RESULT_DIR = os.path.join(PROJECT_DIR, "tests/test_results") +PROJECT_DIR = os.path.abspath(os.path.join(TEST_DIR, "../docs")) +RESULT_DIR = os.path.join(TEST_DIR, "test_results") sys.path.insert(0, PROJECT_DIR) From d56f510799345d567806f443adcd007911a66150 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Tue, 23 Jun 2020 05:45:48 +0000 Subject: [PATCH 52/80] cleaning --- .gitattributes | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index 32e5b8c5..0d49d51e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1 @@ -examples/* linguist-vendored -benchmarks/* linguist-vendored -tutorials/* linguist-vendored docs/* linguist-vendored From e15daa9f03b30dd41e7f62740892979d481635a6 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Tue, 23 Jun 2020 05:52:49 +0000 Subject: [PATCH 53/80] change email to ANU, cleaning --- UWGeodynamics/__init__.py | 4 ++-- UWGeodynamics/lithopress/lithopress.py | 1 - docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb | 2 +- docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb | 2 +- uwgeodynamicsrc.template => docs/uwgeodynamicsrc.template | 0 setup.py | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) rename uwgeodynamicsrc.template => docs/uwgeodynamicsrc.template (100%) diff --git a/UWGeodynamics/__init__.py b/UWGeodynamics/__init__.py index 881e47c6..81253dec 100644 --- a/UWGeodynamics/__init__.py +++ b/UWGeodynamics/__init__.py @@ -75,13 +75,13 @@ nProcs = size __author__ = "Romain Beucher" -__copyright__ = "Copyright 2018, The University of Melbourne" +__copyright__ = "Copyright 2020, The Australian National University" __credits__ = ["Romain Beucher", "Louis Moresi", "Julian Giordani", "John Mansour"] __maintainer__ = "Romain Beucher" -__email__ = "romain.beucher@unimelb.edu.au" +__email__ = "romain.beucher@anu.edu.au" _id = str(_uuid.uuid4()) diff --git a/UWGeodynamics/lithopress/lithopress.py b/UWGeodynamics/lithopress/lithopress.py index 7f9af630..8800ec99 100644 --- a/UWGeodynamics/lithopress/lithopress.py +++ b/UWGeodynamics/lithopress/lithopress.py @@ -1,5 +1,4 @@ from __future__ import print_function, absolute_import -# Romain Beucher romain.beucher@unimelb.edu.au import underworld as uw import underworld.function as fn diff --git a/docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb b/docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb index e437a724..7b54ff51 100644 --- a/docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb +++ b/docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb @@ -6,7 +6,7 @@ "source": [ "# Slab Detachment Benchmark\n", "\n", - "version 0.1 Romain Beucher romain.beucher@unimelb.edu.au" + "version 0.1 Romain Beucher romain.beucher@anu.edu.au" ] }, { diff --git a/docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb b/docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb index b49d325d..1969dd26 100644 --- a/docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb +++ b/docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb @@ -9,7 +9,7 @@ "**Romain Beucher**\n", "Version 0.1\n", "\n", - "romain.beucher@unimelb.edu.au\n", + "romain.beucher@anu.edu.au\n", "\n", "The following notebook is an implementation of the Numerical Sandbox Extension Experiment similar to [Buiter et al., 2006](http://sp.lyellcollection.org/content/253/1/29). The test is commonly referred as one of the GEOMOD benchmarks and is used to test the large deformation viscous-plastic behaviour of geodynamic numerical codes.\n", "\n", diff --git a/uwgeodynamicsrc.template b/docs/uwgeodynamicsrc.template similarity index 100% rename from uwgeodynamicsrc.template rename to docs/uwgeodynamicsrc.template diff --git a/setup.py b/setup.py index 03755bcc..a93648dc 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ # Write the default uwgeodynamics file -with open('uwgeodynamicsrc.template') as fd: +with open('docs/uwgeodynamicsrc.template') as fd: template = fd.read() with open('UWGeodynamics/uwgeo-data/uwgeodynamicsrc', 'w') as fd: fd.write(template) From 287fc3c70a903f0b2e3629562ddc99a6dadb31c0 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Tue, 23 Jun 2020 05:57:43 +0000 Subject: [PATCH 54/80] See if relative link works --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1deb217..9a8d739e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/readthedocs/src/img/logos.png)](https://www.earthbyte.org/the-basin-genesis-hub) +[![image](docs/readthedocs/src/img/logos.png)](https://www.earthbyte.org/the-basin-genesis-hub) # Underworld Geodynamics project From 5b3c56e2e27ebd5ecdb0a1452b1cd284bcdbb1d3 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Tue, 23 Jun 2020 06:51:33 +0000 Subject: [PATCH 55/80] cleaning --- README.md | 6 +++--- setup.py | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9a8d739e..35628e2a 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ [![Docs](https://readthedocs.org/projects/uwgeodynamics/badge)](http://uwgeodynamics.readthedocs.org/) ![tests](https://github.com/underworldcode/UWGeodynamics/workflows/tests/badge.svg) -![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/tutorials/images/Tutorial1.gif) -![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/readthedocs/src/img/collision_wedge.gif) +![image](docs/tutorials/images/Tutorial1.gif) +![image](docs/readthedocs/src/img/collision_wedge.gif) The UWGeodynamics module facilitates prototyping of geodynamics models using Underworld. It can be seen as a set of high-level functions within @@ -38,7 +38,7 @@ We hope that the user will naturally move to the low-level functionalities as he or her gets more confident, and by doing so will access the wide range of possibilities offered by Underworld. -![image](https://raw.githubusercontent.com/rbeucher/UWGeodynamics/master/docs/readthedocs/src/img/SandboxCompression.gif) +![image]docs/readthedocs/src/img/SandboxCompression.gif) ## UWGeodynamics and Underworld diff --git a/setup.py b/setup.py index a93648dc..a4d08feb 100644 --- a/setup.py +++ b/setup.py @@ -4,6 +4,7 @@ import os import subprocess from os import path +import re MAJOR = 2 MINOR = 10 @@ -17,10 +18,12 @@ with open(path.join(here, 'README.md'), encoding='utf-8') as f: long_description = f.read() +long_description = re.sub(r"\[image\]\(", "[image](https://raw.githubusercontent.com/underworldcode/UWGeodynamics/master/", long_description) # Write the default uwgeodynamics file with open('docs/uwgeodynamicsrc.template') as fd: template = fd.read() + with open('UWGeodynamics/uwgeo-data/uwgeodynamicsrc', 'w') as fd: fd.write(template) From aca29393a7e1e9245fc7516aaea951ee946ce884 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 24 Jun 2020 00:51:34 +0000 Subject: [PATCH 56/80] Add short Readme to the docs folder --- docs/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..bb3e1304 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,15 @@ +# readthedocs + +Documentation sources published on [readthedocs](https://uwgeodynamics.readthedocs.io/en/latest/): + +# examples + +Contain examples of UWGeodynamics functionalities. + +# tutorials + +Complete work through examples. + +# nci_gadi + +Installation script for NCI gadi From 77710503c8c282874985297e8b0d70435066367d Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 24 Jun 2020 01:01:20 +0000 Subject: [PATCH 57/80] Change glucifer to visualisation in doc examples --- docs/readthedocs/src/UserGuide.rst | 61 ++++++++++++++---------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/docs/readthedocs/src/UserGuide.rst b/docs/readthedocs/src/UserGuide.rst index 63f3f165..1cc6a976 100644 --- a/docs/readthedocs/src/UserGuide.rst +++ b/docs/readthedocs/src/UserGuide.rst @@ -39,26 +39,25 @@ import *UWGeodynamics* Visualization -------------- -*glucifer* can be used to plot the fields produced by *Underworld* / *UWGeodynamics*. -The module is a wrapper around Lavavu_ and is readily available from +We provide access to a wrapper around Lavavu_ , readily available from Underworld. -It can be imported as follow +The visualisation module can be imported as follow .. code:: python - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis .. warning:: Although many plotting modules are available, we strongly encourage people - to use *glucifer*. It integrates very well inside the Jupyter_ notebook, + to use the *visualisation* module. It integrates very well inside the Jupyter_ notebook, is parallel safe, and can take Underworld function as arguments. .. warning:: - We provide some basic examples. Look at the glucifer_ documentation for more + We provide some basic examples. Look at the Lavavu_ documentation for more details. Simple examples: @@ -69,9 +68,9 @@ viscosityField, densityField etc.): .. code:: python - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> Model = GEO.Model() - >>> Fig = glucifer.Figure(figsize=(1200,400), title="Material Field") + >>> Fig = vis.Figure(figsize=(1200,400), title="Material Field") >>> Fig.Points(Model.swarm, Model.materialField, fn_size=3.0) ... >>> Fig.show() @@ -85,11 +84,11 @@ variables (e.g. projMaterialField, projViscosityField etc.) .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() - >>> Fig = glucifer.Figure(figsize=(1200,400), title="Temperature") + >>> Fig = vis.Figure(figsize=(1200,400), title="Temperature") >>> Fig.Surface(Model.mesh, GEO.dim(Model.temperature, u.degK)) ... >>> Fig.show() @@ -107,11 +106,11 @@ The example below plots a temperature field with the velocity vectors on top: .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() - >>> Fig = glucifer.Figure(figsize=(1200,400), title="Velocity") + >>> Fig = vis.Figure(figsize=(1200,400), title="Velocity") >>> Fig.Surface(Model.mesh, GEO.dim(Model.temperature, u.degK)) ... >>> Fig.VectorArrows(Model.mesh, Model.velocityField) @@ -481,14 +480,14 @@ There are a range of available/pre-defined shapes .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() >>> shape = GEO.shapes.Layer(top=30.*u.kilometre, bottom=0.*u.kilometre) >>> material = Model.add_material(name="Material", shape=shape) - >>> Fig = glucifer.Figure(figsize=(1200,400)) + >>> Fig = vis.Figure(figsize=(1200,400)) >>> Fig.Points(Model.swarm, Model.materialField) ... >>> Fig.show() @@ -500,7 +499,7 @@ There are a range of available/pre-defined shapes .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() @@ -509,7 +508,7 @@ There are a range of available/pre-defined shapes ... (35.* u.kilometre, 5.*u.kilometre)]) >>> material = Model.add_material(name="Material", shape=polygon) - >>> Fig = glucifer.Figure(figsize=(1200,400)) + >>> Fig = vis.Figure(figsize=(1200,400)) >>> Fig.Points(Model.swarm, Model.materialField) >>> Fig.show() @@ -520,7 +519,7 @@ There are a range of available/pre-defined shapes .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() @@ -528,7 +527,7 @@ There are a range of available/pre-defined shapes ... minX=10.*u.kilometre, maxX=15*u.kilometre) >>> material = Model.add_material(name="Material", shape=box) - >>> Fig = glucifer.Figure(figsize=(1200,400)) + >>> Fig = vis.Figure(figsize=(1200,400)) >>> Fig.Points(Model.swarm, Model.materialField) >>> Fig.show() @@ -539,7 +538,7 @@ There are a range of available/pre-defined shapes .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() @@ -547,7 +546,7 @@ There are a range of available/pre-defined shapes ... radius=10.*u.kilometre) >>> material = Model.add_material(name="Material", shape=disk) - >>> Fig = glucifer.Figure(figsize=(1200,400)) + >>> Fig = vis.Figure(figsize=(1200,400)) >>> Fig.Points(Model.swarm, Model.materialField) >>> Fig.show() @@ -559,7 +558,6 @@ There are a range of available/pre-defined shapes .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer >>> u = GEO.u >>> Model = GEO.Model(elementRes=(16, 16, 16), @@ -574,7 +572,7 @@ There are a range of available/pre-defined shapes .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() @@ -583,7 +581,7 @@ There are a range of available/pre-defined shapes ... r2=10.*u.kilometre) >>> material = Model.add_material(name="Material", shape=annulus) - >>> Fig = glucifer.Figure(figsize=(400,400)) + >>> Fig = vis.Figure(figsize=(400,400)) >>> Fig.Points(Model.swarm, Model.materialField) >>> Fig.show() @@ -597,7 +595,7 @@ Several shapes can be combined to form a material shape: .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() @@ -609,7 +607,7 @@ Several shapes can be combined to form a material shape: >>> shape = disk1 | disk2 >>> material = Model.add_material(name="Material", shape=shape) - >>> Fig = glucifer.Figure(figsize=(400,400)) + >>> Fig = vis.Figure(figsize=(400,400)) >>> Fig.Points(Model.swarm, Model.materialField) >>> Fig.show() @@ -620,7 +618,7 @@ You can also take the intersection of some shapes: .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() @@ -632,7 +630,7 @@ You can also take the intersection of some shapes: >>> shape = disk1 & disk2 >>> material = Model.add_material(name="Material", shape=shape) - >>> Fig = glucifer.Figure(figsize=(400,400)) + >>> Fig = vis.Figure(figsize=(400,400)) >>> Fig.Points(Model.swarm, Model.materialField) >>> Fig.show() @@ -653,7 +651,7 @@ defined by the normal vector. .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.UnitRegistry @@ -670,7 +668,7 @@ defined by the normal vector. >>> compositeShape = halfspace1 & halfspace2 & halfspace3 & halfspace4 >>> polygon= Model.add_material(name="polygon", shape=compositeShape) - >>> Fig = glucifer.Figure() + >>> Fig = vis.Figure() >>> Fig.Points(Model.swarm, Model.materialField, cullface=False, opacity=1.) >>> Fig.Mesh(Model.mesh) >>> viewer = Fig.viewer(resolution=(1200,600)) @@ -689,7 +687,7 @@ You can add as many materials as needed: .. code:: python >>> import UWGeodynamics as GEO - >>> import glucifer + >>> from UWGeodynamics import visualisation as vis >>> u = GEO.u >>> Model = GEO.Model() @@ -703,7 +701,7 @@ You can add as many materials as needed: >>> material2 = Model.add_material(name="Material 2", shape=polygon) - >>> Fig = glucifer.Figure(figsize=(400,400)) + >>> Fig = vis.Figure(figsize=(400,400)) >>> Fig.Points(Model.swarm, Model.materialField, fn_size=3.) ... >>> Fig.show() @@ -1934,7 +1932,6 @@ See below for a sample. .. _Kitematic: https://kitematic.com/ .. _github: https://github.com/underworldcode/UWGeodynamics.git .. _Pint: https://pint.readthedocs.io/en/latest -.. _glucifer: https://underworld2.readthedocs.io/en/latest/glucifer.html .. _Underworld: https://underworld2.readthedocs.io/en/latest/index.html .. _Lavavu: https://github.com/OKaluza/LavaVu .. _HDF5: http://portal.hdfgroup.org/display/support From d1271e31a70940ecf6a12737a9ba25ee2afffd6a Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 24 Jun 2020 01:05:43 +0000 Subject: [PATCH 58/80] Remove reference to glucifer --- docs/uwgeodynamicsrc.template | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/uwgeodynamicsrc.template b/docs/uwgeodynamicsrc.template index 789b44d6..ce8734e0 100755 --- a/docs/uwgeodynamicsrc.template +++ b/docs/uwgeodynamicsrc.template @@ -35,8 +35,6 @@ # List of fields to output #default.outputs : materialField , temperature , pressureField , plasticStrain , velocityField # -# List of default glucifer outputs -#glucifer.outputs : materialField , temperature , pressureField , plasticStrain , velocityField # # swarm-layout number of particle per cell #swarm.particles.per.cell : 50 From f73ccc60cb97271bcc9a3b23eed296e2e09a4daf Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 24 Jun 2020 01:26:56 +0000 Subject: [PATCH 59/80] Update doctests, GEO.model triggers double free or corruption error. --- UWGeodynamics/Underworld_extended/_swarm.py | 2 +- .../Underworld_extended/_swarmvariable.py | 10 ++--- tests/doctests.py | 37 ++++++++++++------- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/UWGeodynamics/Underworld_extended/_swarm.py b/UWGeodynamics/Underworld_extended/_swarm.py index d1b2878b..fe7ea9a9 100644 --- a/UWGeodynamics/Underworld_extended/_swarm.py +++ b/UWGeodynamics/Underworld_extended/_swarm.py @@ -100,7 +100,7 @@ def save(self, filename, collective=False, units=None, time=None): True >>> # clean up: - >>> if uw.rank() == 0: + >>> if uw.mpi.rank == 0: ... import os; ... os.remove( "saved_swarm.h5" ) diff --git a/UWGeodynamics/Underworld_extended/_swarmvariable.py b/UWGeodynamics/Underworld_extended/_swarmvariable.py index dcfea30a..4ebafcca 100644 --- a/UWGeodynamics/Underworld_extended/_swarmvariable.py +++ b/UWGeodynamics/Underworld_extended/_swarmvariable.py @@ -256,20 +256,20 @@ def copy(self, deepcopy=False): ------- >>> import math >>> mesh = uw.mesh.FeMesh_Cartesian() - >>> swarm = uw.swarm.Swarm() - >>> swarm.populate.using_layout(uw.swarm.layouts.PerCellGaussLayout(swarm, 2) + >>> swarm = uw.swarm.Swarm(mesh) + >>> swarm.populate_using_layout(uw.swarm.layouts.PerCellGaussLayout(swarm, 2)) >>> svar = swarm.add_variable("double", 1) >>> svar.data[:] = math.exp(1.) >>> svarCopy = svar.copy() - >>> svarCopy.swarm == var.swarm + >>> svarCopy.swarm == svar.swarm True >>> svarCopy.dataType == svar.dataType True >>> import numpy as np - >>> np.allclose(svar.data,svarCopy.data) + >>> np.allclose(svar.data, svarCopy.data) False >>> svarCopy2 = svar.copy(deepcopy=True) - >>> np.allclose(svar.data,svarCopy2.data) + >>> np.allclose(svar.data, svarCopy2.data) True """ diff --git a/tests/doctests.py b/tests/doctests.py index 0668a03e..68a8430d 100644 --- a/tests/doctests.py +++ b/tests/doctests.py @@ -1,16 +1,25 @@ +import UWGeodynamics as GEO +import pkgutil, doctest, sys +import os +# lets disable metrics for tests +os.environ["UW_NO_USAGE_METRICS"] = "1" +os.environ["DOCTEST"] = "1" -if __name__ == "__main__": - import doctest - import UWGeodynamics - doctest.testmod(UWGeodynamics._model) - doctest.testmod(UWGeodynamics._boundary_conditions) - doctest.testmod(UWGeodynamics._freesurface) - doctest.testmod(UWGeodynamics._frictional_boundary) - doctest.testmod(UWGeodynamics._material) - doctest.testmod(UWGeodynamics._melt) - doctest.testmod(UWGeodynamics._mesh_advector) - doctest.testmod(UWGeodynamics._rheology) - doctest.testmod(UWGeodynamics.shapes) - doctest.testmod(UWGeodynamics.surfaceProcesses) - doctest.testmod(UWGeodynamics._utils) +test_vis = True +try: + import lavavu +except ImportError: + test_vis = False +for module in [GEO,]: + modIter = pkgutil.walk_packages(path=module.__path__, prefix=module.__name__+'.') + + for itthing, modName, bs in modIter: + mod=sys.modules.get(modName) + if modName.startswith("underworld.visualisation"): + print("Not testing `{}` as `lavavu` not found.".format(modName)) + continue + print("Testing "+modName) + res = doctest.testmod(mod) + if res.failed > 0: + raise RuntimeError("Doctest failed") From b4c14f5811aef3b50385425ca1d71d6b3d636a25 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 24 Jun 2020 06:17:21 +0000 Subject: [PATCH 60/80] Add JOSS papers references to the README --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 35628e2a..588b9722 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,14 @@ access the wide range of possibilities offered by Underworld. ![image]docs/readthedocs/src/img/SandboxCompression.gif) +## How to Cite? + +Please use the following references to cite UWGeodynamics and Underworld: + +Beucher et al., (2019). UWGeodynamics: A teaching and research tool for numerical geodynamic modelling. Journal of Open Source Software, 4(36), 1136, https://doi.org/10.21105/joss.01136 + +Mansour et al., (2020). Underworld2: Python Geodynamics Modelling for Desktop, HPC and Cloud. Journal of Open Source Software, 5(47), 1797, https://doi.org/10.21105/joss.01797 + ## UWGeodynamics and Underworld *UWGeodynamics* uses the From 18d654b5ad693037d582c71017146a8964f0cb51 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 24 Jun 2020 16:20:37 +1000 Subject: [PATCH 61/80] Move DOI to HOw to Cite section --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 588b9722..72fb4ddb 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,10 @@ Beucher et al., (2019). UWGeodynamics: A teaching and research tool for numerica Mansour et al., (2020). Underworld2: Python Geodynamics Modelling for Desktop, HPC and Cloud. Journal of Open Source Software, 5(47), 1797, https://doi.org/10.21105/joss.01797 +The Current release (**DOI** citable): + +[![DOI](https://zenodo.org/badge/114189389.svg)](https://zenodo.org/badge/latestdoi/114189389) + ## UWGeodynamics and Underworld *UWGeodynamics* uses the @@ -85,11 +89,6 @@ The third number is used for *UWGeodynamics* only (v2.7.1, v2.7.2 etc.) The development branch is based on the current *Underworld* development branch. -The Current release (**DOI** citable): - -[![DOI](https://zenodo.org/badge/114189389.svg)](https://zenodo.org/badge/latestdoi/114189389) - - ## Quick Start / Testing We provide a docker container via From 5ad6cd9e757b7c36ef87f7dd9d15d399f0344eef Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 24 Jun 2020 16:53:33 +1000 Subject: [PATCH 62/80] Typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 72fb4ddb..3f4f71ff 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ We hope that the user will naturally move to the low-level functionalities as he or her gets more confident, and by doing so will access the wide range of possibilities offered by Underworld. -![image]docs/readthedocs/src/img/SandboxCompression.gif) +![image](docs/readthedocs/src/img/SandboxCompression.gif) ## How to Cite? From 96d1c8dfdd2650b91103c4870bd2772cbd376d1f Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Wed, 24 Jun 2020 18:48:45 +1000 Subject: [PATCH 63/80] Add binder badge --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f4f71ff..40eff819 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ [![Docs](https://readthedocs.org/projects/uwgeodynamics/badge)](http://uwgeodynamics.readthedocs.org/) ![tests](https://github.com/underworldcode/UWGeodynamics/workflows/tests/badge.svg) +[![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/master) + ![image](docs/tutorials/images/Tutorial1.gif) ![image](docs/readthedocs/src/img/collision_wedge.gif) @@ -92,7 +94,7 @@ branch. ## Quick Start / Testing We provide a docker container via -[binder](https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/master). +[![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/master). This is a quick solution to get you started and run the examples and tutorials without installing anything on your machine. That is a good way to see if the software can actually be useful to you. The ressource From 2dcbba11331d983eb21ff64e10764bab48c9f7e8 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Thu, 25 Jun 2020 00:30:27 +0000 Subject: [PATCH 64/80] Add .zenodo.json file, conform to JOSS paper. --- .zenodo.json | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .zenodo.json diff --git a/.zenodo.json b/.zenodo.json new file mode 100644 index 00000000..bd4cca54 --- /dev/null +++ b/.zenodo.json @@ -0,0 +1,73 @@ +{ + "creators": [ + { + "name": "Romain Beucher", + "affiliation": "School of Earth Science, The University of Melbourne", + "orcid": "0000-0003-3891-5444" + }, + { + "name": "Louis Moresi", + "affiliation": "Research School of Earth Sciences, The Australian National University; School of Earth Science, The University of Melbourne", + "orcid": "0000-0003-3685-174X" + }, + { + "name": "Julian Giordani", + "affiliation": "School of Earth Science, The University of Melbourne", + "orcid": "0000-0003-4515-9296" + }, + { + "name": "John Mansour", + "affiliation": "Monash eResearch Centre, Monash University", + "orcid": "0000-0001-5865-1664" + }, + { + "name": "Dan Sandiford", + "affiliation": "University of Tasmania", + "orcid": "0000-0002-2207-6837" + }, + { + "name": "Rebecca Farrington", + "affiliation": "School of Earth Science, The University of Melbourne", + "orcid": "0000-0002-2594-6965" + }, + { + "name": "Luke Mondy", + "affiliation": "School of Geosciences, Earthbyte Research Group, The University of Sydney", + "orcid": "0000-0001-7779-509X" + }, + { + "name": "Claire Mallard", + "affiliation": "School of Geosciences, Earthbyte Research Group, The University of Sydney", + "orcid": "0000-0003-2595-2414" + }, + { + "name": "Patrice Rey", + "affiliation": "School of Geosciences, Earthbyte Research Group, The University of Sydney", + "orcid": "0000-0002-1767-8593" + }, + { + "name": "Guillaume Duclaux", + "affiliation": "Laboratoire Géoazur, Université Nice Sophia Antipolis, Nice", + "orcid": "0000-0002-9512-7252" + }, + { + "name": "owen kaluza", + "affiliation": "Monash eResearch Centre, Monash University", + "orcid": "0000-0001-6303-5671" + }, + { + "name": "Arijit Laik", + "affiliation": "Department of Earth Science, Faculty of Science, Vrije Universiteit", + "orcid": "0000-0002-3484-7985" + }, + { + "name": "Sara Morón", + "affiliation": "School of Geosciences, Earthbyte Research Group, The University of Sydney", + "orcid": "0000-0002-1270-4377" + } + ], + "license": "lgpl-3.0", + "title": "UWGeodynamics: A teaching an research tool for numerical geodynamic modelling", + "upload_type": "software", + "access_right": "open" +} \ No newline at end of file From 0a8211fc10a81d263ee45f7c80b1ec6c6a6db9dd Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Thu, 25 Jun 2020 00:36:20 +0000 Subject: [PATCH 65/80] Add list of binders --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 40eff819..e8c2ca74 100644 --- a/README.md +++ b/README.md @@ -93,14 +93,20 @@ branch. ## Quick Start / Testing -We provide a docker container via -[![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/master). +We provide a docker container via **Binder**. This is a quick solution to get you started and run the examples and tutorials without installing anything on your machine. That is a good way to see if the software can actually be useful to you. The ressource are however limited and you should not try to run model with high resolution. 3D models can not be run in the binder. +| | | +|-|-| +| [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/master) | master | +| [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/development) | development | +| [![Binder](https://mybinder.org/badge.svg)](hhttps://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/v2.10) | v2.10 | + + ## Where to find documentation? The full documentation is available on From 308d46d1837d3f90052c9fdeac2c9008261787c0 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Thu, 25 Jun 2020 01:26:52 +0000 Subject: [PATCH 66/80] UPdate Bonder links --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e8c2ca74..b4e75902 100644 --- a/README.md +++ b/README.md @@ -102,9 +102,9 @@ resolution. 3D models can not be run in the binder. | | | |-|-| -| [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/master) | master | -| [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/development) | development | -| [![Binder](https://mybinder.org/badge.svg)](hhttps://mybinder.org/v2/gh/rbeucher/UWGeodynamics-binder/v2.10) | v2.10 | +| [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/underworldcode/UWGeodynamics/master) | master | +| [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/underworldcode/UWGeodynamics/development) | development | +| [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/underworldcode/UWGeodynamics/v2.10) | v2.10 | ## Where to find documentation? From f9d4fe90e99d53245d551bbbbc7e14b5e49f05c0 Mon Sep 17 00:00:00 2001 From: julian Date: Wed, 1 Jul 2020 22:23:20 +1000 Subject: [PATCH 67/80] Fixes for 1_08_ViscoElasticHalfSpace, the time step size was too large --- .../examples/1_08_ViscoElasticHalfSpace.ipynb | 740 +++++++++++++++--- 1 file changed, 626 insertions(+), 114 deletions(-) diff --git a/docs/examples/1_08_ViscoElasticHalfSpace.ipynb b/docs/examples/1_08_ViscoElasticHalfSpace.ipynb index f4a6a764..ad6fa817 100644 --- a/docs/examples/1_08_ViscoElasticHalfSpace.ipynb +++ b/docs/examples/1_08_ViscoElasticHalfSpace.ipynb @@ -11,7 +11,7 @@ "\n", "$$ w = w_m exp\\Big(\\frac{-\\lambda \\rho g t}{4\\pi\\eta}\\Big) $$\n", "\n", - "where $w$ is displacement, $w_m$ the initial load magnitude, $g$ gravity, $t$ time. This solution can be charaterised by the relaxation time, $t_{visc} = 4\\pi\\eta / \\rho g \\lambda $, the time taken for the initial load to decrease by $e^{-1}$. The solution for an elastic material with the equivalent load produces the same magnitude of displacement instantaneously.\n" + "where $w$ is displacement, $w_m$ the initial load magnitude, $g$ gravity, $t$ time. This solution can be charaterised by the relaxation time, $t_{relax} = 4\\pi\\eta / \\rho g \\lambda $, the time taken for the initial load to decrease by $e^{-1}$. The solution for an elastic material with the equivalent load produces the same magnitude of displacement instantaneously.\n" ] }, { @@ -23,7 +23,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /workspace/user_data/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /opt/venv/lib/python3.7/site-packages/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -66,39 +66,69 @@ "gravity = 9.81 * u.meter / u.second**2" ] }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# material parameters\n", + "eta = 1e21 * u.pascal * u.second # viscosity of fluid (mantle)\n", + "mu = 9.5e7 * u.pascal # shear modulus\n", + "dt_e = 1e5 * u.year\n", + "\n", + "alpha = eta / mu # Maxwell relaxation time\n", + "\n", + "eta_eff = ( eta * dt_e ) / (alpha + dt_e) # for viscoelastic implementation" + ] + }, { "cell_type": "code", "execution_count": 5, "metadata": {}, + "outputs": [], + "source": [ + "# Characteristic values of the system\n", + "ref_length = 1e5 * u.meter\n", + "ref_eta = eta\n", + "ref_rho = density\n", + "ref_force = density * gravity\n", + "ref_time = dt_e / 10\n", + "\n", + "KL = ref_length\n", + "Kt = ref_time\n", + "KM = ref_force * KL**2 * Kt**2\n", + "\n", + "GEO.scaling_coefficients[\"[length]\"] = KL\n", + "GEO.scaling_coefficients[\"[time]\"] = Kt\n", + "GEO.scaling_coefficients[\"[mass]\"]= KM" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Maxwell relaxation time = 316.88764640818493 year 10000000000.0 second\n", - "Observation time = 119999.9012272614 year 3786828000000.0 second\n", - "effective viscosity = 9.97366222541553e+20 pascal * second\n" + "Maxwell relaxation time: 3.34e+05 year | 33.36\n", + "Observation time: 1.00e+05 year | 10.00\n", + "effective viscosity: 2.31e+20 pascal * second | 0.23\n" ] } ], "source": [ - "# material parameters\n", - "eta = 1e21 * (u.kilogram * u.meter**-1 * u.second**-2) * u.second # viscosity of fluid (mantle)\n", - "mu = 100e9 * (u.kilogram * u.meter**-1 * u.second**-2) # shear modulus\n", - "\n", - "alpha = eta / mu # Maxwell relaxation time\n", - "dt_e = 120e3 * 3.15569e7 * u.seconds # equivalent to t_visc, the load relaxation time\n", - "\n", - "eta_eff = ( eta * dt_e ) / (alpha + dt_e) # for viscoelastic implementation\n", - "\n", - "print(\"Maxwell relaxation time = \", alpha.to(u.year), alpha)\n", - "print(\"Observation time = \", dt_e.to(u.year), dt_e)\n", - "print(\"effective viscosity = \", eta_eff.to(u.pascal * u.second))" + "# Dimensional and dimensionless parameters\n", + "print(f\"Maxwell relaxation time: {alpha.to(u.year):.2e} | {GEO.nd(alpha):.2f}\")\n", + "print(f\"Observation time: {dt_e.to(u.year):.2e} | {GEO.nd(dt_e):.2f}\")\n", + "print(f\"effective viscosity: {eta_eff.to(u.pascal * u.second):.2e} | {GEO.nd(eta_eff):.2f}\")" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -109,13 +139,13 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# analytic solution\n", "xMax = maxX - minX\n", - "x = np.linspace(0, xMax.magnitude, 100+1)\n", + "x = np.linspace(0, xMax.magnitude, 200+1)\n", "\n", "# initial displacement\n", "w_0 = w_m * np.cos(2.*np.pi*(x*u.meter)/Lambda)" @@ -123,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -144,38 +174,11 @@ "# Scaling" ] }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Characteristic values of the system\n", - "model_height = maxY-minY\n", - "# refViscosity = asth_visc \n", - "bodyforce = density * gravity\n", - "\n", - "KL = model_height \n", - "Kt = t_relax\n", - "KM = bodyforce * KL**2 * Kt**2" - ] - }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], - "source": [ - "GEO.scaling_coefficients[\"[length]\"] = KL\n", - "GEO.scaling_coefficients[\"[time]\"] = Kt\n", - "GEO.scaling_coefficients[\"[mass]\"]= KM" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], "source": [ "Model = GEO.Model(elementRes=(128, 32),\n", " minCoord=(minX, minY),\n", @@ -186,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -202,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -212,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -236,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -253,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -263,12 +266,12 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ - "mantle.elasticity = GEO.Elasticity(shear_modulus=0.1 * u.gigapascal, \n", - " observation_time=120000. * u.years)" + "mantle.elasticity = GEO.Elasticity(shear_modulus=mu, \n", + " observation_time=dt_e)" ] }, { @@ -280,16 +283,16 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "" ] }, - "execution_count": 18, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -307,18 +310,16 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ - "coords = np.ndarray((201, 2))\n", - "coords[:, 0] = np.linspace(GEO.nd(minX), GEO.nd(maxX), 201)\n", - "coords[:, 1] = GEO.nd(w_m) * np.cos(2. * np.pi * coords[:, 0] / GEO.nd(Lambda))\n", - "\n", - "tracerSurface = Model.add_passive_tracers(name=\"Tracer Swarm\", vertices=coords)\n", - "\n", + "import numpy as np\n", + "coords = np.ndarray((1, 2))\n", "coords[:, 1] = GEO.nd(w_m)\n", - "tracerSolo = Model.add_passive_tracers(name=\"Single Tracer\", vertices=coords)" + "coords\n", + "tracerSolo = Model.add_passive_tracers(name=\"Single Tracer\", \n", + " vertices=coords[0])" ] }, { @@ -330,13 +331,13 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -353,7 +354,6 @@ "\n", "figMaterial = vis.Figure(figsize=(1600,400))\n", "figMaterial.Mesh(Model.mesh,opacity=0.5)\n", - "figMaterial.Points(tracerSurface, pointSize=3, colourBar=False)\n", "figMaterial.Points(tracerSolo, pointSize=10, colourBar=False)\n", "figMaterial.Points(Model.swarm, Model.materialField, fn_mask=materialFilter, \n", " pointSize=2, colourBar=False, valueRange=[0,1])\n", @@ -363,7 +363,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -372,7 +372,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -387,50 +387,551 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ - "Model.postSolveHook = postSolveHook" + "Model.post_solve_functions['tracer_analysis'] = postSolveHook" ] }, { "cell_type": "code", "execution_count": 23, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Time: 3690.39104147 year dt: 3690.39104147 year\n", - "Time: 7979.41955444 year dt: 4289.02851297 year\n", - "Time: 13233.7949838 year dt: 5254.37542936 year\n", - "Time: 19343.8926481 year dt: 6110.09766434 year\n", - "Time: 27853.3715224 year dt: 8509.47887424 year\n", - "Time: 39042.4902194 year dt: 11189.118697 year\n", - "Time: 54823.146692 year dt: 15780.6564726 year\n", - "Time: 86055.7014245 year dt: 31232.5547325 year\n", - "Time: 126055.701424 year dt: 40000.0 year\n", - "Time: 165256.17981 year dt: 39200.4783859 year\n", - "Time: 190794.699546 year dt: 25538.5197355 year\n", - "Time: 230794.699546 year dt: 40000.0 year\n", - "Time: 252767.415756 year dt: 21972.7162101 year\n", - "Time: 279037.982791 year dt: 26270.5670355 year\n", - "Time: 302428.695554 year dt: 23390.7127622 year\n", - "Time: 327643.066502 year dt: 25214.370948 year\n", - "Time: 343754.837628 year dt: 16111.7711262 year\n", - "Time: 369916.402323 year dt: 26161.5646949 year\n", - "Time: 388397.268833 year dt: 18480.8665105 year\n", - "Time: 413100.487728 year dt: 24703.2188948 year\n", - "Time: 430304.363351 year dt: 17203.875623 year\n", - "Time: 456908.059627 year dt: 26603.6962756 year\n", - "Time: 475119.740619 year dt: 18211.6809925 year\n", - "Time: 508031.215383 year dt: 32911.4747643 year\n", - "Time: 525541.549981 year dt: 17510.3345973 year\n", - "Time: 551997.591866 year dt: 26456.0418853 year\n", - "Time: 569822.165561 year dt: 17824.5736951 year\n", - "Time: 600000.0 year dt: 30177.834439 year\n" + "Running with UWGeodynamics version 2.9.5\n", + "Options: -Q22_pc_type uw -ksp_type bsscr -pc_type none -ksp_k2_type NULL -rescale_equations False -remove_constant_pressure_null_space False -change_backsolve False -change_A11rhspresolve False -restore_K False -A11_ksp_type preonly -A11_pc_type lu -scr_ksp_type fgmres -scr_ksp_rtol 1e-05 -A11_mg_active False\n", + "Step: 1 Model Time: 1230.1 year dt: 1230.1 year (2020-07-01 11:11:41)\n", + "Step: 2 Model Time: 2460.2 year dt: 1230.1 year (2020-07-01 11:11:43)\n", + "Step: 3 Model Time: 3690.2 year dt: 1230.1 year (2020-07-01 11:11:44)\n", + "Step: 4 Model Time: 4920.3 year dt: 1230.1 year (2020-07-01 11:11:46)\n", + "Step: 5 Model Time: 6150.4 year dt: 1230.1 year (2020-07-01 11:11:47)\n", + "Step: 6 Model Time: 7380.5 year dt: 1230.1 year (2020-07-01 11:11:49)\n", + "Step: 7 Model Time: 8610.5 year dt: 1230.1 year (2020-07-01 11:11:50)\n", + "Step: 8 Model Time: 9840.6 year dt: 1230.1 year (2020-07-01 11:11:52)\n", + "Step: 9 Model Time: 11070.7 year dt: 1230.1 year (2020-07-01 11:11:53)\n", + "Step: 10 Model Time: 12300.8 year dt: 1230.1 year (2020-07-01 11:11:55)\n", + "Step: 11 Model Time: 13530.8 year dt: 1230.1 year (2020-07-01 11:11:57)\n", + "Step: 12 Model Time: 14760.9 year dt: 1230.1 year (2020-07-01 11:11:58)\n", + "Step: 13 Model Time: 15991.0 year dt: 1230.1 year (2020-07-01 11:12:00)\n", + "Step: 14 Model Time: 17221.1 year dt: 1230.1 year (2020-07-01 11:12:01)\n", + "Step: 15 Model Time: 18451.2 year dt: 1230.1 year (2020-07-01 11:12:02)\n", + "Step: 16 Model Time: 19681.2 year dt: 1230.1 year (2020-07-01 11:12:04)\n", + "Step: 17 Model Time: 20911.3 year dt: 1230.1 year (2020-07-01 11:12:05)\n", + "Step: 18 Model Time: 22141.4 year dt: 1230.1 year (2020-07-01 11:12:07)\n", + "Step: 19 Model Time: 23371.5 year dt: 1230.1 year (2020-07-01 11:12:08)\n", + "Step: 20 Model Time: 24601.5 year dt: 1230.1 year (2020-07-01 11:12:10)\n", + "Step: 21 Model Time: 25831.6 year dt: 1230.1 year (2020-07-01 11:12:13)\n", + "Step: 22 Model Time: 27061.7 year dt: 1230.1 year (2020-07-01 11:12:15)\n", + "Step: 23 Model Time: 28291.8 year dt: 1230.1 year (2020-07-01 11:12:18)\n", + "Step: 24 Model Time: 29521.8 year dt: 1230.1 year (2020-07-01 11:12:20)\n", + "Step: 25 Model Time: 30751.9 year dt: 1230.1 year (2020-07-01 11:12:22)\n", + "Step: 26 Model Time: 31982.0 year dt: 1230.1 year (2020-07-01 11:12:25)\n", + "Step: 27 Model Time: 33212.1 year dt: 1230.1 year (2020-07-01 11:12:27)\n", + "Step: 28 Model Time: 34442.2 year dt: 1230.1 year (2020-07-01 11:12:29)\n", + "Step: 29 Model Time: 35672.2 year dt: 1230.1 year (2020-07-01 11:12:31)\n", + "Step: 30 Model Time: 36902.3 year dt: 1230.1 year (2020-07-01 11:12:33)\n", + "Step: 31 Model Time: 38132.4 year dt: 1230.1 year (2020-07-01 11:12:35)\n", + "Step: 32 Model Time: 39362.5 year dt: 1230.1 year (2020-07-01 11:12:37)\n", + "Step: 33 Model Time: 40592.5 year dt: 1230.1 year (2020-07-01 11:12:40)\n", + "Step: 34 Model Time: 41822.6 year dt: 1230.1 year (2020-07-01 11:12:42)\n", + "Step: 35 Model Time: 43052.7 year dt: 1230.1 year (2020-07-01 11:12:44)\n", + "Step: 36 Model Time: 44282.8 year dt: 1230.1 year (2020-07-01 11:12:46)\n", + "Step: 37 Model Time: 45512.8 year dt: 1230.1 year (2020-07-01 11:12:49)\n", + "Step: 38 Model Time: 46742.9 year dt: 1230.1 year (2020-07-01 11:12:51)\n", + "Step: 39 Model Time: 47973.0 year dt: 1230.1 year (2020-07-01 11:12:53)\n", + "Step: 40 Model Time: 49203.1 year dt: 1230.1 year (2020-07-01 11:12:56)\n", + "Step: 41 Model Time: 50433.1 year dt: 1230.1 year (2020-07-01 11:12:58)\n", + "Step: 42 Model Time: 51663.2 year dt: 1230.1 year (2020-07-01 11:13:00)\n", + "Step: 43 Model Time: 52893.3 year dt: 1230.1 year (2020-07-01 11:13:02)\n", + "Step: 44 Model Time: 54123.4 year dt: 1230.1 year (2020-07-01 11:13:04)\n", + "Step: 45 Model Time: 55353.5 year dt: 1230.1 year (2020-07-01 11:13:06)\n", + "Step: 46 Model Time: 56583.5 year dt: 1230.1 year (2020-07-01 11:13:08)\n", + "Step: 47 Model Time: 57813.6 year dt: 1230.1 year (2020-07-01 11:13:10)\n", + "Step: 48 Model Time: 59043.7 year dt: 1230.1 year (2020-07-01 11:13:13)\n", + "Step: 49 Model Time: 60273.8 year dt: 1230.1 year (2020-07-01 11:13:15)\n", + "Step: 50 Model Time: 61503.8 year dt: 1230.1 year (2020-07-01 11:13:17)\n", + "Step: 51 Model Time: 62733.9 year dt: 1230.1 year (2020-07-01 11:13:19)\n", + "Step: 52 Model Time: 63964.0 year dt: 1230.1 year (2020-07-01 11:13:22)\n", + "Step: 53 Model Time: 65194.1 year dt: 1230.1 year (2020-07-01 11:13:24)\n", + "Step: 54 Model Time: 66424.1 year dt: 1230.1 year (2020-07-01 11:13:26)\n", + "Step: 55 Model Time: 67654.2 year dt: 1230.1 year (2020-07-01 11:13:28)\n", + "Step: 56 Model Time: 68884.3 year dt: 1230.1 year (2020-07-01 11:13:30)\n", + "Step: 57 Model Time: 70114.4 year dt: 1230.1 year (2020-07-01 11:13:32)\n", + "Step: 58 Model Time: 71344.5 year dt: 1230.1 year (2020-07-01 11:13:35)\n", + "Step: 59 Model Time: 72574.5 year dt: 1230.1 year (2020-07-01 11:13:37)\n", + "Step: 60 Model Time: 73804.6 year dt: 1230.1 year (2020-07-01 11:13:39)\n", + "Step: 61 Model Time: 75034.7 year dt: 1230.1 year (2020-07-01 11:13:41)\n", + "Step: 62 Model Time: 76264.8 year dt: 1230.1 year (2020-07-01 11:13:43)\n", + "Step: 63 Model Time: 77494.8 year dt: 1230.1 year (2020-07-01 11:13:45)\n", + "Step: 64 Model Time: 78724.9 year dt: 1230.1 year (2020-07-01 11:13:47)\n", + "Step: 65 Model Time: 79955.0 year dt: 1230.1 year (2020-07-01 11:13:49)\n", + "Step: 66 Model Time: 81185.1 year dt: 1230.1 year (2020-07-01 11:13:52)\n", + "Step: 67 Model Time: 82415.1 year dt: 1230.1 year (2020-07-01 11:13:54)\n", + "Step: 68 Model Time: 83645.2 year dt: 1230.1 year (2020-07-01 11:13:56)\n", + "Step: 69 Model Time: 84875.3 year dt: 1230.1 year (2020-07-01 11:13:58)\n", + "Step: 70 Model Time: 86105.4 year dt: 1230.1 year (2020-07-01 11:14:00)\n", + "Step: 71 Model Time: 87335.5 year dt: 1230.1 year (2020-07-01 11:14:02)\n", + "Step: 72 Model Time: 88565.5 year dt: 1230.1 year (2020-07-01 11:14:04)\n", + "Step: 73 Model Time: 89795.6 year dt: 1230.1 year (2020-07-01 11:14:06)\n", + "Step: 74 Model Time: 91025.7 year dt: 1230.1 year (2020-07-01 11:14:09)\n", + "Step: 75 Model Time: 92255.8 year dt: 1230.1 year (2020-07-01 11:14:11)\n", + "Step: 76 Model Time: 93485.8 year dt: 1230.1 year (2020-07-01 11:14:13)\n", + "Step: 77 Model Time: 94715.9 year dt: 1230.1 year (2020-07-01 11:14:15)\n", + "Step: 78 Model Time: 95946.0 year dt: 1230.1 year (2020-07-01 11:14:17)\n", + "Step: 79 Model Time: 97176.1 year dt: 1230.1 year (2020-07-01 11:14:19)\n", + "Step: 80 Model Time: 98406.1 year dt: 1230.1 year (2020-07-01 11:14:21)\n", + "Step: 81 Model Time: 99636.2 year dt: 1230.1 year (2020-07-01 11:14:24)\n", + "Step: 82 Model Time: 100866.3 year dt: 1230.1 year (2020-07-01 11:14:26)\n", + "Step: 83 Model Time: 102096.4 year dt: 1230.1 year (2020-07-01 11:14:28)\n", + "Step: 84 Model Time: 103326.5 year dt: 1230.1 year (2020-07-01 11:14:31)\n", + "Step: 85 Model Time: 104556.5 year dt: 1230.1 year (2020-07-01 11:14:33)\n", + "Step: 86 Model Time: 105786.6 year dt: 1230.1 year (2020-07-01 11:14:36)\n", + "Step: 87 Model Time: 107016.7 year dt: 1230.1 year (2020-07-01 11:14:38)\n", + "Step: 88 Model Time: 108246.8 year dt: 1230.1 year (2020-07-01 11:14:40)\n", + "Step: 89 Model Time: 109476.8 year dt: 1230.1 year (2020-07-01 11:14:42)\n", + "Step: 90 Model Time: 110706.9 year dt: 1230.1 year (2020-07-01 11:14:44)\n", + "Step: 91 Model Time: 111937.0 year dt: 1230.1 year (2020-07-01 11:14:46)\n", + "Step: 92 Model Time: 113167.1 year dt: 1230.1 year (2020-07-01 11:14:48)\n", + "Step: 93 Model Time: 114397.1 year dt: 1230.1 year (2020-07-01 11:14:50)\n", + "Step: 94 Model Time: 115627.2 year dt: 1230.1 year (2020-07-01 11:14:53)\n", + "Step: 95 Model Time: 116857.3 year dt: 1230.1 year (2020-07-01 11:14:55)\n", + "Step: 96 Model Time: 118087.4 year dt: 1230.1 year (2020-07-01 11:14:57)\n", + "Step: 97 Model Time: 119317.4 year dt: 1230.1 year (2020-07-01 11:14:59)\n", + "Step: 98 Model Time: 120547.5 year dt: 1230.1 year (2020-07-01 11:15:01)\n", + "Step: 99 Model Time: 121777.6 year dt: 1230.1 year (2020-07-01 11:15:04)\n", + "Step: 100 Model Time: 123007.7 year dt: 1230.1 year (2020-07-01 11:15:06)\n", + "Step: 101 Model Time: 124237.8 year dt: 1230.1 year (2020-07-01 11:15:08)\n", + "Step: 102 Model Time: 125467.8 year dt: 1230.1 year (2020-07-01 11:15:11)\n", + "Step: 103 Model Time: 126697.9 year dt: 1230.1 year (2020-07-01 11:15:13)\n", + "Step: 104 Model Time: 127928.0 year dt: 1230.1 year (2020-07-01 11:15:16)\n", + "Step: 105 Model Time: 129158.1 year dt: 1230.1 year (2020-07-01 11:15:18)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step: 106 Model Time: 130388.1 year dt: 1230.1 year (2020-07-01 11:15:21)\n", + "Step: 107 Model Time: 131618.2 year dt: 1230.1 year (2020-07-01 11:15:23)\n", + "Step: 108 Model Time: 132848.3 year dt: 1230.1 year (2020-07-01 11:15:25)\n", + "Step: 109 Model Time: 134078.4 year dt: 1230.1 year (2020-07-01 11:15:28)\n", + "Step: 110 Model Time: 135308.4 year dt: 1230.1 year (2020-07-01 11:15:29)\n", + "Step: 111 Model Time: 136538.5 year dt: 1230.1 year (2020-07-01 11:15:31)\n", + "Step: 112 Model Time: 137768.6 year dt: 1230.1 year (2020-07-01 11:15:33)\n", + "Step: 113 Model Time: 138998.7 year dt: 1230.1 year (2020-07-01 11:15:34)\n", + "Step: 114 Model Time: 140228.8 year dt: 1230.1 year (2020-07-01 11:15:36)\n", + "Step: 115 Model Time: 141458.8 year dt: 1230.1 year (2020-07-01 11:15:38)\n", + "Step: 116 Model Time: 142688.9 year dt: 1230.1 year (2020-07-01 11:15:40)\n", + "Step: 117 Model Time: 143919.0 year dt: 1230.1 year (2020-07-01 11:15:42)\n", + "Step: 118 Model Time: 145149.1 year dt: 1230.1 year (2020-07-01 11:15:44)\n", + "Step: 119 Model Time: 146379.1 year dt: 1230.1 year (2020-07-01 11:15:46)\n", + "Step: 120 Model Time: 147609.2 year dt: 1230.1 year (2020-07-01 11:15:48)\n", + "Step: 121 Model Time: 148839.3 year dt: 1230.1 year (2020-07-01 11:15:49)\n", + "Step: 122 Model Time: 150069.4 year dt: 1230.1 year (2020-07-01 11:15:52)\n", + "Step: 123 Model Time: 151299.4 year dt: 1230.1 year (2020-07-01 11:15:53)\n", + "Step: 124 Model Time: 152529.5 year dt: 1230.1 year (2020-07-01 11:15:55)\n", + "Step: 125 Model Time: 153759.6 year dt: 1230.1 year (2020-07-01 11:15:57)\n", + "Step: 126 Model Time: 154989.7 year dt: 1230.1 year (2020-07-01 11:15:59)\n", + "Step: 127 Model Time: 156219.8 year dt: 1230.1 year (2020-07-01 11:16:00)\n", + "Step: 128 Model Time: 157449.8 year dt: 1230.1 year (2020-07-01 11:16:02)\n", + "Step: 129 Model Time: 158679.9 year dt: 1230.1 year (2020-07-01 11:16:03)\n", + "Step: 130 Model Time: 159910.0 year dt: 1230.1 year (2020-07-01 11:16:05)\n", + "Step: 131 Model Time: 161140.1 year dt: 1230.1 year (2020-07-01 11:16:06)\n", + "Step: 132 Model Time: 162370.1 year dt: 1230.1 year (2020-07-01 11:16:08)\n", + "Step: 133 Model Time: 163600.2 year dt: 1230.1 year (2020-07-01 11:16:10)\n", + "Step: 134 Model Time: 164830.3 year dt: 1230.1 year (2020-07-01 11:16:12)\n", + "Step: 135 Model Time: 166060.4 year dt: 1230.1 year (2020-07-01 11:16:14)\n", + "Step: 136 Model Time: 167290.4 year dt: 1230.1 year (2020-07-01 11:16:17)\n", + "Step: 137 Model Time: 168520.5 year dt: 1230.1 year (2020-07-01 11:16:19)\n", + "Step: 138 Model Time: 169750.6 year dt: 1230.1 year (2020-07-01 11:16:21)\n", + "Step: 139 Model Time: 170980.7 year dt: 1230.1 year (2020-07-01 11:16:23)\n", + "Step: 140 Model Time: 172210.8 year dt: 1230.1 year (2020-07-01 11:16:26)\n", + "Step: 141 Model Time: 173440.8 year dt: 1230.1 year (2020-07-01 11:16:28)\n", + "Step: 142 Model Time: 174670.9 year dt: 1230.1 year (2020-07-01 11:16:30)\n", + "Step: 143 Model Time: 175901.0 year dt: 1230.1 year (2020-07-01 11:16:32)\n", + "Step: 144 Model Time: 177131.1 year dt: 1230.1 year (2020-07-01 11:16:34)\n", + "Step: 145 Model Time: 178361.1 year dt: 1230.1 year (2020-07-01 11:16:36)\n", + "Step: 146 Model Time: 179591.2 year dt: 1230.1 year (2020-07-01 11:16:38)\n", + "Step: 147 Model Time: 180821.3 year dt: 1230.1 year (2020-07-01 11:16:40)\n", + "Step: 148 Model Time: 182051.4 year dt: 1230.1 year (2020-07-01 11:16:42)\n", + "Step: 149 Model Time: 183281.4 year dt: 1230.1 year (2020-07-01 11:16:44)\n", + "Step: 150 Model Time: 184511.5 year dt: 1230.1 year (2020-07-01 11:16:46)\n", + "Step: 151 Model Time: 185741.6 year dt: 1230.1 year (2020-07-01 11:16:49)\n", + "Step: 152 Model Time: 186971.7 year dt: 1230.1 year (2020-07-01 11:16:51)\n", + "Step: 153 Model Time: 188201.7 year dt: 1230.1 year (2020-07-01 11:16:53)\n", + "Step: 154 Model Time: 189431.8 year dt: 1230.1 year (2020-07-01 11:16:56)\n", + "Step: 155 Model Time: 190661.9 year dt: 1230.1 year (2020-07-01 11:16:58)\n", + "Step: 156 Model Time: 191892.0 year dt: 1230.1 year (2020-07-01 11:17:00)\n", + "Step: 157 Model Time: 193122.1 year dt: 1230.1 year (2020-07-01 11:17:02)\n", + "Step: 158 Model Time: 194352.1 year dt: 1230.1 year (2020-07-01 11:17:04)\n", + "Step: 159 Model Time: 195582.2 year dt: 1230.1 year (2020-07-01 11:17:06)\n", + "Step: 160 Model Time: 196812.3 year dt: 1230.1 year (2020-07-01 11:17:08)\n", + "Step: 161 Model Time: 198042.4 year dt: 1230.1 year (2020-07-01 11:17:10)\n", + "Step: 162 Model Time: 199272.4 year dt: 1230.1 year (2020-07-01 11:17:12)\n", + "Step: 163 Model Time: 200502.5 year dt: 1230.1 year (2020-07-01 11:17:15)\n", + "Step: 164 Model Time: 201732.6 year dt: 1230.1 year (2020-07-01 11:17:16)\n", + "Step: 165 Model Time: 202962.7 year dt: 1230.1 year (2020-07-01 11:17:19)\n", + "Step: 166 Model Time: 204192.7 year dt: 1230.1 year (2020-07-01 11:17:20)\n", + "Step: 167 Model Time: 205422.8 year dt: 1230.1 year (2020-07-01 11:17:22)\n", + "Step: 168 Model Time: 206652.9 year dt: 1230.1 year (2020-07-01 11:17:24)\n", + "Step: 169 Model Time: 207883.0 year dt: 1230.1 year (2020-07-01 11:17:26)\n", + "Step: 170 Model Time: 209113.1 year dt: 1230.1 year (2020-07-01 11:17:28)\n", + "Step: 171 Model Time: 210343.1 year dt: 1230.1 year (2020-07-01 11:17:30)\n", + "Step: 172 Model Time: 211573.2 year dt: 1230.1 year (2020-07-01 11:17:33)\n", + "Step: 173 Model Time: 212803.3 year dt: 1230.1 year (2020-07-01 11:17:35)\n", + "Step: 174 Model Time: 214033.4 year dt: 1230.1 year (2020-07-01 11:17:37)\n", + "Step: 175 Model Time: 215263.4 year dt: 1230.1 year (2020-07-01 11:17:39)\n", + "Step: 176 Model Time: 216493.5 year dt: 1230.1 year (2020-07-01 11:17:41)\n", + "Step: 177 Model Time: 217723.6 year dt: 1230.1 year (2020-07-01 11:17:43)\n", + "Step: 178 Model Time: 218953.7 year dt: 1230.1 year (2020-07-01 11:17:44)\n", + "Step: 179 Model Time: 220183.7 year dt: 1230.1 year (2020-07-01 11:17:46)\n", + "Step: 180 Model Time: 221413.8 year dt: 1230.1 year (2020-07-01 11:17:48)\n", + "Step: 181 Model Time: 222643.9 year dt: 1230.1 year (2020-07-01 11:17:49)\n", + "Step: 182 Model Time: 223874.0 year dt: 1230.1 year (2020-07-01 11:17:51)\n", + "Step: 183 Model Time: 225104.1 year dt: 1230.1 year (2020-07-01 11:17:53)\n", + "Step: 184 Model Time: 226334.1 year dt: 1230.1 year (2020-07-01 11:17:55)\n", + "Step: 185 Model Time: 227564.2 year dt: 1230.1 year (2020-07-01 11:17:57)\n", + "Step: 186 Model Time: 228794.3 year dt: 1230.1 year (2020-07-01 11:17:58)\n", + "Step: 187 Model Time: 230024.4 year dt: 1230.1 year (2020-07-01 11:18:00)\n", + "Step: 188 Model Time: 231254.4 year dt: 1230.1 year (2020-07-01 11:18:02)\n", + "Step: 189 Model Time: 232484.5 year dt: 1230.1 year (2020-07-01 11:18:03)\n", + "Step: 190 Model Time: 233714.6 year dt: 1230.1 year (2020-07-01 11:18:05)\n", + "Step: 191 Model Time: 234944.7 year dt: 1230.1 year (2020-07-01 11:18:07)\n", + "Step: 192 Model Time: 236174.7 year dt: 1230.1 year (2020-07-01 11:18:08)\n", + "Step: 193 Model Time: 237404.8 year dt: 1230.1 year (2020-07-01 11:18:10)\n", + "Step: 194 Model Time: 238634.9 year dt: 1230.1 year (2020-07-01 11:18:12)\n", + "Step: 195 Model Time: 239865.0 year dt: 1230.1 year (2020-07-01 11:18:13)\n", + "Step: 196 Model Time: 241095.1 year dt: 1230.1 year (2020-07-01 11:18:15)\n", + "Step: 197 Model Time: 242325.1 year dt: 1230.1 year (2020-07-01 11:18:17)\n", + "Step: 198 Model Time: 243555.2 year dt: 1230.1 year (2020-07-01 11:18:18)\n", + "Step: 199 Model Time: 244785.3 year dt: 1230.1 year (2020-07-01 11:18:20)\n", + "Step: 200 Model Time: 246015.4 year dt: 1230.1 year (2020-07-01 11:18:22)\n", + "Step: 201 Model Time: 247245.4 year dt: 1230.1 year (2020-07-01 11:18:23)\n", + "Step: 202 Model Time: 248475.5 year dt: 1230.1 year (2020-07-01 11:18:25)\n", + "Step: 203 Model Time: 249705.6 year dt: 1230.1 year (2020-07-01 11:18:26)\n", + "Step: 204 Model Time: 250935.7 year dt: 1230.1 year (2020-07-01 11:18:28)\n", + "Step: 205 Model Time: 252165.7 year dt: 1230.1 year (2020-07-01 11:18:30)\n", + "Step: 206 Model Time: 253395.8 year dt: 1230.1 year (2020-07-01 11:18:31)\n", + "Step: 207 Model Time: 254625.9 year dt: 1230.1 year (2020-07-01 11:18:33)\n", + "Step: 208 Model Time: 255856.0 year dt: 1230.1 year (2020-07-01 11:18:35)\n", + "Step: 209 Model Time: 257086.1 year dt: 1230.1 year (2020-07-01 11:18:36)\n", + "Step: 210 Model Time: 258316.1 year dt: 1230.1 year (2020-07-01 11:18:38)\n", + "Step: 211 Model Time: 259546.2 year dt: 1230.1 year (2020-07-01 11:18:39)\n", + "Step: 212 Model Time: 260776.3 year dt: 1230.1 year (2020-07-01 11:18:41)\n", + "Step: 213 Model Time: 262006.4 year dt: 1230.1 year (2020-07-01 11:18:42)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step: 214 Model Time: 263236.4 year dt: 1230.1 year (2020-07-01 11:18:44)\n", + "Step: 215 Model Time: 264466.5 year dt: 1230.1 year (2020-07-01 11:18:46)\n", + "Step: 216 Model Time: 265696.6 year dt: 1230.1 year (2020-07-01 11:18:47)\n", + "Step: 217 Model Time: 266926.7 year dt: 1230.1 year (2020-07-01 11:18:49)\n", + "Step: 218 Model Time: 268156.7 year dt: 1230.1 year (2020-07-01 11:18:50)\n", + "Step: 219 Model Time: 269386.8 year dt: 1230.1 year (2020-07-01 11:18:52)\n", + "Step: 220 Model Time: 270616.9 year dt: 1230.1 year (2020-07-01 11:18:54)\n", + "Step: 221 Model Time: 271847.0 year dt: 1230.1 year (2020-07-01 11:18:56)\n", + "Step: 222 Model Time: 273077.0 year dt: 1230.1 year (2020-07-01 11:18:59)\n", + "Step: 223 Model Time: 274307.1 year dt: 1230.1 year (2020-07-01 11:19:01)\n", + "Step: 224 Model Time: 275537.2 year dt: 1230.1 year (2020-07-01 11:19:03)\n", + "Step: 225 Model Time: 276767.3 year dt: 1230.1 year (2020-07-01 11:19:05)\n", + "Step: 226 Model Time: 277997.4 year dt: 1230.1 year (2020-07-01 11:19:07)\n", + "Step: 227 Model Time: 279227.4 year dt: 1230.1 year (2020-07-01 11:19:08)\n", + "Step: 228 Model Time: 280457.5 year dt: 1230.1 year (2020-07-01 11:19:10)\n", + "Step: 229 Model Time: 281687.6 year dt: 1230.1 year (2020-07-01 11:19:13)\n", + "Step: 230 Model Time: 282917.7 year dt: 1230.1 year (2020-07-01 11:19:15)\n", + "Step: 231 Model Time: 284147.7 year dt: 1230.1 year (2020-07-01 11:19:17)\n", + "Step: 232 Model Time: 285377.8 year dt: 1230.1 year (2020-07-01 11:19:19)\n", + "Step: 233 Model Time: 286607.9 year dt: 1230.1 year (2020-07-01 11:19:21)\n", + "Step: 234 Model Time: 287838.0 year dt: 1230.1 year (2020-07-01 11:19:22)\n", + "Step: 235 Model Time: 289068.0 year dt: 1230.1 year (2020-07-01 11:19:24)\n", + "Step: 236 Model Time: 290298.1 year dt: 1230.1 year (2020-07-01 11:19:26)\n", + "Step: 237 Model Time: 291528.2 year dt: 1230.1 year (2020-07-01 11:19:27)\n", + "Step: 238 Model Time: 292758.3 year dt: 1230.1 year (2020-07-01 11:19:29)\n", + "Step: 239 Model Time: 293988.4 year dt: 1230.1 year (2020-07-01 11:19:30)\n", + "Step: 240 Model Time: 295218.4 year dt: 1230.1 year (2020-07-01 11:19:32)\n", + "Step: 241 Model Time: 296448.5 year dt: 1230.1 year (2020-07-01 11:19:34)\n", + "Step: 242 Model Time: 297678.6 year dt: 1230.1 year (2020-07-01 11:19:36)\n", + "Step: 243 Model Time: 298908.7 year dt: 1230.1 year (2020-07-01 11:19:38)\n", + "Step: 244 Model Time: 300138.7 year dt: 1230.1 year (2020-07-01 11:19:40)\n", + "Step: 245 Model Time: 301368.8 year dt: 1230.1 year (2020-07-01 11:19:41)\n", + "Step: 246 Model Time: 302598.9 year dt: 1230.1 year (2020-07-01 11:19:43)\n", + "Step: 247 Model Time: 303829.0 year dt: 1230.1 year (2020-07-01 11:19:45)\n", + "Step: 248 Model Time: 305059.0 year dt: 1230.1 year (2020-07-01 11:19:47)\n", + "Step: 249 Model Time: 306289.1 year dt: 1230.1 year (2020-07-01 11:19:49)\n", + "Step: 250 Model Time: 307519.2 year dt: 1230.1 year (2020-07-01 11:19:51)\n", + "Step: 251 Model Time: 308749.3 year dt: 1230.1 year (2020-07-01 11:19:53)\n", + "Step: 252 Model Time: 309979.4 year dt: 1230.1 year (2020-07-01 11:19:55)\n", + "Step: 253 Model Time: 311209.4 year dt: 1230.1 year (2020-07-01 11:19:57)\n", + "Step: 254 Model Time: 312439.5 year dt: 1230.1 year (2020-07-01 11:19:59)\n", + "Step: 255 Model Time: 313669.6 year dt: 1230.1 year (2020-07-01 11:20:01)\n", + "Step: 256 Model Time: 314899.7 year dt: 1230.1 year (2020-07-01 11:20:02)\n", + "Step: 257 Model Time: 316129.7 year dt: 1230.1 year (2020-07-01 11:20:04)\n", + "Step: 258 Model Time: 317359.8 year dt: 1230.1 year (2020-07-01 11:20:06)\n", + "Step: 259 Model Time: 318589.9 year dt: 1230.1 year (2020-07-01 11:20:07)\n", + "Step: 260 Model Time: 319820.0 year dt: 1230.1 year (2020-07-01 11:20:09)\n", + "Step: 261 Model Time: 321050.0 year dt: 1230.1 year (2020-07-01 11:20:11)\n", + "Step: 262 Model Time: 322280.1 year dt: 1230.1 year (2020-07-01 11:20:12)\n", + "Step: 263 Model Time: 323510.2 year dt: 1230.1 year (2020-07-01 11:20:14)\n", + "Step: 264 Model Time: 324740.3 year dt: 1230.1 year (2020-07-01 11:20:15)\n", + "Step: 265 Model Time: 325970.4 year dt: 1230.1 year (2020-07-01 11:20:17)\n", + "Step: 266 Model Time: 327200.4 year dt: 1230.1 year (2020-07-01 11:20:18)\n", + "Step: 267 Model Time: 328430.5 year dt: 1230.1 year (2020-07-01 11:20:20)\n", + "Step: 268 Model Time: 329660.6 year dt: 1230.1 year (2020-07-01 11:20:22)\n", + "Step: 269 Model Time: 330890.7 year dt: 1230.1 year (2020-07-01 11:20:23)\n", + "Step: 270 Model Time: 332120.7 year dt: 1230.1 year (2020-07-01 11:20:25)\n", + "Step: 271 Model Time: 333350.8 year dt: 1230.1 year (2020-07-01 11:20:27)\n", + "Step: 272 Model Time: 334580.9 year dt: 1230.1 year (2020-07-01 11:20:28)\n", + "Step: 273 Model Time: 335811.0 year dt: 1230.1 year (2020-07-01 11:20:30)\n", + "Step: 274 Model Time: 337041.0 year dt: 1230.1 year (2020-07-01 11:20:31)\n", + "Step: 275 Model Time: 338271.1 year dt: 1230.1 year (2020-07-01 11:20:33)\n", + "Step: 276 Model Time: 339501.2 year dt: 1230.1 year (2020-07-01 11:20:35)\n", + "Step: 277 Model Time: 340731.3 year dt: 1230.1 year (2020-07-01 11:20:36)\n", + "Step: 278 Model Time: 341961.3 year dt: 1230.1 year (2020-07-01 11:20:38)\n", + "Step: 279 Model Time: 343191.4 year dt: 1230.1 year (2020-07-01 11:20:40)\n", + "Step: 280 Model Time: 344421.5 year dt: 1230.1 year (2020-07-01 11:20:42)\n", + "Step: 281 Model Time: 345651.6 year dt: 1230.1 year (2020-07-01 11:20:44)\n", + "Step: 282 Model Time: 346881.7 year dt: 1230.1 year (2020-07-01 11:20:45)\n", + "Step: 283 Model Time: 348111.7 year dt: 1230.1 year (2020-07-01 11:20:47)\n", + "Step: 284 Model Time: 349341.8 year dt: 1230.1 year (2020-07-01 11:20:49)\n", + "Step: 285 Model Time: 350571.9 year dt: 1230.1 year (2020-07-01 11:20:50)\n", + "Step: 286 Model Time: 351802.0 year dt: 1230.1 year (2020-07-01 11:20:52)\n", + "Step: 287 Model Time: 353032.0 year dt: 1230.1 year (2020-07-01 11:20:54)\n", + "Step: 288 Model Time: 354262.1 year dt: 1230.1 year (2020-07-01 11:20:55)\n", + "Step: 289 Model Time: 355492.2 year dt: 1230.1 year (2020-07-01 11:20:57)\n", + "Step: 290 Model Time: 356722.3 year dt: 1230.1 year (2020-07-01 11:20:59)\n", + "Step: 291 Model Time: 357952.3 year dt: 1230.1 year (2020-07-01 11:21:00)\n", + "Step: 292 Model Time: 359182.4 year dt: 1230.1 year (2020-07-01 11:21:02)\n", + "Step: 293 Model Time: 360412.5 year dt: 1230.1 year (2020-07-01 11:21:04)\n", + "Step: 294 Model Time: 361642.6 year dt: 1230.1 year (2020-07-01 11:21:05)\n", + "Step: 295 Model Time: 362872.7 year dt: 1230.1 year (2020-07-01 11:21:07)\n", + "Step: 296 Model Time: 364102.7 year dt: 1230.1 year (2020-07-01 11:21:09)\n", + "Step: 297 Model Time: 365332.8 year dt: 1230.1 year (2020-07-01 11:21:11)\n", + "Step: 298 Model Time: 366562.9 year dt: 1230.1 year (2020-07-01 11:21:13)\n", + "Step: 299 Model Time: 367793.0 year dt: 1230.1 year (2020-07-01 11:21:14)\n", + "Step: 300 Model Time: 369023.0 year dt: 1230.1 year (2020-07-01 11:21:16)\n", + "Step: 301 Model Time: 370253.1 year dt: 1230.1 year (2020-07-01 11:21:18)\n", + "Step: 302 Model Time: 371483.2 year dt: 1230.1 year (2020-07-01 11:21:20)\n", + "Step: 303 Model Time: 372713.3 year dt: 1230.1 year (2020-07-01 11:21:22)\n", + "Step: 304 Model Time: 373943.3 year dt: 1230.1 year (2020-07-01 11:21:24)\n", + "Step: 305 Model Time: 375173.4 year dt: 1230.1 year (2020-07-01 11:21:25)\n", + "Step: 306 Model Time: 376403.5 year dt: 1230.1 year (2020-07-01 11:21:27)\n", + "Step: 307 Model Time: 377633.6 year dt: 1230.1 year (2020-07-01 11:21:29)\n", + "Step: 308 Model Time: 378863.7 year dt: 1230.1 year (2020-07-01 11:21:32)\n", + "Step: 309 Model Time: 380093.7 year dt: 1230.1 year (2020-07-01 11:21:35)\n", + "Step: 310 Model Time: 381323.8 year dt: 1230.1 year (2020-07-01 11:21:37)\n", + "Step: 311 Model Time: 382553.9 year dt: 1230.1 year (2020-07-01 11:21:40)\n", + "Step: 312 Model Time: 383784.0 year dt: 1230.1 year (2020-07-01 11:21:43)\n", + "Step: 313 Model Time: 385014.0 year dt: 1230.1 year (2020-07-01 11:21:45)\n", + "Step: 314 Model Time: 386244.1 year dt: 1230.1 year (2020-07-01 11:21:48)\n", + "Step: 315 Model Time: 387474.2 year dt: 1230.1 year (2020-07-01 11:21:50)\n", + "Step: 316 Model Time: 388704.3 year dt: 1230.1 year (2020-07-01 11:21:52)\n", + "Step: 317 Model Time: 389934.3 year dt: 1230.1 year (2020-07-01 11:21:55)\n", + "Step: 318 Model Time: 391164.4 year dt: 1230.1 year (2020-07-01 11:21:57)\n", + "Step: 319 Model Time: 392394.5 year dt: 1230.1 year (2020-07-01 11:22:00)\n", + "Step: 320 Model Time: 393624.6 year dt: 1230.1 year (2020-07-01 11:22:02)\n", + "Step: 321 Model Time: 394854.7 year dt: 1230.1 year (2020-07-01 11:22:04)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step: 322 Model Time: 396084.7 year dt: 1230.1 year (2020-07-01 11:22:07)\n", + "Step: 323 Model Time: 397314.8 year dt: 1230.1 year (2020-07-01 11:22:09)\n", + "Step: 324 Model Time: 398544.9 year dt: 1230.1 year (2020-07-01 11:22:11)\n", + "Step: 325 Model Time: 399775.0 year dt: 1230.1 year (2020-07-01 11:22:14)\n", + "Step: 326 Model Time: 401005.0 year dt: 1230.1 year (2020-07-01 11:22:16)\n", + "Step: 327 Model Time: 402235.1 year dt: 1230.1 year (2020-07-01 11:22:18)\n", + "Step: 328 Model Time: 403465.2 year dt: 1230.1 year (2020-07-01 11:22:21)\n", + "Step: 329 Model Time: 404695.3 year dt: 1230.1 year (2020-07-01 11:22:23)\n", + "Step: 330 Model Time: 405925.3 year dt: 1230.1 year (2020-07-01 11:22:25)\n", + "Step: 331 Model Time: 407155.4 year dt: 1230.1 year (2020-07-01 11:22:28)\n", + "Step: 332 Model Time: 408385.5 year dt: 1230.1 year (2020-07-01 11:22:30)\n", + "Step: 333 Model Time: 409615.6 year dt: 1230.1 year (2020-07-01 11:22:32)\n", + "Step: 334 Model Time: 410845.6 year dt: 1230.1 year (2020-07-01 11:22:35)\n", + "Step: 335 Model Time: 412075.7 year dt: 1230.1 year (2020-07-01 11:22:37)\n", + "Step: 336 Model Time: 413305.8 year dt: 1230.1 year (2020-07-01 11:22:40)\n", + "Step: 337 Model Time: 414535.9 year dt: 1230.1 year (2020-07-01 11:22:42)\n", + "Step: 338 Model Time: 415766.0 year dt: 1230.1 year (2020-07-01 11:22:44)\n", + "Step: 339 Model Time: 416996.0 year dt: 1230.1 year (2020-07-01 11:22:47)\n", + "Step: 340 Model Time: 418226.1 year dt: 1230.1 year (2020-07-01 11:22:49)\n", + "Step: 341 Model Time: 419456.2 year dt: 1230.1 year (2020-07-01 11:22:52)\n", + "Step: 342 Model Time: 420686.3 year dt: 1230.1 year (2020-07-01 11:22:54)\n", + "Step: 343 Model Time: 421916.3 year dt: 1230.1 year (2020-07-01 11:22:57)\n", + "Step: 344 Model Time: 423146.4 year dt: 1230.1 year (2020-07-01 11:22:59)\n", + "Step: 345 Model Time: 424376.5 year dt: 1230.1 year (2020-07-01 11:23:01)\n", + "Step: 346 Model Time: 425606.6 year dt: 1230.1 year (2020-07-01 11:23:04)\n", + "Step: 347 Model Time: 426836.6 year dt: 1230.1 year (2020-07-01 11:23:06)\n", + "Step: 348 Model Time: 428066.7 year dt: 1230.1 year (2020-07-01 11:23:08)\n", + "Step: 349 Model Time: 429296.8 year dt: 1230.1 year (2020-07-01 11:23:11)\n", + "Step: 350 Model Time: 430526.9 year dt: 1230.1 year (2020-07-01 11:23:13)\n", + "Step: 351 Model Time: 431757.0 year dt: 1230.1 year (2020-07-01 11:23:15)\n", + "Step: 352 Model Time: 432987.0 year dt: 1230.1 year (2020-07-01 11:23:18)\n", + "Step: 353 Model Time: 434217.1 year dt: 1230.1 year (2020-07-01 11:23:20)\n", + "Step: 354 Model Time: 435447.2 year dt: 1230.1 year (2020-07-01 11:23:22)\n", + "Step: 355 Model Time: 436677.3 year dt: 1230.1 year (2020-07-01 11:23:25)\n", + "Step: 356 Model Time: 437907.3 year dt: 1230.1 year (2020-07-01 11:23:27)\n", + "Step: 357 Model Time: 439137.4 year dt: 1230.1 year (2020-07-01 11:23:29)\n", + "Step: 358 Model Time: 440367.5 year dt: 1230.1 year (2020-07-01 11:23:32)\n", + "Step: 359 Model Time: 441597.6 year dt: 1230.1 year (2020-07-01 11:23:34)\n", + "Step: 360 Model Time: 442827.6 year dt: 1230.1 year (2020-07-01 11:23:36)\n", + "Step: 361 Model Time: 444057.7 year dt: 1230.1 year (2020-07-01 11:23:39)\n", + "Step: 362 Model Time: 445287.8 year dt: 1230.1 year (2020-07-01 11:23:41)\n", + "Step: 363 Model Time: 446517.9 year dt: 1230.1 year (2020-07-01 11:23:44)\n", + "Step: 364 Model Time: 447748.0 year dt: 1230.1 year (2020-07-01 11:23:46)\n", + "Step: 365 Model Time: 448978.0 year dt: 1230.1 year (2020-07-01 11:23:48)\n", + "Step: 366 Model Time: 450208.1 year dt: 1230.1 year (2020-07-01 11:23:50)\n", + "Step: 367 Model Time: 451438.2 year dt: 1230.1 year (2020-07-01 11:23:52)\n", + "Step: 368 Model Time: 452668.3 year dt: 1230.1 year (2020-07-01 11:23:54)\n", + "Step: 369 Model Time: 453898.3 year dt: 1230.1 year (2020-07-01 11:23:57)\n", + "Step: 370 Model Time: 455128.4 year dt: 1230.1 year (2020-07-01 11:23:59)\n", + "Step: 371 Model Time: 456358.5 year dt: 1230.1 year (2020-07-01 11:24:02)\n", + "Step: 372 Model Time: 457588.6 year dt: 1230.1 year (2020-07-01 11:24:05)\n", + "Step: 373 Model Time: 458818.6 year dt: 1230.1 year (2020-07-01 11:24:08)\n", + "Step: 374 Model Time: 460048.7 year dt: 1230.1 year (2020-07-01 11:24:11)\n", + "Step: 375 Model Time: 461278.8 year dt: 1230.1 year (2020-07-01 11:24:13)\n", + "Step: 376 Model Time: 462508.9 year dt: 1230.1 year (2020-07-01 11:24:16)\n", + "Step: 377 Model Time: 463739.0 year dt: 1230.1 year (2020-07-01 11:24:18)\n", + "Step: 378 Model Time: 464969.0 year dt: 1230.1 year (2020-07-01 11:24:20)\n", + "Step: 379 Model Time: 466199.1 year dt: 1230.1 year (2020-07-01 11:24:22)\n", + "Step: 380 Model Time: 467429.2 year dt: 1230.1 year (2020-07-01 11:24:25)\n", + "Step: 381 Model Time: 468659.3 year dt: 1230.1 year (2020-07-01 11:24:27)\n", + "Step: 382 Model Time: 469889.3 year dt: 1230.1 year (2020-07-01 11:24:30)\n", + "Step: 383 Model Time: 471119.4 year dt: 1230.1 year (2020-07-01 11:24:32)\n", + "Step: 384 Model Time: 472349.5 year dt: 1230.1 year (2020-07-01 11:24:35)\n", + "Step: 385 Model Time: 473579.6 year dt: 1230.1 year (2020-07-01 11:24:38)\n", + "Step: 386 Model Time: 474809.6 year dt: 1230.1 year (2020-07-01 11:24:40)\n", + "Step: 387 Model Time: 476039.7 year dt: 1230.1 year (2020-07-01 11:24:43)\n", + "Step: 388 Model Time: 477269.8 year dt: 1230.1 year (2020-07-01 11:24:45)\n", + "Step: 389 Model Time: 478499.9 year dt: 1230.1 year (2020-07-01 11:24:48)\n", + "Step: 390 Model Time: 479729.9 year dt: 1230.1 year (2020-07-01 11:24:50)\n", + "Step: 391 Model Time: 480960.0 year dt: 1230.1 year (2020-07-01 11:24:52)\n", + "Step: 392 Model Time: 482190.1 year dt: 1230.1 year (2020-07-01 11:24:54)\n", + "Step: 393 Model Time: 483420.2 year dt: 1230.1 year (2020-07-01 11:24:57)\n", + "Step: 394 Model Time: 484650.3 year dt: 1230.1 year (2020-07-01 11:24:59)\n", + "Step: 395 Model Time: 485880.3 year dt: 1230.1 year (2020-07-01 11:25:01)\n", + "Step: 396 Model Time: 487110.4 year dt: 1230.1 year (2020-07-01 11:25:03)\n", + "Step: 397 Model Time: 488340.5 year dt: 1230.1 year (2020-07-01 11:25:05)\n", + "Step: 398 Model Time: 489570.6 year dt: 1230.1 year (2020-07-01 11:25:07)\n", + "Step: 399 Model Time: 490800.6 year dt: 1230.1 year (2020-07-01 11:25:09)\n", + "Step: 400 Model Time: 492030.7 year dt: 1230.1 year (2020-07-01 11:25:11)\n", + "Step: 401 Model Time: 493260.8 year dt: 1230.1 year (2020-07-01 11:25:13)\n", + "Step: 402 Model Time: 494490.9 year dt: 1230.1 year (2020-07-01 11:25:16)\n", + "Step: 403 Model Time: 495720.9 year dt: 1230.1 year (2020-07-01 11:25:18)\n", + "Step: 404 Model Time: 496951.0 year dt: 1230.1 year (2020-07-01 11:25:20)\n", + "Step: 405 Model Time: 498181.1 year dt: 1230.1 year (2020-07-01 11:25:22)\n", + "Step: 406 Model Time: 499411.2 year dt: 1230.1 year (2020-07-01 11:25:24)\n", + "Step: 407 Model Time: 500641.3 year dt: 1230.1 year (2020-07-01 11:25:26)\n", + "Step: 408 Model Time: 501871.3 year dt: 1230.1 year (2020-07-01 11:25:28)\n", + "Step: 409 Model Time: 503101.4 year dt: 1230.1 year (2020-07-01 11:25:30)\n", + "Step: 410 Model Time: 504331.5 year dt: 1230.1 year (2020-07-01 11:25:32)\n", + "Step: 411 Model Time: 505561.6 year dt: 1230.1 year (2020-07-01 11:25:34)\n", + "Step: 412 Model Time: 506791.6 year dt: 1230.1 year (2020-07-01 11:25:37)\n", + "Step: 413 Model Time: 508021.7 year dt: 1230.1 year (2020-07-01 11:25:39)\n", + "Step: 414 Model Time: 509251.8 year dt: 1230.1 year (2020-07-01 11:25:41)\n", + "Step: 415 Model Time: 510481.9 year dt: 1230.1 year (2020-07-01 11:25:43)\n", + "Step: 416 Model Time: 511711.9 year dt: 1230.1 year (2020-07-01 11:25:45)\n", + "Step: 417 Model Time: 512942.0 year dt: 1230.1 year (2020-07-01 11:25:47)\n", + "Step: 418 Model Time: 514172.1 year dt: 1230.1 year (2020-07-01 11:25:49)\n", + "Step: 419 Model Time: 515402.2 year dt: 1230.1 year (2020-07-01 11:25:51)\n", + "Step: 420 Model Time: 516632.3 year dt: 1230.1 year (2020-07-01 11:25:53)\n", + "Step: 421 Model Time: 517862.3 year dt: 1230.1 year (2020-07-01 11:25:56)\n", + "Step: 422 Model Time: 519092.4 year dt: 1230.1 year (2020-07-01 11:25:58)\n", + "Step: 423 Model Time: 520322.5 year dt: 1230.1 year (2020-07-01 11:26:00)\n", + "Step: 424 Model Time: 521552.6 year dt: 1230.1 year (2020-07-01 11:26:02)\n", + "Step: 425 Model Time: 522782.6 year dt: 1230.1 year (2020-07-01 11:26:04)\n", + "Step: 426 Model Time: 524012.7 year dt: 1230.1 year (2020-07-01 11:26:06)\n", + "Step: 427 Model Time: 525242.8 year dt: 1230.1 year (2020-07-01 11:26:08)\n", + "Step: 428 Model Time: 526472.9 year dt: 1230.1 year (2020-07-01 11:26:11)\n", + "Step: 429 Model Time: 527702.9 year dt: 1230.1 year (2020-07-01 11:26:13)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step: 430 Model Time: 528933.0 year dt: 1230.1 year (2020-07-01 11:26:15)\n", + "Step: 431 Model Time: 530163.1 year dt: 1230.1 year (2020-07-01 11:26:17)\n", + "Step: 432 Model Time: 531393.2 year dt: 1230.1 year (2020-07-01 11:26:19)\n", + "Step: 433 Model Time: 532623.3 year dt: 1230.1 year (2020-07-01 11:26:21)\n", + "Step: 434 Model Time: 533853.3 year dt: 1230.1 year (2020-07-01 11:26:23)\n", + "Step: 435 Model Time: 535083.4 year dt: 1230.1 year (2020-07-01 11:26:25)\n", + "Step: 436 Model Time: 536313.5 year dt: 1230.1 year (2020-07-01 11:26:27)\n", + "Step: 437 Model Time: 537543.6 year dt: 1230.1 year (2020-07-01 11:26:29)\n", + "Step: 438 Model Time: 538773.6 year dt: 1230.1 year (2020-07-01 11:26:31)\n", + "Step: 439 Model Time: 540003.7 year dt: 1230.1 year (2020-07-01 11:26:33)\n", + "Step: 440 Model Time: 541233.8 year dt: 1230.1 year (2020-07-01 11:26:35)\n", + "Step: 441 Model Time: 542463.9 year dt: 1230.1 year (2020-07-01 11:26:37)\n", + "Step: 442 Model Time: 543693.9 year dt: 1230.1 year (2020-07-01 11:26:39)\n", + "Step: 443 Model Time: 544924.0 year dt: 1230.1 year (2020-07-01 11:26:42)\n", + "Step: 444 Model Time: 546154.1 year dt: 1230.1 year (2020-07-01 11:26:45)\n", + "Step: 445 Model Time: 547384.2 year dt: 1230.1 year (2020-07-01 11:26:47)\n", + "Step: 446 Model Time: 548614.3 year dt: 1230.1 year (2020-07-01 11:26:49)\n", + "Step: 447 Model Time: 549844.3 year dt: 1230.1 year (2020-07-01 11:26:51)\n", + "Step: 448 Model Time: 551074.4 year dt: 1230.1 year (2020-07-01 11:26:53)\n", + "Step: 449 Model Time: 552304.5 year dt: 1230.1 year (2020-07-01 11:26:55)\n", + "Step: 450 Model Time: 553534.6 year dt: 1230.1 year (2020-07-01 11:26:57)\n", + "Step: 451 Model Time: 554764.6 year dt: 1230.1 year (2020-07-01 11:27:00)\n", + "Step: 452 Model Time: 555994.7 year dt: 1230.1 year (2020-07-01 11:27:02)\n", + "Step: 453 Model Time: 557224.8 year dt: 1230.1 year (2020-07-01 11:27:04)\n", + "Step: 454 Model Time: 558454.9 year dt: 1230.1 year (2020-07-01 11:27:06)\n", + "Step: 455 Model Time: 559684.9 year dt: 1230.1 year (2020-07-01 11:27:08)\n", + "Step: 456 Model Time: 560915.0 year dt: 1230.1 year (2020-07-01 11:27:10)\n", + "Step: 457 Model Time: 562145.1 year dt: 1230.1 year (2020-07-01 11:27:12)\n", + "Step: 458 Model Time: 563375.2 year dt: 1230.1 year (2020-07-01 11:27:14)\n", + "Step: 459 Model Time: 564605.2 year dt: 1230.1 year (2020-07-01 11:27:16)\n", + "Step: 460 Model Time: 565835.3 year dt: 1230.1 year (2020-07-01 11:27:18)\n", + "Step: 461 Model Time: 567065.4 year dt: 1230.1 year (2020-07-01 11:27:20)\n", + "Step: 462 Model Time: 568295.5 year dt: 1230.1 year (2020-07-01 11:27:23)\n", + "Step: 463 Model Time: 569525.6 year dt: 1230.1 year (2020-07-01 11:27:25)\n", + "Step: 464 Model Time: 570755.6 year dt: 1230.1 year (2020-07-01 11:27:27)\n", + "Step: 465 Model Time: 571985.7 year dt: 1230.1 year (2020-07-01 11:27:29)\n", + "Step: 466 Model Time: 573215.8 year dt: 1230.1 year (2020-07-01 11:27:31)\n", + "Step: 467 Model Time: 574445.9 year dt: 1230.1 year (2020-07-01 11:27:33)\n", + "Step: 468 Model Time: 575675.9 year dt: 1230.1 year (2020-07-01 11:27:35)\n", + "Step: 469 Model Time: 576906.0 year dt: 1230.1 year (2020-07-01 11:27:37)\n", + "Step: 470 Model Time: 578136.1 year dt: 1230.1 year (2020-07-01 11:27:39)\n", + "Step: 471 Model Time: 579366.2 year dt: 1230.1 year (2020-07-01 11:27:41)\n", + "Step: 472 Model Time: 580596.2 year dt: 1230.1 year (2020-07-01 11:27:43)\n", + "Step: 473 Model Time: 581826.3 year dt: 1230.1 year (2020-07-01 11:27:45)\n", + "Step: 474 Model Time: 583056.4 year dt: 1230.1 year (2020-07-01 11:27:47)\n", + "Step: 475 Model Time: 584286.5 year dt: 1230.1 year (2020-07-01 11:27:49)\n", + "Step: 476 Model Time: 585516.6 year dt: 1230.1 year (2020-07-01 11:27:51)\n", + "Step: 477 Model Time: 586746.6 year dt: 1230.1 year (2020-07-01 11:27:53)\n", + "Step: 478 Model Time: 587976.7 year dt: 1230.1 year (2020-07-01 11:27:55)\n", + "Step: 479 Model Time: 589206.8 year dt: 1230.1 year (2020-07-01 11:27:58)\n", + "Step: 480 Model Time: 590436.9 year dt: 1230.1 year (2020-07-01 11:28:00)\n", + "Step: 481 Model Time: 591666.9 year dt: 1230.1 year (2020-07-01 11:28:02)\n", + "Step: 482 Model Time: 592897.0 year dt: 1230.1 year (2020-07-01 11:28:04)\n", + "Step: 483 Model Time: 594127.1 year dt: 1230.1 year (2020-07-01 11:28:06)\n", + "Step: 484 Model Time: 595357.2 year dt: 1230.1 year (2020-07-01 11:28:08)\n", + "Step: 485 Model Time: 596587.2 year dt: 1230.1 year (2020-07-01 11:28:10)\n", + "Step: 486 Model Time: 597817.3 year dt: 1230.1 year (2020-07-01 11:28:12)\n", + "Step: 487 Model Time: 599047.4 year dt: 1230.1 year (2020-07-01 11:28:14)\n", + "Step: 488 Model Time: 600277.5 year dt: 1230.1 year (2020-07-01 11:28:16)\n", + "Step: 489 Model Time: 601507.6 year dt: 1230.1 year (2020-07-01 11:28:18)\n", + "Step: 490 Model Time: 602737.6 year dt: 1230.1 year (2020-07-01 11:28:20)\n", + "Step: 491 Model Time: 603967.7 year dt: 1230.1 year (2020-07-01 11:28:22)\n", + "Step: 492 Model Time: 605197.8 year dt: 1230.1 year (2020-07-01 11:28:24)\n", + "Step: 493 Model Time: 606427.9 year dt: 1230.1 year (2020-07-01 11:28:26)\n", + "Step: 494 Model Time: 607657.9 year dt: 1230.1 year (2020-07-01 11:28:28)\n", + "Step: 495 Model Time: 608888.0 year dt: 1230.1 year (2020-07-01 11:28:31)\n", + "Step: 496 Model Time: 610118.1 year dt: 1230.1 year (2020-07-01 11:28:33)\n", + "Step: 497 Model Time: 611348.2 year dt: 1230.1 year (2020-07-01 11:28:35)\n", + "Step: 498 Model Time: 612578.2 year dt: 1230.1 year (2020-07-01 11:28:37)\n", + "Step: 499 Model Time: 613808.3 year dt: 1230.1 year (2020-07-01 11:28:39)\n", + "Step: 500 Model Time: 615038.4 year dt: 1230.1 year (2020-07-01 11:28:41)\n", + "Step: 501 Model Time: 615038.4 year dt: 0.0 second (2020-07-01 11:28:43)\n" ] }, { @@ -445,18 +946,20 @@ } ], "source": [ - "Model.run_for(600000. * u.years)" + "Model.run_for(duration=tMax, dt=1e-2*t_relax)" ] }, { "cell_type": "code", "execution_count": 24, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -480,17 +983,19 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 30, "metadata": {}, "outputs": [ { "data": { - "image/png": "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YOzYsZy8ynhmEREREcnYVJTjxM144cH2OnXqUL16dQ4fPsykSZO8HExERERE3KCiHGfYMAgOvnRbcLCz/TLGmPiryqNHjyY2NtYXCUVERETEh1SU40RGwoQJEBTkvC9c2HkfGZnoxx988EFKlSrF9u3b+eKLL3wYVERERER8QUU5ochIaNbMef3661ctyQCBgYH06dMHgJEjR2Kt9UVCEREREfERFeXL3Xyz87xtW7If7dixI/nz5+eXX37hp59+8nIwEREREfElFeXLlSrlPG/fnuxHg4OD6dmzJwAjRozwZioRERER8TEV5cvVrw/jxkHXrh59vFevXuTMmZPvvvuOVatWeTmciIiIiPiKivLlQkOhWzeoVs2jj+fPn58uXboAMHz4cG8mExEREREfUlFOA3379iVr1qx89tlnbN682e04IiIiIpIGVJQT87//waBBsG+fRx8vUqQIHTt2xFrLK6+84t1sIiIiIuITKsqJeestGDwY1q71eJdnnnmGgIAApkyZwq5du7wYTkRERER8QUU5MSmYIi5OqVKlaNOmDefPn2fkyJFeCiYiIiIivqKinJi4KeJSUJQBnnvuOQDee+89/vrrr7ROJSIiIiI+pKKcmLgryh7MpZxQhQoVeOCBBzhz5gxjxozxQjARERER8RUV5cRc4xVl+O+q8rhx4/j777/TMpWIiIiI+JCKcmISXlG2NkW7Vq9enYYNG3Ls2DHefvttL4QTEREREV9QUU7MddfBTTdBSAgcPZri3QcMGADAmDFjOHbsWBqHExERERFfUFG+mj17YONGuP76FO9at25datWqxZEjRxg7dqwXwomIiIiIt6koX40xqdjVMGjQIABGjRqlq8oiIiIiGZCKclKshbNnr2nXBg0aUKtWLQ4fPqyryiIiIiIZkIry1Xz5pTPs4rHHrml3XVUWERERydhUlK8mb174558Uz6WcUIMGDbj99tt1VVlEREQkA1JRvpprWMb6cpdfVT5+/HgaBBMRERERX/B6UTbGBBpjVhljvvH2udJUkSKQNSvs3w+pKLgNGzbUVWURERGRDMgXV5SfADb54DxpKzAQSpZ0Xu/Ycc2HSXhVeeTIkbqqLCIiIpJBeLUoG2OKAvcA73nzPF6TiqWsE2rYsCE1a9bUVWURERGRDMTbV5THAM8AF7x8Hu9Ig3HKoKvKIiIiIhmR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QlhYGMuXLyf48kVWRERERDKAtB6j/AAQaq1taq299+IjTUuyX8maFerWdV5n4GniEjLGMGHCBMqUKcP69evp1auX25FEREREvMrTorwdCPJmEL/ToIHz7CdFGSB37tzMmDGD7Nmz88EHH8Qvdy0iIiLijzwtyieB1caYd40xb8Y9vBksw0tYlNPRFHypValSJd5++20AunXrxurVq11OJCIiIuIdnhblr4CXgJ+BFQkecjUVK0LBgrB3L2zZ4naaNNWpUyc6dOjAqVOnaN68OUeOHHE7koiIiEiay+LJh6y1HxpjsgJxS839Zq09571YfiAgAB55BP7913ntR4wxvPPOO6xbt44VK1bQpk0bvv32WwIDA92OJiIiIpJmPGpwxph6wFZgLDAO2KLp4TwwejS89x744dLP2bNn5/PPP6dAgQLMmTOH559/3u1IIiIiImnK00udrwGNrbV1rbV3AHcBr3svlmQExYsX59NPPyUgIICXX36Zzz//3O1IIiIiImnG06IcZK39Le6NtXYLmgXDM/v3w7RpsG2b20m8on79+rz66qsAPProo2zcuNHlRCIiIiJpw9OiHGOMec8YU+/iYyLgByuD+MDzz0PbtjBjhttJvKZPnz60bt2a48eP8+CDD/LPP/+4HUlEREQk1Twtyt1wVuXrffGx8eI2SU7Dhs6zH82nfDljDO+99x4VK1Zky5YttG/fngsXLrgdS0RERCRVPFrC2lf8ZgnrhA4ehEKFIHt2+Ptv59lPbdu2jYiICI4ePcpzzz3H8OHD3Y4kIiIicoU0WcLaGDP94vM6Y8zayx9pFdavFSwIlSvD6dPw889up/Gqm2++menTpxMYGMjLL7/MlClT3I4kIiIics2SG3rxxMXnZsC9iTzEE5lg+EWcRo0a8cYbbwDQuXNnli5d6nIiERERkWuTZFG21v558WV3a+2uhA+gu/fj+Ym45aznzXM3h4/06NGDbt26cebMGR544AF2797tdiQRERGRFPP0Zr5GiWy7Oy2D+LU6dZyxyUFBcP6822l84o033qBBgwYcOHCA++67j+PHj7sdSURERCRFkhuj3M0Ysw4oe9n45B3AOt9E9AO5csHhw7B4MWTxaNXwDC8oKIgZM2ZQunRp1qxZQ7t27TQThoiIiGQoyV1RnoozFvl/XDo2+VZrbaSXs/mX4GC3E/jc9ddf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9tDlG621B4GgpHa01i621hprbSVrbfjFx7epCev3HnzQmflixgy3k2Q41113HbNnz+aee+7h8OHD1K9fnx9++MHtWCIiIpKBJVeUz17j1+RaXHedM/tFlixuJ8mQcuTIwRdffEGbNm04duwYTZo04ZtvvnE7loiIiGRQyRXlysaYfxN5HAMq+iJgpnXihNsJMqSgoCA+/vhjunbtyunTp3nwwQeZOnWq27FEREQkA0qyKFtrA621eRJ55LbWJjn0Qq6RtfDww87cylpI45oEBgYybtw4nnvuOc6fP88jjzzC22+/7XYsERERyWA8XXBEfMUYOHcOTp+GmTPdTpNhGWMYPnw4r7zyCtZaevXqxbPPPsuFCxfcjiYiIiIZhIpyehS3+Ei/fhAQACEhEB3taqSM6plnnuHDDz8kS5YsvPrqq7Rv356zZzW8XkRERJKnopwenTzpPJ854wzF2LULoqJUlq9R+/btmTVrFrly5SI6Opq7776bf/75x+1YIiIiks6pKKdHL7105baTJ2HAAN9n8RONGzfmxx9/pHDhwixYsCB+zmURERGRq1FRTo92707ZdvFIlSpVWLp0KaGhoaxdu5bbbruNDRs2uB1LRERE0ikV5fSoePGUbRePhYSEsGTJEm6//Xb27t1LrVq1mDdvntuxREREJB1SUU6Phg2D4OBLtwUHO9sl1fLnz8+8efNo3rw5//zzD02aNGH8+PFuxxIREZF0RkU5PYqMhAkToEQJZ7q4EiWc95GRbifzGzly5GDGjBn079+f2NhYunXrxhNPPMH58+fdjiYiIiLphIpyehUZCTt3woULsH27c0X53Dm3U/mVgIAAXn75ZSZPnkxQUBBvvvkm9957r2bEEBEREUBFOWN46CFo3hymTHE7iV969NFHWbBgAQUKFGD27NncfvvtbN++3e1YIiIi4jIV5YygeXPneehQXVX2ktq1a/PLL79QoUIFNm7cSI0aNfjpp5/cjiUiIiIuUlHOCNq0gTJlnCEYuqrsNSVLluTnn3/m7rvv5tChQ9SvX59x48ZhrXU7moiIiLhARTkjyJIFnn/eef3SS7qq7EV58uTh66+/pm/fvpw/f54ePXrQqVMnTp8+7XY0ERER8TEV5Ywi7qryjh3w8cdup/FrgYGBjBo1iqlTp5IjRw4mT55MnTp12K0FX0RERDIVFeWMIjAQ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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAscAAAFzCAYAAADSRaTQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzde3zO5ePH8de1GcaqOZeckzmMDXNKSk5JS4VERciZTqT0y7eDSkRIOZSKDiiHlFKJKCnShnI+xHJIObUcN8z1++Njc5rtHrv32X3v/Xw87se93ff9+Xze27fv4/F27fpcl7HWIiIiIiIiEOB2ABERERGR7ELlWERERETkNJVjEREREZHTVI5FRERERE5TORYREREROU3lWERERETktFxuBzhb4cKFbZkyZdyOISIiIiJ+LDY2dp+1tkhq72WrclymTBliYmLcjiEiIiIifswY8+fF3tO0ChERERGR01SORUREREROUzkWERERETktW805FhEREf904sQJdu7cSUJCgttRJAfJmzcvJUqUICgoyONjVI5FRETE63bu3MkVV1xBmTJlMMa4HUdyAGst+/fvZ+fOnZQtW9bj4zStQkRERLwuISGBQoUKqRhLljHGUKhQoQz/tULlWERERLKEirFktUv5b07lWERERHKMzz77DGMMGzZsuKzzdOrUiZkzZ6b5mSFDhpzz/Q033HBZ17yY77//nujo6DQ/Ex8fz7hx41K+/+uvv2jTpo1X8vg6lWMRERHJMaZNm8aNN97ItGnTvH6t88vxzz//7PVrXsz55bh48eLplvucyqvl2BgTZ4xZbYxZZYzR1nciIiLimsOHD7NkyRLeffddPv7445TXv//+exo2bEibNm2oWLEi999/P9ZaAAYPHkytWrUIDw+ne/fuKa8nW7hwIXfddVfK9/Pnz+fuu+9m4MCBHDt2jMjISO6//34AQkJCUj43bNgwqlatSkREBAMHDrwg64wZMwgPDyciIoKbbroJcOZtd+7cmapVq1K9enUWLVp0wXHPP/88I0aMSPk+PDycuLg4Bg4cyB9//EFkZCQDBgwgLi6O8PDwNM87efJkWrVqRfPmzbn++ut58sknM/YL91FZsVrFLdbafVlwHREREfEB3pp7fH5xPd/nn39O8+bNqVChAoUKFSI2NpaaNWsCsHLlStauXUvx4sWpX78+P/30EzfeeCN9+/bl2WefBaBDhw58+eWX3HHHHSnnvOWWW+jduzd79+6lSJEiTJo0iS5dunDHHXfw5ptvsmrVqgtyfP3113z++ef88ssv5MuXjwMHDlzwmcGDBzNv3jyuvfZa4uPjARg7dizGGFavXs2GDRto1qwZmzZt8uh3M3ToUNasWZOSJy4uLuW9tM67atUqVq5cSZ48eQgLC+Phhx+mZMmSHl3TV+XoaRVHjhxh/Pjx9O/f3+0oIiIi4mXTpk2jXbt2ALRr1+6cqRW1a9emRIkSBAQEEBkZmVIeFy1aRJ06dahatSoLFy5k7dq155zTGEOHDh346KOPiI+PZ+nSpdx2221p5liwYAGdO3cmX758ABQsWPCCz9SvX59OnToxceJEkpKSAFiyZAkPPPAAABUrVqR06dIel+O0pHXexo0bc9VVV5E3b14qV67Mn3/+ednXy+68PXJsgW+NMRZ4y1r79vkfMMZ0B7oDlCpVystxznX48GF29u1L+VOniOvenTJhYVl6fRERkZwovRFebzhw4AALFy5k9erVGGNISkrCGMPw4cMByJMnT8pnAwMDOXnyJAkJCfTu3ZuYmBhKlizJ888/n+qyYJ07d+aOO+4gb9683HPPPeTKdfn1asKECfzyyy/MnTuXmjVrEhsb69FxuXLl4tSpUynfX+6mK6n9Xvydt0eOb7TW1gBuA/oYY246/wPW2rettVHW2qgiRYp4Oc65ihUrRv88eegFfPL661l6bREREck6M2fOpEOHDvz555/ExcWxY8cOypYty48//njRY5KLZeHChTl8+PBFb2ArXrw4xYsX56WXXqJz584prwcFBXHixIkLPt+0aVMmTZrE0aNHAVKdVvHHH39Qp04dBg8eTJEiRdixYwcNGjRgypQpAGzatInt27cTdt7AXpkyZVixYgUAK1asYNu2bQBcccUVHDp0KNX8npw3J/FqObbW7jr9vAeYDdT25vUuRe7SpQFYNHWqtrQUERHxU9OmTePuu+8+57XWrVunuWpFaGgo3bp1Izw8nFtvvZVatWpd9LP3338/JUuWpFKlSimvde/enWrVqqXckJesefPmtGzZkqioKCIjI8+5gS7ZgAEDqFq1KuHh4dxwww1ERETQu3dvTp06RdWqVbn33nuZPHnyOSO7yT/TgQMHqFKlCm++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PeViOQZnznFoaCjz589n7ty5rmQQERER8Xcqx56qUMF53rTJlcufvbRbv379SExMdCWHiIiIiD9TOfZU8sjxv/+6FqF3795UrFiRzZs3p6xiISIiIiKZR+XYU8WLw969sH69axFy587Nm2++CcBLL73E9u3bXcsiIiIi4o9Ujj1lDBQu7HYKGjduzD333MPRo0fp37+/23FERERE/IrKsQ967bXXyJcvHzNnzmTBggVuxxERERHxGyrHGTFjBoSFwcCBrsYoWbIk//vf/wDo27cvx48fdzWPiIiIiL9QOc6IgABntYpssBFHv379qFChAhs3bmT06NFuxxERERHxCyrHGVGpkvPs4k15yXLnzs0bb7wBwODBg9m5c6fLiURERER8n8pxRpQvD4GBsG0bJCS4nYZmzZrRqlUrjhw5whNPPOF2HBERERGfp3KcEblzw3XXgbWubQZyvlGjRhEcHMwnn3yim/NERERELpPKcUZVrOg8b9jgbo7TSpUqxaBBgwDo1asXCdlgRFtERETEV6kcZ1Q2mnec7IknnqBy5cps2bKFIUOGuB1HRERExGepHGdUixYweDDceqvbSVLkzp2bt956C4ChQ4eybt06lxOJiIiI+CaV44y66Sb43/+gbl23k5zjxhtvpFu3bpw4cYIePXpw6tQptyOJiIiI+ByVYz8ydOhQihYtypIlS5g0aZLbcURERER8jsrxpfjxRxgzBv75x+0k5yhYsCCjRo0CYMCAAezZs8flRCIiIiK+ReX4Ujz3HDz6KMTGup3kAu3bt6dZs2b8+++/9O/f3+04IiIiIj5F5fhSVK7sPGfDG9+MMYwbN468efPy0Ucfae1jERERkQxQOb4UVao4z2vXupvjIq677jqeffZZAHr06MGRI0dcTiQiIiLiG1SOL0V4uPOcTcsxQP/+/alatSpbt27lf//7n9txRERERHyCyvGlOHvkOJsumZY7d27ee+89AgICGD16NMuWLXM7koiIiEi2p3J8KQoWhGuugaNHIS7O7TQXFRUVxYABA7DW0qVLFxITE92OJCIiIpKteVSOjTFRxpjHjTHDjTGDjTFtjTEFvB0uW6tSBYoVg7//djtJmp577jkqVKjA+vXrefHFF92OIyIiIpKtGWvtxd80pjPwMLANiAX2AHmBCkB9YA3wP2vt9swIExUVZWNiYjLjVN6XkAB587qdwiM//fQTDRo0ICAggF9//ZXq1au7HUlERETENcaYWGttVGrv5Urn2HxAfWvtsYucOBK4HsiUcuxTfKQYA9SvX5++ffvyxhtv0KVLF5YvX05QUJDbsURERESynTSnVVhrx16sGJ9+f5W19rvMj+VDjl3015OtDBkyhDJlyrBq1SqGDx/udhwRERGRbMnTOcdljTEjjTGfGmPmJD/SOSavMWa5MeY3Y8xaY8wLmRM5mzh1CqpWhSuvBB9YRzgkJISJEycC8MILL7A2Gy9DJyIiIuIWT1er+AyIA94AXjvrkZZEoJG1NgKIBJobY+peYs7sJyAAjIGTJ+H3391O45EmTZrQtWtXjh8/TseOHTlx4oTbkURERESyFU/LcYK1doy1dpG19ofkR1oHWMfh098GnX5c/O4/X5R8Y9uqVe7myIDXXnuN0qVLs2LFCl5++WW344iIiIhkK56W49eNMc8ZY+oZY2okP9I7yBgTaIxZhbPKxXxr7S+XlTa7SS7HK1e6myMDrrzySiZPngzASy+9hM+sDiIiIiKSBTwtx1WBbsBQzkypGJHeQdbaJGttJFACqG2MCT//M8aY7saYGGNMzN69ez1Pnh34YDkGaNiwIY899hhJSUl06NCBYz5yU6GIiIiIt6W5znHKh4zZAlS21h6/5AsZ8yxw1Fp70VLtU+scA/z3H4SGQp48cOgQ+NDyaMeOHaNGjRps2LCBxx9/nJEjR7odSURERCRLpLXOsacjx2uA0AxetIgxJvT018FAU2BDRs6R7V11FZQrB4mJsMG3frTg4GA+/PBDAgMDGT16NN9//73bkURERERc52k5DgU2GGPmebqUG3ANsMgY8zvwK86c4y8vJ2y2NGQIfPYZlC7tdpIMi4qK4plnnsFaS6dOnTh48KDbkURERERc5em0iptTez29FSsyyuemVfiBEydOULduXVasWEHnzp1577333I4kIiIi4lWZMa0i39lLuJ0uxZUyL6K4JSgoiA8++IA8efIwadIkZs6c6XYkEREREdd4Wo7/Z4xplPyNMeZJ4E7vRPIxSUnw+uvQowd4MAqfHVWpUoURI5z7JLt168aOHTtcTiQiIiLiDk/LcUtgiDGmgTHmZaAOKseOgAB45RV4+2344w+301yyPn36cPvttxMfH88DDzxAUlKS25FEREREspxH5dhauw+nII8FigNtLmdZN79iDNSq5Xz966/uZrkMxhjee+89ihUrxuLFixk6dKjbkURERESyXJrl2BhzyBhz0BhzENgCVADuAZJfE/CLcgxQtGhR3n//fQCee+45fvnFvzY0FBEREUlPmuXYWnuFtfbKsx55rbUhya9nVchsz0/KMcCtt95Kv379SEpK4r777tPybiIiIpKjpDdyXCad940xpkRmBvJJyeU4NhZOnnQ3SyYYMmQIkZGRbN26lb59+7odR0RERCTLpDfneLgxZpYxpqMxpooxpqgxppQxppEx5kXgJ7SkGxQuDGXLwrFjsG6d2/Uuf5YAACAASURBVGkuW548eZg6dWrKLnpTpkxxO5KIiIhIlkhvWsU9wP+AMJyb8X4EPge6AhuBRtba+d4O6RNuvRWaN/eLkWOASpUqMXr0aAB69erF5s2bXU4kIiIi4n0e7ZCXVbRDXvZireXee+9lxowZREREsHTpUoKDg92OJSIiInJZMmOHPMmBjDFMnDiR6667jt9++43HHnvM7UgiIiIiXqVynJmOHYOff4bERLeTZJqrrrqKGTNmkCdPHt5++22mTp3qdiQRERERr1E5zkz16kH9+rBqldtJMlX16tVT5h93796dDRs2uJxIRERExDs8LsfGmGuNMTcYY25KfngzmE+qXt15Xr7c3Rxe0KNHD9q1a8eRI0e45557OHr0qNuRRERERDKdR+XYGDMMZ9m2QcCA048nvJjLN/nRZiDnM8bw9ttvU6FCBdasWcPDDz/sdiQRERGRTOfpyPFdQJi1toW19o7Tj5beDOaT/LgcA1xxxRXMmDGDvHnz8t5776VsNS0iIiLiLzwtx1uBIG8G8QvVqkFQEGzcCP/953Yar6hWrRpvvvkm4Kx/vMrP5leLiIhIzuZpOT4KrDLGvGWMGZP88GYwn5QnD0RGgrXOVtJ+qkuXLnTq1Iljx47RqlUrDhw44HYkERERkUzhaTmeA7wI/AzEnvWQ8yVPrfDjEVVjDOPHj6dmzZps27aN9u3bk5SU5HYsERERkcvm8Q55xpjcQIXT32601p7I7DB+sUNeXJwzclymDBjjdhqv2r59OzVr1mTfvn08/fTTDBkyxO1IIiIiIum67B3yjDENgc3AWGAcsElLuV1EmTJQtqzfF2OAUqVK8cknnxAQEMArr7zCp59+6nYkERERkcvi6bSK14Bm1tqbrbU3AbcCo7wXy094OCrvyxo1asSrr74KwIMPPsi6detcTiQiIiJy6Twtx0HW2o3J31hrN6HVKy5uyhSoWhXG5Ix7Fvv160e7du04fPgwd999N//56UodIiIi4v88Lccxxph3jDENTz8mAj4+OdiLTp6ENWvgu+/cTpIljDG88847VK1alU2bNtGxY0dOnTrldiwRERGRDPO0HPcC1gGPnH6sO/2apOaWW5znH35winIOkD9/fmbPnk1oaChz5sxh0KBBbkcSERERyTCPyrG1NtFaO9Ja2+r0Y5S1NtHb4XxWqVJQvjwcPAgrVridJstcd911TJ8+ncDAQF555RU++ugjtyOJiIiIZEia5dgYM/3082pjzO/nP7Imoo9q1Mh5XrjQ3RxZrGnTprz++usAdO3alaVLl7qcSERERMRz6Y0cP3r6ORq4I5WHXExyOc4h847P1qdPH3r16kViYiJ33XUX27dvdzuSiIiIiEfSLMfW2t2nv+xtrf3z7AfQ2/vxfFjDhs7zkiWQmPNmoLz++us0btyYPXv20LJlSw4fPux2JBEREZF0eXpDXtNUXrstM4P4nWLF4MUXYeZMCPD01+w/goKCmDFjBtdffz2//fYbHTp00AoWIiIiku2lN+e4lzFmNVDxvPnG24DVWRPRhw0aBLffDkE5c0noAgUK8MUXXxAaGspnn33GM88843YkERERkTSlN6Q5FWdu8eecO9e4prX2fi9nEz8QFhbGjBkzCAwMZOjQobz77rtuRxIRERG5qPTmHP9nrY0DXgcOnDXf+KQxpk5WBPR506bBvffCrl1uJ3FNkyZNGDt2LAA9evRg3rx5LicSERERSZ2nk2HHA2ffUXX49GuSnqlTYfp0yOGFsEePHgwcOJCkpCTatGnDqlWr3I4kIiIicgFPy7Gx1trkb6y1p4Bc3onkZ247fd/iN9+4myMbePnll7nvvvs4fPgwLVq00BJvIiIiku14Wo63GmMeMcYEnX48Cmz1ZjC/0by58zx/fo7ZSvpiAgICeO+997j55pvZvXs3LVq0ID4+3u1YIiIiIik8Lcc9gRuAXcBOoA7Q3Vuh/Eq5cnD99RAfD8uXu53GdXny5GH27NlUqlSJtWvX0qpVK44fP+52LBERERHAw3Jsrd1jrW1nrS1qrS1mrb3PWrvH2+H8RvLosaZWAM4Sb19//TVXX301ixYt4qGHHuKsWTsiIiIirvGoHBtjKhhjvjPGrDn9fTVjzCDvRvMjyeX466/dzZGNlC5dmrlz55I/f34++ugjBgwYoIIsIiIirvN0WsVE4GngBIC19negnbdC+Z2GDaFpU2jbFlQAU9SoUYNZs2YRFBTEa6+9xquvvup2JBEREcnhPC3H+ay150+Yzdl3l2VEvnzw7bcwYAAY43aabOXWW2/lgw8+wBjDwIEDmThxotuRREREJAfztBzvM8ZcB1gAY0wbYLfXUkmO0q5du5RNQnr27Mmnn37qciIRERHJqTwtx32At4CKxphdwGNAL6+l8kfWQkwMDB6c45d0S02vXr0YPHgwp06don379ixcuNDtSCIiIpIDmYzcBGWMyQ8EWGsPeSNMVFSUjYmJ8cap3WctVKgAW7bA4sXQoIHbibIday2PPfYYY8aMISQkhEWLFhEVFeV2LBEREfEzxphYa22qJSPNXe6MMf0u8joA1tqRl50upzAGWraEkSPh889VjlNhjGHUqFHs37+fKVOm0Lx5cxYvXkzlypXdjiYiIiI5RHrTKq5I5yEZceedzvPnn2vViosICAhg0qRJtGjRgv3799O4cWM2b97sdiwRERHJIdIcOcZZpeIpY8w91toZWZLIn91wAxQs6Eyt2LgRKlZ0O1G2FBQUxMyZM4mOjmbhwoU0atSIxYsXU7ZsWbejiYiIiJ9Lb+S4hXHmUDydFWH8Xq5cEB3tfP355+5myeaCg4OZM2cON954Izt37qRRo0bs2LHD7VgiIiLi59Irx98A/wLVjDEHjTGHzn7Ognz+J3lqxZw57ubwAfnz52fu3LnUqVOHuLg4GjVqxO7dWkFQREREvCfNcmytHWCtDQXmWmuvtNZecfZzFmX0L82aQYkSzpSKU6fcTpPtXXnllXzzzTfUqFGDLVu20LhxY/bs2eN2LBEREfFTHq1zbK290xhT2hjTBMAYE2yM0Q15lyIkBLZvh3ffhQBPl5nO2UJDQ/n2228JDw9n/fr1NGnShP3797sdS0RERPyQR+3MGNMNmImzEQhACeCzdI4paYxZZIxZZ4xZa4x59PKi+hFtIZ1hhQoVYsGCBYSFhbF69WpuueUW9u7d63YsERER8TMZ2SGvPnAQwFq7GSiazjEngf7W2spAXaCPMUYL1ib77z/45BM4etTtJD6jWLFiLFy4kIoVK6YU5H/++cftWCIiIuJHPC3Hidba48nfGGNyAWku1Gut3W2tXXH660PAeuDaSw3qd267Ddq1g/nz3U7iU4oXL86iRYuoXLkya9eupWHDhrpJT0RERDKNp+X4B2PM/wHBxpimwAzgC08vYowpA1QHfsloQL+VvKTbp5+6m8MHXX311SxatIiqVauyYcMGGjZsyK5du9yOJSIiIn7A03I8ENgLrAZ6AF8Bgzw50BgTAswCHrPWXrD8mzGmuzEmxhgTk6PmkN5zj/P82WeQmOhuFh9UtGhRFi5cSGRkJJs2beLmm2/WOsgiIiJy2Yz1cBtjY0wRAGutxw3WGBMEfAnMs9aOTO/zUVFRNiYmxtPT+74aNWDlSmfN4zvucDuNTzpw4ABNmzZlxYoVlC1blu+++0476YmIiEiajDGx1tqo1N5Lc+TYOJ43xuwDNgIbjTF7jTHPenBRA7wLrPekGOdIyaPH06e7m8OHFSxYkAULFlCrVi22bdtGgwYNWL9+vduxRERExEelN63icZxVKmpZawtaawsCdYD6xpjH0zm2PtABaGSMWXX60eLyI/uR5HL8+eeQkOBuFh9WoEAB5s+fz0033cSuXbto0KABOeovECIiIpJp0ivHHYD21tptyS9Ya7cCDwAd0zrQWrvEWmustdWstZGnH19dfmQ/Ur481KwJVarAX3+5ncanXXXVVXzzzTfcfvvt7N+/n0aNGvHDDz+4HUtERER8THrlOMhau+/8F0/POw7yTqQc5scfYelSKFfO7SQ+Lzg4mNmzZ9O+fXsOHTpE8+bN+fLLL92OJSIiIj4kvXJ8/BLfE08FB7udwK8EBQXx4Ycf0rNnTxISErj77ruZOnWq27FERETER+RK5/0IY8wFy68BBsjrhTw516pVcOIE1KrldhKfFxgYyLhx4yhQoACvvPIKDzzwAAcOHKBv375uRxMREZFsLs2RY2ttoLX2ylQeV1hrNa0is3zyCVSvDgMHup3EbxhjGDJkCMOGDcNay8MPP8xTTz3FqVOn3I4mIiIi2Zinm4CIN916K+TJA4sWwfbtbqfxK08++STvv/8+uXLl4tVXX6Vjx44cP64ZQSIiIpI6lePsIDQU7roLrIUPP3Q7jd/p2LEjc+fOJSQkhClTpnDbbbfx33//uR1LREREsiGV4+yi4+mV8T74wCnJkqmaNWvG4sWLufrqq1m4cGHKmsgiIiIiZ1M5zi6aNYOrr4ZNm2DZMrfT+KXq1auzdOlSwsLC+P3336lbty5r1651O5aIiIhkIyrH2UWuXGdGj8ePdzeLHytTpgw//fQTN9xwAzt37qR+/fosWLDA7VgiIiKSTagcZyc9esBVV0HRom4n8WuFChViwYIFtGrViv/++4/mzZszYcIEt2OJiIhINqBynJ2UKwd//w0jRridxO8FBwczY8YMBg4cSFJSEr169eLRRx/l5MmTbkcTERERF6kcZzd5tbdKVgkICOCVV15h8uTJBAUFMWbMGO644w6tZCEiIpKDqRxnR8eOweTJ8OOPbifJER588EEWLlxI4cKF+eabb7jhhhvYunWr27FERETEBSrH2dFbb0HnzjB4sNtJcowbb7yR5cuXU6VKFdatW0edOnX4Uf84ERERyXFUjrOjBx+EkBBYsABiY91Ok2OULVuWn3/+mdtuu419+/bRqFEjxo0bh9W60yIiIjmGynF2VKAA9OzpfD10qLtZcpgrr7ySL774gv79+3Py5En69OlDly5dSEhIcDuaiIiIZAGV4+zq8cchd26YNcvZGESyTGBgICNGjGDq1KkEBwczefJkGjRowPbt292OJiIiIl6mcpxdFS/uTK+wFl591e00OVL79u1ZunQpZcuWJSYmhpo1a7Jo0SK3Y4mIiIgXqRxnZwMGgDHwwQewc6fbaXKkiIgIYmJiaNasGfv27aNp06aMGjVK85BFRET8lMpxdnb99dC/v7N6xdVXu50mxypYsCBfffUVTz/9NElJSfTr14927dpx8OBBt6OJiIhIJjPZaQQsKirKxsTEuB1D5KJmzZpFp06dOHz4MOXLl2f69OlUr17d7VgiIiKSAcaYWGttVGrvaeTYlxw+7HaCHK9169asWLGCiIgItmzZQr169ZgwYYKmWYiIiPgJlWNfYC08/TRcey388YfbaXK866+/nqVLl9KjRw8SExPp1asX9913n6ZZiIiI+AGVY19gDPz9Nxw8CC++6HYaAYKDg5kwYQJTp04lJCSEjz/+mKioKFatWuV2NBEREbkMKse+4n//g1y54MMPYeNGt9PIae3btyc2NpZq1aqxefNm6tatyxtvvKFpFiIiIj5K5dhXlCsHnTvDqVPw/PNup5GzVKhQgWXLltG9e3cSExN55JFHuP322/nnn3/cjiYiIiIZpHLsSwYNgrx54eOPQZtRZCvBwcG89dZbzJw5kwIFCvD1119TtWpV5s6d63Y0ERERyQCVY19SqhQ884zzdc+eWr0iG2rdujW///47jRo1Yu/evURHR9O3b1+OHTvmdjQRERHxgMqxrxkwAKpUcTYISUpyO42kokSJEsyfP5/hw4cTFBTE2LFjiYqK4rfffnM7moiIiKRD5djX5MkD330Hc+bAVVe5nUYuIiAggCeeeIJly5YRFhbGunXrqFWrFi+//DInT550O56IiIhchMqxLypWDAJO/0+XmAgakcy2atSowYoVK+jVqxcnTpxg0KBB1KtXj3Xr1rkdTURERFKhcuzL/vsPbrkFGjaELVvcTiMXkS9fPsaNG8e3335LyZIliYmJoUaNGgwfPpwkTY0RERHJVlSOfdkVVzijyPHxEB0NBw64nUjS0LRpU1avXs1DDz1EYmIiTz75JA0aNGCj1q0WERHJNlSOfVlAALz/PlSt6mwM0qqVM81Csq2rrrqKd955h6+++orixYuzdOlSIiMjee211zQXWUREJBtQOfZ1V14Jc+dC8eLwww/QpQtod7Zs77bbbmPNmjV07NiRhIQEnnjiCerWrcvKlSvdjiYiIpKjqRz7g5IlnYIcEgJTpzpbTUu2V6BAAd5//33mzp1LqVKliI2NpVatWgwYMICjR4+6HU9ERCRHUjn2F5GRMH06BAbC5s3ONtPiE1q0aMHatWt57LHHsNYyYsQIwsPDmT9/vtvRREREchyVY39y222wZAlMm3ZmqTfxCSEhIYwaNYply5ZRrVo1tm3bRrNmzejYsSP79u1zO56IiEiOoQblb+rWPVOMjxyBTZvczSMZUqtWLWJiYhg6dCh58+blww8/JCwsjIkTJ3JKfw0QERHxOpVjf7Vvn7P+caNGsGuX22kkA4KCgnjqqadYvXo1jRs35sCBA3Tv3p26devy66+/uh1PRETEr6kc+6srroDgYKcY3347HDzodiLJoPLlyzN//nw++eQTrr32Wn799Vfq1KlD9+7dNdVCRETES1SO/VWePDB7NlSo4Gwv3bYtHD/udirJIGMMbdu2ZcOGDTz11FMEBgYyceJEwsLCeOutt7TDnoiISCZTOfZnhQrBV19BkSIwbx7ccYczD1l8TkhICEOHDmX16tU0adKEAwcO0LNnT+rUqcNPP/3kdjwRERG/oXLs7667Dr791inI334LTZqoIPuwihUr8u233zJjxgxKlChBbGwsN954I23btmXbtm1uxxMREfF5Ksc5QWSks8RbqVJQrRrky+d2IrkMxhjatGnDhg0bePbZZwkODmbGjBlUrFiRp556iv/++8/tiCIiIj7L2Gy01XBUVJSNiYlxO4b/2rPHmWoRGOh8n5R05mvxWTt37uT//u//+PDDDwEoUqQIgwcPpmvXruTKlcvldCIiItmPMSbWWhuV2nsaOc5JihY9U4b//ReiouDjj93NJJetRIkSfPDBB/z66680aNCAvXv30qtXLyIiIpg7dy7Z6R/AIiIi2Z3KcU41ZQqsWgXt28OgQdpu2g9ERUXxww8/MHPmTMqVK8e6deuIjo7mpptuYsmSJW7HExER8QkqxzlVnz4wcqSzm97LLzsrWcTHu51KLpMxhtatW7Nu3TpGjhxJoUKFWLJkCQ0aNCA6Oprff//d7YgiIiLZmspxTmUMPP44fPMNFCzoLPlWuzasW+d2MskEefLk4fHHH2fr1q08++yz5M+fn7lz5xIZGckDDzzA1q1b3Y4oIiKSLakc53RNm0JMjLOKxebNUKcO7NzpdirJJFdeeSUvvPACW7du5dFHHyUoKIgpU6ZQsWJF+vTpw079by0iInIOr5VjY8x7xpg9xpg13rqGZJKyZeHnn6FdO3joIShRwu1EksmKFi3K6NGj2bhxIw8++CAnT55k3LhxXHfddfTp04cdO3a4HVFERCRb8NpSbsaYm4DDwAfW2nBPjtFSbi6z1rkxL3lFi59/hvz5ISLC3VyS6datW8fgwYOZPn061lpy585N165dGThwICVLlnQ7noiIiFe5spSbtXYxcMBb5xcvMOZMMT5yBB54AGrWhKefhmPH3M0mmapy5cp8/PHHrFmzhnbt2nHixAnGjRtH+fLl6d27t0aSRUQkx3J9zrExprsxJsYYE7N3716340gya+H2252R5KFDoWpVWLDA7VSSySpXrsy0adPOKcnjx4/nuuuuo0ePHmzZssXtiCIiIlnK9XJsrX3bWhtlrY0qUqSI23EkWUgIvPGGM7UiPBz++MO5ee+uu2DjRrfTSSY7uyS3b9+ekydP8vbbbxMWFsa9997LihUr3I4oIiKSJVwvx5LN1a0LsbHOWsj58sHnn58ZURa/U7lyZaZOncq6devo0qULgYGBTJ8+nZo1a9KsWTMWLlyoHfdERMSvqRxL+nLnhv/7P9iyBbp1gxdfdDYPAdi71xlVFr9SsWJF3n33XbZt20b//v0JCQlh/vz5NG7cmNq1azNr1iySkpLcjikiIpLpvLmU2zRgKRBmjNlpjHnIW9eSLHLNNfD2286W08mGDYOwMOjUyVknWfzKtddey4gRI/jzzz958cUXKVKkCDExMbRp04awsDDeeOMNDh065HZMERGRTOPN1SraW2uvsdYGWWtLWGvf9da1xEWJic7z++9DxYrQsaPmJPuhggULMmjQIOLi4njzzTcpW7Ysf/zxB4888gglSpSgf//+bNu2ze2YIiIil03TKuTyvPEGbNrkbB4SEAAffgiVK8P992u6hR/Kly8fffr0YfPmzXz66afcdNNNHDx4kJEjR1K+fHlat27Njz/+qHnJIiLis1SO5fKVKwfvvONMq+jWzSnJU6fCnj1uJxMvCQwM5O677+aHH34gNjaWjh07EhgYmFKYo6KimDx5MkePHnU7qoiISIZ4bYe8S6Ed8vzEn3/C7Nnw2GNnXnvgAahUyRlhvvpq97KJ1+zevZsJEyYwfvx4ktcsDw0NpVOnTvTs2ZOwsDCXE4qIiDjS2iFP5Vi8b8MGpxgD5MoFrVpBr15w883OrnziVxISEpg2bRoTJkxg+fLlKa83atSIXr16ceeddxIUFORiQhERyelUjsVdp07B/Pkwfjx88cWZNZIrVYKePaFLF2fTEfE7sbGxTJgwgalTp6ZMsbjmmmvo2rUr3bp1o2TJki4nFBGRnEjlWLKPHTuc+ckTJ8Lu3c7GIrt2QWio28nEi+Lj4/nwww8ZP34869evByAgIIBmzZrRpUsXWrZsSZ48eVxOKSIiOYXKsWQ/J07AnDlOWU6em5yY6GxP3bYt3HuvU5zFr1hrWbx4MePHj2f27NkcP34ccJaKu//+++nSpQuRkZEupxQREX+nciy+4eOPz2wwEhrqbCzSs6ezyYj4nf379zN16lTee+89Vq1alfJ69erV6dy5M/fddx+FChVyMaGIiPgrlWPxDceOwSefOHOTz7qRi0aNnJLcuvWZbavFr6xcuZJJkybx0Ucf8e+//wKQO3duoqOjuf/++7n99ts17UJERDKNyrH4nhUrnJI8dSocPepsLLJmjVa38HMJCQnMmTOHSZMmMW/evJTNRK666iratGnD/fffz80330yA/pEkIiKXQeVYfFd8vLPrXtGizjxkgG3b4PHHndHkZs00muyndu3axccff8yUKVNYuXJlyuvXXnst7du35/777yciIgKjfzCJiEgGqRyLfxk4EIYNc74uV87ZYKR+fahVCwoUcDebeMX69euZMmUKU6dOZdu2bSmvV65cmfbt29OmTRsqVqzoYkIREfElKsfiX/75B959F956C7ZvP/e9W26BhQudr48fd0aXixaFIkXOPF99NZQsCQULapqGj7HWsnTpUqZMmcL06dPZt29fynvh4eG0adOGNm3aUKVKFRdTiohIdqdyLP4pKQnmzYMFC2DZMli5Em69FT77zHl/1y4oUeLix3/yibNsHDiblCxZAqVKOcU5+Tl/fu//HHJJTpw4wfz585kxYwafffYZ8fHxKe9VqlQppShXrVpVUy9EROQcKseSM1jrjBYnr2pw8CBMnw579jiPvXud5927nRHnb76BG25wPtuvH4wadeE5CxRwpmvMm3fmtVmz4KqrnLnOxpz7fP31UKyY87k9e2DnTsidG4KCLnwODdXIdSY5fvw4ixYtYsaMGcyePZsDBw6kvFehQgVatWrFnXfeSe3atXUzn4iIqByLpMraM+V0/nz44QdnU5KzH4mJUKeOMzINcPKkU76Tt8A+37vvOtthA4wdC337pv65gABn5DvZTTfBhg3OufPmPffRuvWZjVJ27YIxY5wpIQUKnPtcsCAUL+4U7xzsxIkTfP/998ycOZNPP/30nKkXxYoVIzo6mpYtW9KkSRPyaaMZEZEcSeVY5FJY64w2Hz7s3PgHzmh09+7O66dOOZ9JfrYWnn4abr/d+ez06fDKK85ugMePn3k+ftwpx//8c+ZalSvD6W2VL/Dww04hBvjxR6dIX8yqVRAR4Xw9aJAz5eT8Il2ggPPz3HnnmeMOHHBGsv1sVPXkyZMsXryYzz//nDlz5hAXF5fyXt68eWnatCktW7YkOjqaq6++2r2gIiKSpVSORbK7Q4ecTVASEpzR6oSEM4+rr3amawDExcG0afDvv06hPXDgzNf//gs//3xmnnWrVjB7durXa9LEGS1PvvaVVzqj6AUKQKFCULiw8yhSBHr3hpo1z1z/77+d94KDncIdHOzN30ymsdayZs0a5syZw5w5c1h+9kYzQJ06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\n", "text/plain": [ - "" + "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -499,13 +1004,13 @@ "\n", "fig, (ax) = plt.subplots(1, 1)\n", "fig.set_size_inches(12, 6) \n", - "ax.plot(t.to(u.years), w_t.to(u.kilometer),\n", + "ax.plot(t.m_as(u.years), w_t.m_as(u.kilometer),\n", " label='Analytic solution', color=\"k\",\n", " linestyle=\"-\", linewidth=2)\n", - "ax.plot(GEO.dimensionalise(tTracer, u.years),\n", - " GEO.dimensionalise(displacement, u.kilometer), \n", + "ax.plot(GEO.dimensionalise(tTracer, u.years).m,\n", + " GEO.dimensionalise(displacement, u.kilometer).m, \n", " label='current numeric solution', color=\"red\",\n", - " linestyle=\"--\", marker=\"o\", linewidth=2)\n", + " linestyle=\"--\", linewidth=2)\n", "ax.axhline(0.,color='black',linestyle='--')\n", "ax.axis(ticklabel_format='sci')\n", "ax.set_xlabel('Time (yrs)')\n", @@ -513,6 +1018,13 @@ "ax.legend(loc='best')\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 0b8325e0ba1ef8fbd20c5c4deaf7f9e2817f0f71 Mon Sep 17 00:00:00 2001 From: julian Date: Fri, 3 Jul 2020 14:29:39 +1000 Subject: [PATCH 68/80] Typo fix --- docs/examples/1_08_ViscoElasticHalfSpace.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/1_08_ViscoElasticHalfSpace.ipynb b/docs/examples/1_08_ViscoElasticHalfSpace.ipynb index ad6fa817..c4fd07dd 100644 --- a/docs/examples/1_08_ViscoElasticHalfSpace.ipynb +++ b/docs/examples/1_08_ViscoElasticHalfSpace.ipynb @@ -319,7 +319,7 @@ "coords[:, 1] = GEO.nd(w_m)\n", "coords\n", "tracerSolo = Model.add_passive_tracers(name=\"Single Tracer\", \n", - " vertices=coords[0])" + " vertices=coords)" ] }, { From 7cfbb4a363d41233a6eab91d005eb2dd4ca4916f Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Sun, 12 Jul 2020 23:41:25 +0000 Subject: [PATCH 69/80] Passive Tracers can now track swarm fields. This should allow tracking material indices among other things --- UWGeodynamics/_utils.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/UWGeodynamics/_utils.py b/UWGeodynamics/_utils.py index d47ea554..6c81e614 100644 --- a/UWGeodynamics/_utils.py +++ b/UWGeodynamics/_utils.py @@ -9,7 +9,7 @@ from UWGeodynamics import dimensionalise from UWGeodynamics import UnitRegistry as u from .Underworld_extended._utils import _swarmvarschema -from .Underworld_extended import Swarm +from .Underworld_extended import Swarm, SwarmVariable from scipy import spatial from mpi4py import MPI as _MPI @@ -172,7 +172,11 @@ def save(self, outputDir, checkpointID, time): obj = getattr(self, name) if not field["timeIntegration"]: - obj.data[...] = field["value"].evaluate(self) + if not isinstance(field["value"], SwarmVariable): + obj.data[...] = field["value"].evaluate(self) + else: + obj.data[...] = field["value"].evaluate(self.data) + handle = obj.save('%s.h5' % file_prefix, units=field["units"]) if rank == 0: From 83af5a79fe16a98649e51ea3911f29a2ab39ddb0 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Sun, 12 Jul 2020 23:41:25 +0000 Subject: [PATCH 70/80] Passive Tracers can now track swarm fields. This should allow tracking material indices among other things --- UWGeodynamics/_utils.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/UWGeodynamics/_utils.py b/UWGeodynamics/_utils.py index d47ea554..6c81e614 100644 --- a/UWGeodynamics/_utils.py +++ b/UWGeodynamics/_utils.py @@ -9,7 +9,7 @@ from UWGeodynamics import dimensionalise from UWGeodynamics import UnitRegistry as u from .Underworld_extended._utils import _swarmvarschema -from .Underworld_extended import Swarm +from .Underworld_extended import Swarm, SwarmVariable from scipy import spatial from mpi4py import MPI as _MPI @@ -172,7 +172,11 @@ def save(self, outputDir, checkpointID, time): obj = getattr(self, name) if not field["timeIntegration"]: - obj.data[...] = field["value"].evaluate(self) + if not isinstance(field["value"], SwarmVariable): + obj.data[...] = field["value"].evaluate(self) + else: + obj.data[...] = field["value"].evaluate(self.data) + handle = obj.save('%s.h5' % file_prefix, units=field["units"]) if rank == 0: From 1afa6b3dfbdb8b872351768e79863e15a81979fd Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 13 Jul 2020 16:08:37 +1000 Subject: [PATCH 71/80] Use source from branch to build docker --- Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 58fae7c3..7b2c3200 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,10 @@ RUN PYTHONPATH= /usr/bin/pip3 install --no-cache-dir setuptools scons # setup further virtualenv to avoid double copying back previous packages (h5py,mpi4py,etc) RUN /usr/bin/python3 -m virtualenv --python=/usr/bin/python3 ${VIRTUAL_ENV} # Compile and install the latest UWGeodynamics & Badlands -RUN pip3 install -U UWGeodynamics badlands +WORKDIR /tmp +COPY --chown=jovyan:users . /tmp/UWGeodynamics +RUN pip3 install -vvv UWGeodynamics/ +RUN pip3 install -U badlands # Stage 3: Resultant images From f80367ed9e75d0b08b3b3dbad5752e9ae9c2a2b9 Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 13 Jul 2020 16:08:37 +1000 Subject: [PATCH 72/80] Use source from branch to build docker --- Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 58fae7c3..7b2c3200 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,10 @@ RUN PYTHONPATH= /usr/bin/pip3 install --no-cache-dir setuptools scons # setup further virtualenv to avoid double copying back previous packages (h5py,mpi4py,etc) RUN /usr/bin/python3 -m virtualenv --python=/usr/bin/python3 ${VIRTUAL_ENV} # Compile and install the latest UWGeodynamics & Badlands -RUN pip3 install -U UWGeodynamics badlands +WORKDIR /tmp +COPY --chown=jovyan:users . /tmp/UWGeodynamics +RUN pip3 install -vvv UWGeodynamics/ +RUN pip3 install -U badlands # Stage 3: Resultant images From 85e0cd11b2a0d7cf79c0d2868971f558dc1b207e Mon Sep 17 00:00:00 2001 From: Julian Giordani Date: Wed, 22 Jul 2020 14:06:18 +1000 Subject: [PATCH 73/80] add_passive_tracers() 3D fix Adding 3D part for new implementation of add_passive_tracers() --- UWGeodynamics/_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UWGeodynamics/_model.py b/UWGeodynamics/_model.py index 6ed12359..73930232 100644 --- a/UWGeodynamics/_model.py +++ b/UWGeodynamics/_model.py @@ -1851,7 +1851,7 @@ def add_passive_tracers(self, name, vertices, vertices[:, 0] = x vertices[:, 1] = y else: - z = np.array(vertices[2])[..., np.newaxis] + np.array(centroids[2]).ravel() + z = np.array(vertices[:,2])[..., np.newaxis] + np.array(centroids[:,2]).ravel() z = z.ravel() vertices = np.ndarray((x.size, 3)) vertices[:, 0] = x From b656ac3b63a0a0089f0e2967118d84d8cae9e9f9 Mon Sep 17 00:00:00 2001 From: Julian Giordani Date: Thu, 23 Jul 2020 09:56:56 +1000 Subject: [PATCH 74/80] Master into new release (#194) Rebased onto master Co-authored-by: Romain Beucher --- .github/workflows/test.yml | 2 +- UWGeodynamics/_boundary_conditions.py | 40 +++++++++++++++++---------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7533a6c1..4777b2fc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,4 +17,4 @@ jobs: git checkout development pip install -e . pip install pytest - python -m pytest -vvv + python -m pytest -vvv \ No newline at end of file diff --git a/UWGeodynamics/_boundary_conditions.py b/UWGeodynamics/_boundary_conditions.py index 05eabd07..5f279b11 100644 --- a/UWGeodynamics/_boundary_conditions.py +++ b/UWGeodynamics/_boundary_conditions.py @@ -318,9 +318,13 @@ def __init__(self, Model, left=None, right=None, top=None, bottom=None, """ super(VelocityBCs, self).__init__(Model, Model.velocityField, None, - left, right, top, bottom, - front, back, nodeSets, materials, - order_wall_conditions, "Dirichlet") + left=left, right=right, + top=top, bottom=bottom, + front=front, back=back, + nodeSets=nodeSets, + materials=materials, + order_wall_conditions=order_wall_conditions, + condition_type="Dirichlet") # Link Moving Walls for arg in [self.left, self.right, self.top, self.bottom, self.front, @@ -469,10 +473,13 @@ def __init__(self, Model, left=None, right=None, top=None, bottom=None, """ super(StressBCs, self).__init__(Model, Model.tractionField, - Model.velocityField, - left, right, top, bottom, - front, back, nodeSets, materials, - order_wall_conditions, "Neumann") + Model.velocityField, + left=left, right=right, top=top, + bottom=bottom, front=front, + back=back, nodeSets=nodeSets, + materials=materials, + order_wall_conditions=order_wall_conditions, + condition_type="Neumann") _dim_temp = {"[temperature]": 1.0} @@ -545,10 +552,12 @@ def __init__(self, Model, left=None, right=None, top=None, bottom=None, """ super(TemperatureBCs, self).__init__( - Model, Model.temperature, None, left, right, top, bottom, - front, back, nodeSets, materials, order_wall_conditions, - "Dirichlet") - + Model, Model.temperature, None, left=left, right=right, + top=top, bottom=bottom, front=front, + back=back, nodeSets=nodeSets, + materials=materials, + order_wall_conditions=order_wall_conditions, + condition_type="Dirichlet") class HeatFlowBCs(BoundaryConditions): @@ -651,9 +660,12 @@ def __init__(self, Model, left=None, right=None, top=None, bottom=None, super(HeatFlowBCs, self).__init__( Model, Model._heatFlux, Model.temperature, - left, right, top, bottom, - front, back, nodeSets, materials, - order_wall_conditions, "Neumann") + left=left, right=right, top=top, + bottom=bottom, front=front, + back=back, nodeSets=nodeSets, + materials=materials, + order_wall_conditions=order_wall_conditions, + condition_type="Neumann") @staticmethod def _get_heat_flux(heat_flow, material): From 9dfa8b34d1fb5dd5a71dd9c1623f2241e9bf3487 Mon Sep 17 00:00:00 2001 From: julian Date: Fri, 24 Jul 2020 14:45:15 +1000 Subject: [PATCH 75/80] Must have count being recorded! --- UWGeodynamics/_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/UWGeodynamics/_utils.py b/UWGeodynamics/_utils.py index 6c81e614..3ef3f176 100644 --- a/UWGeodynamics/_utils.py +++ b/UWGeodynamics/_utils.py @@ -121,6 +121,7 @@ def add_tracked_field(self, value, name, units, dataType, count=1, new_field = {} new_field["units"] = units new_field["value"] = value + new_field["count"] = count new_field["dataType"] = dataType new_field["timeIntegration"] = timeIntegration svar = self.add_variable(dataType, count=count) From d9745959892e1b4c4257db4fbcbf49cf0080e6fa Mon Sep 17 00:00:00 2001 From: Romain Beucher Date: Mon, 27 Jul 2020 10:48:30 +1000 Subject: [PATCH 76/80] Update License --- LICENSE.md | 750 ++++++++++++----------------------------------------- 1 file changed, 159 insertions(+), 591 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index d2b23397..eac7dadc 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,595 +1,163 @@ -GNU General Public License -========================== +GNU Lesser General Public License +================================= _Version 3, 29 June 2007_ _Copyright © 2007 Free Software Foundation, Inc. <>_ -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -## Preamble - -The GNU General Public License is a free, copyleft license for software and other -kinds of works. - -The licenses for most software and other practical works are designed to take away -your freedom to share and change the works. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change all versions of a -program--to make sure it remains free software for all its users. We, the Free -Software Foundation, use the GNU General Public License for most of our software; it -applies also to any other work released this way by its authors. You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General -Public Licenses are designed to make sure that you have the freedom to distribute -copies of free software (and charge for them if you wish), that you receive source -code or can get it if you want it, that you can change the software or use pieces of -it in new free programs, and that you know you can do these things. - -To protect your rights, we need to prevent others from denying you these rights or -asking you to surrender the rights. Therefore, you have certain responsibilities if -you distribute copies of the software, or if you modify it: responsibilities to -respect the freedom of others. - -For example, if you distribute copies of such a program, whether gratis or for a fee, -you must pass on to the recipients the same freedoms that you received. You must make -sure that they, too, receive or can get the source code. And you must show them these -terms so they know their rights. - -Developers that use the GNU GPL protect your rights with two steps: **(1)** assert -copyright on the software, and **(2)** offer you this License giving you legal permission -to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains that there is -no warranty for this free software. For both users' and authors' sake, the GPL -requires that modified versions be marked as changed, so that their problems will not -be attributed erroneously to authors of previous versions. - -Some devices are designed to deny users access to install or run modified versions of -the software inside them, although the manufacturer can do so. This is fundamentally -incompatible with the aim of protecting users' freedom to change the software. The -systematic pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we have designed -this version of the GPL to prohibit the practice for those products. If such problems -arise substantially in other domains, we stand ready to extend this provision to -those domains in future versions of the GPL, as needed to protect the freedom of -users. - -Finally, every program is threatened constantly by software patents. States should -not allow patents to restrict development and use of software on general-purpose -computers, but in those that do, we wish to avoid the special danger that patents -applied to a free program could make it effectively proprietary. To prevent this, the -GPL assures that patents cannot be used to render the program non-free. - -The precise terms and conditions for copying, distribution and modification follow. - -## TERMS AND CONDITIONS - -### 0. Definitions - -“This License” refers to version 3 of the GNU General Public License. - -“Copyright” also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - -“The Program” refers to any copyrightable work licensed under this -License. Each licensee is addressed as “you”. “Licensees” and -“recipients” may be individuals or organizations. - -To “modify” a work means to copy from or adapt all or part of the work in -a fashion requiring copyright permission, other than the making of an exact copy. The -resulting work is called a “modified version” of the earlier work or a -work “based on” the earlier work. - -A “covered work” means either the unmodified Program or a work based on -the Program. - -To “propagate” a work means to do anything with it that, without -permission, would make you directly or secondarily liable for infringement under -applicable copyright law, except executing it on a computer or modifying a private -copy. Propagation includes copying, distribution (with or without modification), -making available to the public, and in some countries other activities as well. - -To “convey” a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through a computer -network, with no transfer of a copy, is not conveying. - -An interactive user interface displays “Appropriate Legal Notices” to the -extent that it includes a convenient and prominently visible feature that **(1)** -displays an appropriate copyright notice, and **(2)** tells the user that there is no -warranty for the work (except to the extent that warranties are provided), that -licensees may convey the work under this License, and how to view a copy of this -License. If the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - -### 1. Source Code - -The “source code” for a work means the preferred form of the work for -making modifications to it. “Object code” means any non-source form of a -work. - -A “Standard Interface” means an interface that either is an official -standard defined by a recognized standards body, or, in the case of interfaces -specified for a particular programming language, one that is widely used among -developers working in that language. - -The “System Libraries” of an executable work include anything, other than -the work as a whole, that **(a)** is included in the normal form of packaging a Major -Component, but which is not part of that Major Component, and **(b)** serves only to -enable use of the work with that Major Component, or to implement a Standard -Interface for which an implementation is available to the public in source code form. -A “Major Component”, in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system (if any) on which -the executable work runs, or a compiler used to produce the work, or an object code -interpreter used to run it. - -The “Corresponding Source” for a work in object code form means all the -source code needed to generate, install, and (for an executable work) run the object -code and to modify the work, including scripts to control those activities. However, -it does not include the work's System Libraries, or general-purpose tools or -generally available free programs which are used unmodified in performing those -activities but which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for the work, and -the source code for shared libraries and dynamically linked subprograms that the work -is specifically designed to require, such as by intimate data communication or -control flow between those subprograms and other parts of the work. - -The Corresponding Source need not include anything that users can regenerate -automatically from other parts of the Corresponding Source. - -The Corresponding Source for a work in source code form is that same work. - -### 2. Basic Permissions - -All rights granted under this License are granted for the term of copyright on the -Program, and are irrevocable provided the stated conditions are met. This License -explicitly affirms your unlimited permission to run the unmodified Program. The -output from running a covered work is covered by this License only if the output, -given its content, constitutes a covered work. This License acknowledges your rights -of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not convey, without -conditions so long as your license otherwise remains in force. You may convey covered -works to others for the sole purpose of having them make modifications exclusively -for you, or provide you with facilities for running those works, provided that you -comply with the terms of this License in conveying all material for which you do not -control copyright. Those thus making or running the covered works for you must do so -exclusively on your behalf, under your direction and control, on terms that prohibit -them from making any copies of your copyrighted material outside their relationship -with you. - -Conveying under any other circumstances is permitted solely under the conditions -stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - -### 3. Protecting Users' Legal Rights From Anti-Circumvention Law - -No covered work shall be deemed part of an effective technological measure under any -applicable law fulfilling obligations under article 11 of the WIPO copyright treaty -adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention -of such measures. - -When you convey a covered work, you waive any legal power to forbid circumvention of -technological measures to the extent such circumvention is effected by exercising -rights under this License with respect to the covered work, and you disclaim any -intention to limit operation or modification of the work as a means of enforcing, -against the work's users, your or third parties' legal rights to forbid circumvention -of technological measures. - -### 4. Conveying Verbatim Copies - -You may convey verbatim copies of the Program's source code as you receive it, in any -medium, provided that you conspicuously and appropriately publish on each copy an -appropriate copyright notice; keep intact all notices stating that this License and -any non-permissive terms added in accord with section 7 apply to the code; keep -intact all notices of the absence of any warranty; and give all recipients a copy of -this License along with the Program. - -You may charge any price or no price for each copy that you convey, and you may offer -support or warranty protection for a fee. - -### 5. Conveying Modified Source Versions - -You may convey a work based on the Program, or the modifications to produce it from -the Program, in the form of source code under the terms of section 4, provided that -you also meet all of these conditions: - -* **a)** The work must carry prominent notices stating that you modified it, and giving a -relevant date. -* **b)** The work must carry prominent notices stating that it is released under this -License and any conditions added under section 7. This requirement modifies the -requirement in section 4 to “keep intact all notices”. -* **c)** You must license the entire work, as a whole, under this License to anyone who -comes into possession of a copy. This License will therefore apply, along with any -applicable section 7 additional terms, to the whole of the work, and all its parts, -regardless of how they are packaged. This License gives no permission to license the -work in any other way, but it does not invalidate such permission if you have -separately received it. -* **d)** If the work has interactive user interfaces, each must display Appropriate Legal -Notices; however, if the Program has interactive interfaces that do not display -Appropriate Legal Notices, your work need not make them do so. - -A compilation of a covered work with other separate and independent works, which are -not by their nature extensions of the covered work, and which are not combined with -it such as to form a larger program, in or on a volume of a storage or distribution -medium, is called an “aggregate” if the compilation and its resulting -copyright are not used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work in an aggregate -does not cause this License to apply to the other parts of the aggregate. - -### 6. Conveying Non-Source Forms - -You may convey a covered work in object code form under the terms of sections 4 and -5, provided that you also convey the machine-readable Corresponding Source under the -terms of this License, in one of these ways: - -* **a)** Convey the object code in, or embodied in, a physical product (including a -physical distribution medium), accompanied by the Corresponding Source fixed on a -durable physical medium customarily used for software interchange. -* **b)** Convey the object code in, or embodied in, a physical product (including a -physical distribution medium), accompanied by a written offer, valid for at least -three years and valid for as long as you offer spare parts or customer support for -that product model, to give anyone who possesses the object code either **(1)** a copy of -the Corresponding Source for all the software in the product that is covered by this -License, on a durable physical medium customarily used for software interchange, for -a price no more than your reasonable cost of physically performing this conveying of -source, or **(2)** access to copy the Corresponding Source from a network server at no -charge. -* **c)** Convey individual copies of the object code with a copy of the written offer to -provide the Corresponding Source. This alternative is allowed only occasionally and -noncommercially, and only if you received the object code with such an offer, in -accord with subsection 6b. -* **d)** Convey the object code by offering access from a designated place (gratis or for -a charge), and offer equivalent access to the Corresponding Source in the same way -through the same place at no further charge. You need not require recipients to copy -the Corresponding Source along with the object code. If the place to copy the object -code is a network server, the Corresponding Source may be on a different server -(operated by you or a third party) that supports equivalent copying facilities, -provided you maintain clear directions next to the object code saying where to find -the Corresponding Source. Regardless of what server hosts the Corresponding Source, -you remain obligated to ensure that it is available for as long as needed to satisfy -these requirements. -* **e)** Convey the object code using peer-to-peer transmission, provided you inform -other peers where the object code and Corresponding Source of the work are being -offered to the general public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded from the -Corresponding Source as a System Library, need not be included in conveying the -object code work. - -A “User Product” is either **(1)** a “consumer product”, which -means any tangible personal property which is normally used for personal, family, or -household purposes, or **(2)** anything designed or sold for incorporation into a -dwelling. In determining whether a product is a consumer product, doubtful cases -shall be resolved in favor of coverage. For a particular product received by a -particular user, “normally used” refers to a typical or common use of -that class of product, regardless of the status of the particular user or of the way -in which the particular user actually uses, or expects or is expected to use, the -product. A product is a consumer product regardless of whether the product has -substantial commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - -“Installation Information” for a User Product means any methods, -procedures, authorization keys, or other information required to install and execute -modified versions of a covered work in that User Product from a modified version of -its Corresponding Source. The information must suffice to ensure that the continued -functioning of the modified object code is in no case prevented or interfered with -solely because modification has been made. - -If you convey an object code work under this section in, or with, or specifically for -use in, a User Product, and the conveying occurs as part of a transaction in which -the right of possession and use of the User Product is transferred to the recipient -in perpetuity or for a fixed term (regardless of how the transaction is -characterized), the Corresponding Source conveyed under this section must be -accompanied by the Installation Information. But this requirement does not apply if -neither you nor any third party retains the ability to install modified object code -on the User Product (for example, the work has been installed in ROM). - -The requirement to provide Installation Information does not include a requirement to -continue to provide support service, warranty, or updates for a work that has been -modified or installed by the recipient, or for the User Product in which it has been -modified or installed. Access to a network may be denied when the modification itself -materially and adversely affects the operation of the network or violates the rules -and protocols for communication across the network. - -Corresponding Source conveyed, and Installation Information provided, in accord with -this section must be in a format that is publicly documented (and with an -implementation available to the public in source code form), and must require no -special password or key for unpacking, reading or copying. - -### 7. Additional Terms - -“Additional permissions” are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. Additional -permissions that are applicable to the entire Program shall be treated as though they -were included in this License, to the extent that they are valid under applicable -law. If additional permissions apply only to part of the Program, that part may be -used separately under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option remove any -additional permissions from that copy, or from any part of it. (Additional -permissions may be written to require their own removal in certain cases when you -modify the work.) You may place additional permissions on material, added by you to a -covered work, for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you add to a -covered work, you may (if authorized by the copyright holders of that material) -supplement the terms of this License with terms: - -* **a)** Disclaiming warranty or limiting liability differently from the terms of -sections 15 and 16 of this License; or -* **b)** Requiring preservation of specified reasonable legal notices or author -attributions in that material or in the Appropriate Legal Notices displayed by works -containing it; or -* **c)** Prohibiting misrepresentation of the origin of that material, or requiring that -modified versions of such material be marked in reasonable ways as different from the -original version; or -* **d)** Limiting the use for publicity purposes of names of licensors or authors of the -material; or -* **e)** Declining to grant rights under trademark law for use of some trade names, -trademarks, or service marks; or -* **f)** Requiring indemnification of licensors and authors of that material by anyone -who conveys the material (or modified versions of it) with contractual assumptions of -liability to the recipient, for any liability that these contractual assumptions -directly impose on those licensors and authors. - -All other non-permissive additional terms are considered “further -restrictions” within the meaning of section 10. If the Program as you received -it, or any part of it, contains a notice stating that it is governed by this License -along with a term that is a further restriction, you may remove that term. If a -license document contains a further restriction but permits relicensing or conveying -under this License, you may add to a covered work material governed by the terms of -that license document, provided that the further restriction does not survive such -relicensing or conveying. - -If you add terms to a covered work in accord with this section, you must place, in -the relevant source files, a statement of the additional terms that apply to those -files, or a notice indicating where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the form of a -separately written license, or stated as exceptions; the above requirements apply -either way. - -### 8. Termination - -You may not propagate or modify a covered work except as expressly provided under -this License. Any attempt otherwise to propagate or modify it is void, and will -automatically terminate your rights under this License (including any patent licenses -granted under the third paragraph of section 11). - -However, if you cease all violation of this License, then your license from a -particular copyright holder is reinstated **(a)** provisionally, unless and until the -copyright holder explicitly and finally terminates your license, and **(b)** permanently, -if the copyright holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - -Moreover, your license from a particular copyright holder is reinstated permanently -if the copyright holder notifies you of the violation by some reasonable means, this -is the first time you have received notice of violation of this License (for any -work) from that copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - -Termination of your rights under this section does not terminate the licenses of -parties who have received copies or rights from you under this License. If your -rights have been terminated and not permanently reinstated, you do not qualify to -receive new licenses for the same material under section 10. - -### 9. Acceptance Not Required for Having Copies - -You are not required to accept this License in order to receive or run a copy of the -Program. Ancillary propagation of a covered work occurring solely as a consequence of -using peer-to-peer transmission to receive a copy likewise does not require -acceptance. However, nothing other than this License grants you permission to -propagate or modify any covered work. These actions infringe copyright if you do not -accept this License. Therefore, by modifying or propagating a covered work, you -indicate your acceptance of this License to do so. - -### 10. Automatic Licensing of Downstream Recipients - -Each time you convey a covered work, the recipient automatically receives a license -from the original licensors, to run, modify and propagate that work, subject to this -License. You are not responsible for enforcing compliance by third parties with this -License. - -An “entity transaction” is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an organization, or -merging organizations. If propagation of a covered work results from an entity -transaction, each party to that transaction who receives a copy of the work also -receives whatever licenses to the work the party's predecessor in interest had or -could give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if the predecessor -has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the rights granted or -affirmed under this License. For example, you may not impose a license fee, royalty, -or other charge for exercise of rights granted under this License, and you may not -initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging -that any patent claim is infringed by making, using, selling, offering for sale, or -importing the Program or any portion of it. - -### 11. Patents - -A “contributor” is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The work thus -licensed is called the contributor's “contributor version”. - -A contributor's “essential patent claims” are all patent claims owned or -controlled by the contributor, whether already acquired or hereafter acquired, that -would be infringed by some manner, permitted by this License, of making, using, or -selling its contributor version, but do not include claims that would be infringed -only as a consequence of further modification of the contributor version. For -purposes of this definition, “control” includes the right to grant patent -sublicenses in a manner consistent with the requirements of this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free patent license -under the contributor's essential patent claims, to make, use, sell, offer for sale, -import and otherwise run, modify and propagate the contents of its contributor -version. - -In the following three paragraphs, a “patent license” is any express -agreement or commitment, however denominated, not to enforce a patent (such as an -express permission to practice a patent or covenant not to sue for patent -infringement). To “grant” such a patent license to a party means to make -such an agreement or commitment not to enforce a patent against the party. - -If you convey a covered work, knowingly relying on a patent license, and the -Corresponding Source of the work is not available for anyone to copy, free of charge -and under the terms of this License, through a publicly available network server or -other readily accessible means, then you must either **(1)** cause the Corresponding -Source to be so available, or **(2)** arrange to deprive yourself of the benefit of the -patent license for this particular work, or **(3)** arrange, in a manner consistent with -the requirements of this License, to extend the patent license to downstream -recipients. “Knowingly relying” means you have actual knowledge that, but -for the patent license, your conveying the covered work in a country, or your -recipient's use of the covered work in a country, would infringe one or more -identifiable patents in that country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or arrangement, you -convey, or propagate by procuring conveyance of, a covered work, and grant a patent -license to some of the parties receiving the covered work authorizing them to use, -propagate, modify or convey a specific copy of the covered work, then the patent -license you grant is automatically extended to all recipients of the covered work and -works based on it. - -A patent license is “discriminatory” if it does not include within the -scope of its coverage, prohibits the exercise of, or is conditioned on the -non-exercise of one or more of the rights that are specifically granted under this -License. You may not convey a covered work if you are a party to an arrangement with -a third party that is in the business of distributing software, under which you make -payment to the third party based on the extent of your activity of conveying the -work, and under which the third party grants, to any of the parties who would receive -the covered work from you, a discriminatory patent license **(a)** in connection with -copies of the covered work conveyed by you (or copies made from those copies), or **(b)** -primarily for and in connection with specific products or compilations that contain -the covered work, unless you entered into that arrangement, or that patent license -was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting any implied -license or other defenses to infringement that may otherwise be available to you -under applicable patent law. - -### 12. No Surrender of Others' Freedom - -If conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from the -conditions of this License. If you cannot convey a covered work so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not convey it at all. For example, if you -agree to terms that obligate you to collect a royalty for further conveying from -those to whom you convey the Program, the only way you could satisfy both those terms -and this License would be to refrain entirely from conveying the Program. - -### 13. Use with the GNU Affero General Public License - -Notwithstanding any other provision of this License, you have permission to link or -combine any covered work with a work licensed under version 3 of the GNU Affero -General Public License into a single combined work, and to convey the resulting work. -The terms of this License will continue to apply to the part which is the covered -work, but the special requirements of the GNU Affero General Public License, section -13, concerning interaction through a network will apply to the combination as such. - -### 14. Revised Versions of this License - -The Free Software Foundation may publish revised and/or new versions of the GNU -General Public License from time to time. Such new versions will be similar in spirit -to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies that -a certain numbered version of the GNU General Public License “or any later -version” applies to it, you have the option of following the terms and -conditions either of that numbered version or of any later version published by the -Free Software Foundation. If the Program does not specify a version number of the GNU -General Public License, you may choose any version ever published by the Free -Software Foundation. - -If the Program specifies that a proxy can decide which future versions of the GNU -General Public License can be used, that proxy's public statement of acceptance of a -version permanently authorizes you to choose that version for the Program. - -Later license versions may give you additional or different permissions. However, no -additional obligations are imposed on any author or copyright holder as a result of -your choosing to follow a later version. - -### 15. Disclaimer of Warranty - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER -EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE -QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE -DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -### 16. Limitation of Liability - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY -COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS -PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, -INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE -OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE -WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -### 17. Interpretation of Sections 15 and 16 - -If the disclaimer of warranty and limitation of liability provided above cannot be -given local legal effect according to their terms, reviewing courts shall apply local -law that most closely approximates an absolute waiver of all civil liability in -connection with the Program, unless a warranty or assumption of liability accompanies -a copy of the Program in return for a fee. - -_END OF TERMS AND CONDITIONS_ - -## How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to -the public, the best way to achieve this is to make it free software which everyone -can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them -to the start of each source file to most effectively state the exclusion of warranty; -and each file should have at least the “copyright” line and a pointer to -where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - -If the program does terminal interaction, make it output a short notice like this -when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type 'show c' for details. - -The hypothetical commands `show w` and `show c` should show the appropriate parts of -the General Public License. Of course, your program's commands might be different; -for a GUI interface, you would use an “about box”. - -You should also get your employer (if you work as a programmer) or school, if any, to -sign a “copyright disclaimer” for the program, if necessary. For more -information on this, and how to apply and follow the GNU GPL, see -<>. - -The GNU General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may consider it -more useful to permit linking proprietary applications with the library. If this is -what you want to do, use the GNU Lesser General Public License instead of this -License. But first, please read -<>. \ No newline at end of file +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + +This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + +### 0. Additional Definitions + +As used herein, “this License” refers to version 3 of the GNU Lesser +General Public License, and the “GNU GPL” refers to version 3 of the GNU +General Public License. + +“The Library” refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + +An “Application” is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + +A “Combined Work” is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the “Linked +Version”. + +The “Minimal Corresponding Source” for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + +The “Corresponding Application Code” for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + +### 1. Exception to Section 3 of the GNU GPL + +You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + +### 2. Conveying Modified Versions + +If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + +* **a)** under this License, provided that you make a good faith effort to +ensure that, in the event an Application does not supply the +function or data, the facility still operates, and performs +whatever part of its purpose remains meaningful, or + +* **b)** under the GNU GPL, with none of the additional permissions of +this License applicable to that copy. + +### 3. Object Code Incorporating Material from Library Header Files + +The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + +* **a)** Give prominent notice with each copy of the object code that the +Library is used in it and that the Library and its use are +covered by this License. +* **b)** Accompany the object code with a copy of the GNU GPL and this license +document. + +### 4. Combined Works + +You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + +* **a)** Give prominent notice with each copy of the Combined Work that +the Library is used in it and that the Library and its use are +covered by this License. + +* **b)** Accompany the Combined Work with a copy of the GNU GPL and this license +document. + +* **c)** For a Combined Work that displays copyright notices during +execution, include the copyright notice for the Library among +these notices, as well as a reference directing the user to the +copies of the GNU GPL and this license document. + +* **d)** Do one of the following: + - **0)** Convey the Minimal Corresponding Source under the terms of this +License, and the Corresponding Application Code in a form +suitable for, and under terms that permit, the user to +recombine or relink the Application with a modified version of +the Linked Version to produce a modified Combined Work, in the +manner specified by section 6 of the GNU GPL for conveying +Corresponding Source. + - **1)** Use a suitable shared library mechanism for linking with the +Library. A suitable mechanism is one that **(a)** uses at run time +a copy of the Library already present on the user's computer +system, and **(b)** will operate properly with a modified version +of the Library that is interface-compatible with the Linked +Version. + +* **e)** Provide Installation Information, but only if you would otherwise +be required to provide such information under section 6 of the +GNU GPL, and only to the extent that such information is +necessary to install and execute a modified version of the +Combined Work produced by recombining or relinking the +Application with a modified version of the Linked Version. (If +you use option **4d0**, the Installation Information must accompany +the Minimal Corresponding Source and Corresponding Application +Code. If you use option **4d1**, you must provide the Installation +Information in the manner specified by section 6 of the GNU GPL +for conveying Corresponding Source.) + +### 5. Combined Libraries + +You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + +* **a)** Accompany the combined library with a copy of the same work based +on the Library, uncombined with any other library facilities, +conveyed under the terms of this License. +* **b)** Give prominent notice with the combined library that part of it +is a work based on the Library, and explaining where to find the +accompanying uncombined form of the same work. + +### 6. Revised Versions of the GNU Lesser General Public License + +The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License “or any later version” +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file From 4a8d5519896682c1d6ce38c28eb4c1e38fdcf5d0 Mon Sep 17 00:00:00 2001 From: Julian Giordani Date: Thu, 13 Aug 2020 12:17:42 +1000 Subject: [PATCH 77/80] Update test.yml --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4777b2fc..ba2852c2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,15 +6,15 @@ jobs: test_in_UW_Container: runs-on: ubuntu-latest container: - image: underworldcode/underworld2:2.9.4b + image: underworldcode/underworld2:2.10.0b options: --user root steps: - name: Test in UW Container run: | cd /home/jovyan/workspace - git clone https://github.com/underworldcode/UWGeodynamics.git UWGeodynamics + git clone -b ${GITHUB_REF##*/} https://github.com/underworldcode/UWGeodynamics.git UWGeodynamics cd UWGeodynamics git checkout development pip install -e . pip install pytest - python -m pytest -vvv \ No newline at end of file + python -m pytest -vvv From cc4636a06a09f30030d37807edd23e64abbcd076 Mon Sep 17 00:00:00 2001 From: Julian Giordani Date: Thu, 13 Aug 2020 12:24:35 +1000 Subject: [PATCH 78/80] Update Dockerfile --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7b2c3200..549b7755 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -# Stage 1: Inherit from underworldcode/underworld2:2.9.1b and install dependency packages for Badlands +# Stage 1: Inherit from underworldcode/underworld2:2.10.0b and install dependency packages for Badlands ########## -FROM underworldcode/underworld2:2.9.4b as base_runtime +FROM underworldcode/underworld2:2.10.0b as base_runtime MAINTAINER https://github.com/underworldcode/ # install runtime requirements USER root From 71e6210fdb026708326aa5e5d44273ce4d55f004 Mon Sep 17 00:00:00 2001 From: Julian Giordani Date: Thu, 13 Aug 2020 12:27:43 +1000 Subject: [PATCH 79/80] Update test.yml only check on ${GITHUB_REF##*/} branch for now. --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ba2852c2..213cc6d6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: cd /home/jovyan/workspace git clone -b ${GITHUB_REF##*/} https://github.com/underworldcode/UWGeodynamics.git UWGeodynamics cd UWGeodynamics - git checkout development + # git checkout development pip install -e . pip install pytest python -m pytest -vvv From 52c7ec22be997ab520d7d6affbd67db7220260cd Mon Sep 17 00:00:00 2001 From: julian Date: Thu, 13 Aug 2020 16:08:41 +1000 Subject: [PATCH 80/80] Fixing tests - vis. calls needed updating --- docs/examples/1_11_StokesSinker3D.ipynb | 64 +- .../1_21_3D_ColumnsTractionBottom.ipynb | 58 +- docs/examples/1_24_Define_3D_volumes.ipynb | 11494 +--------------- .../Tutorial_7_3D_Lithospheric_Model.ipynb | 9166 +----------- 4 files changed, 134 insertions(+), 20648 deletions(-) diff --git a/docs/examples/1_11_StokesSinker3D.ipynb b/docs/examples/1_11_StokesSinker3D.ipynb index 51224c17..1abbc34c 100644 --- a/docs/examples/1_11_StokesSinker3D.ipynb +++ b/docs/examples/1_11_StokesSinker3D.ipynb @@ -18,7 +18,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /usr/local/lib/python3.5/dist-packages/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/workspace/codes/UWGeodynamics_use_with_docker/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -109,7 +109,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 8, @@ -132,10 +132,9 @@ "metadata": {}, "outputs": [], "source": [ - "Fig = vis.Figure()\n", + "Fig = vis.Figure(resolution=(1200,600))\n", "Fig.Surface(Model.mesh, Model.projMaterialField, cullface=False, opacity=0.5)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer.window()" + "Fig.window()" ] }, { @@ -149,58 +148,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running with UWGeodynamics version 2.8.1-dev-efa530e(development)\n", - "Options: -remove_constant_pressure_null_space False -pc_type none -restore_K False -ksp_k2_type NULL -rescale_equations False -ksp_type bsscr -change_backsolve False -Q22_pc_type uw -change_A11rhspresolve False -A11_ksp_type fgmres -A11_ksp_rtol 1e-06 -scr_ksp_type fgmres -scr_ksp_rtol 1e-05\n", - "Step: 1 Model Time: 6.0 minute dt: 6.0 minute (2019-09-06 00:37:27)\n", - "Step: 2 Model Time: 12.0 minute dt: 6.0 minute (2019-09-06 00:37:36)\n", - "Step: 3 Model Time: 18.0 minute dt: 6.0 minute (2019-09-06 00:37:45)\n", - "Step: 4 Model Time: 24.0 minute dt: 6.0 minute (2019-09-06 00:37:55)\n", - "Step: 5 Model Time: 30.0 minute dt: 6.0 minute (2019-09-06 00:38:04)\n", - "Step: 6 Model Time: 36.0 minute dt: 6.0 minute (2019-09-06 00:38:13)\n", - "Step: 7 Model Time: 42.0 minute dt: 6.0 minute (2019-09-06 00:38:22)\n", - "Step: 8 Model Time: 48.0 minute dt: 6.0 minute (2019-09-06 00:38:32)\n", - "Step: 9 Model Time: 0.9 hour dt: 6.0 minute (2019-09-06 00:38:41)\n", - "Step: 10 Model Time: 1.0 hour dt: 6.0 minute (2019-09-06 00:38:50)\n", - "Step: 11 Model Time: 1.1 hour dt: 6.0 minute (2019-09-06 00:38:59)\n", - "Step: 12 Model Time: 1.2 hour dt: 6.0 minute (2019-09-06 00:39:10)\n", - "Step: 13 Model Time: 1.3 hour dt: 6.0 minute (2019-09-06 00:39:20)\n", - "Step: 14 Model Time: 1.4 hour dt: 6.0 minute (2019-09-06 00:39:29)\n", - "Step: 15 Model Time: 1.5 hour dt: 6.0 minute (2019-09-06 00:39:39)\n", - "Step: 16 Model Time: 1.6 hour dt: 6.0 minute (2019-09-06 00:39:48)\n", - "Step: 17 Model Time: 1.7 hour dt: 6.0 minute (2019-09-06 00:39:58)\n", - "Step: 18 Model Time: 1.8 hour dt: 6.0 minute (2019-09-06 00:40:07)\n", - "Step: 19 Model Time: 1.9 hour dt: 6.0 minute (2019-09-06 00:40:17)\n", - "Step: 20 Model Time: 2.0 hour dt: 6.0 minute (2019-09-06 00:40:27)\n", - "Step: 21 Model Time: 2.1 hour dt: 6.0 minute (2019-09-06 00:40:36)\n", - "Step: 22 Model Time: 2.2 hour dt: 6.0 minute (2019-09-06 00:40:46)\n", - "Step: 23 Model Time: 2.3 hour dt: 6.0 minute (2019-09-06 00:40:55)\n", - "Step: 24 Model Time: 2.4 hour dt: 6.0 minute (2019-09-06 00:41:04)\n", - "Step: 25 Model Time: 2.5 hour dt: 6.0 minute (2019-09-06 00:41:14)\n", - "Step: 26 Model Time: 2.6 hour dt: 6.0 minute (2019-09-06 00:41:24)\n", - "Step: 27 Model Time: 2.7 hour dt: 6.0 minute (2019-09-06 00:41:34)\n", - "Step: 28 Model Time: 2.8 hour dt: 6.0 minute (2019-09-06 00:41:43)\n", - "Step: 29 Model Time: 2.9 hour dt: 6.0 minute (2019-09-06 00:41:53)\n", - "Step: 30 Model Time: 3.0 hour dt: 6.0 minute (2019-09-06 00:41:58)\n" - ] - }, - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Model.run_for(3.0 * u.hours, checkpoint_interval=0.1 * u.hours)" ] @@ -222,7 +172,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/docs/examples/1_21_3D_ColumnsTractionBottom.ipynb b/docs/examples/1_21_3D_ColumnsTractionBottom.ipynb index 8c1acba1..d1e61a41 100644 --- a/docs/examples/1_21_3D_ColumnsTractionBottom.ipynb +++ b/docs/examples/1_21_3D_ColumnsTractionBottom.ipynb @@ -9,7 +9,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/workspace/codes/UWGeodynamics_use_with_docker/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -50,7 +50,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -90,15 +90,14 @@ "metadata": {}, "outputs": [], "source": [ - "Fig = vis.Figure()\n", + "Fig = vis.Figure(resolution=(1200,600))\n", "Fig.Surface(Model.mesh, Model.projMaterialField, cullface=False, opacity=0.5)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer.window()" + "Fig.window()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -109,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -123,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -134,9 +133,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "Model.set_velocityBCs(left=[0.,0.,0.],\n", " right=[0.,0.,0.],\n", @@ -148,9 +158,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running with UWGeodynamics version 2.10.0-dev-71e6210(2.10-pre_release)\n", + "Options: -Q22_pc_type uw -ksp_type bsscr -pc_type none -ksp_k2_type NULL -rescale_equations False -remove_constant_pressure_null_space False -change_backsolve False -change_A11rhspresolve False -restore_K False -A11_ksp_type fgmres -A11_ksp_rtol 1e-06 -scr_ksp_type fgmres -scr_ksp_rtol 1e-05\n", + "Step: 1 Model Time: 202.3 megayear dt: 202.3 megayear (2020-08-13 05:38:47)\n" + ] + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "Model.run_for(nstep=1)" ] diff --git a/docs/examples/1_24_Define_3D_volumes.ipynb b/docs/examples/1_24_Define_3D_volumes.ipynb index fb74548d..0fe69a98 100644 --- a/docs/examples/1_24_Define_3D_volumes.ipynb +++ b/docs/examples/1_24_Define_3D_volumes.ipynb @@ -13,17 +13,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" - ] - } - ], + "outputs": [], "source": [ "import UWGeodynamics as GEO\n", "from UWGeodynamics import visualisation as vis" @@ -38,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -47,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -77,7 +69,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -96,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -106,2294 +98,19 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "Fig = vis.Figure()\n", + "Fig = vis.Figure(resolution=(1200,600), axis=True)\n", "Fig.Points(Model.swarm, Model.materialField, cullface=False, opacity=1.)\n", "Fig.Mesh(Model.mesh)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer = Fig.viewer(axis=True)\n", - "viewer.rotatex(-70)\n", - "viewer.rotatey(-10)\n", - "viewer.window()" + "\n", + "# rotate view from default\n", + "lv = Fig.window()\n", + "lv.rotate('x', -70)\n", + "lv.rotate('y', -10)\n", + "lv.redisplay()" ] }, { @@ -2409,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2421,7 +138,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "scrolled": true }, @@ -2434,2294 +151,18 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "Fig = vis.Figure()\n", + "Fig = vis.Figure(resolution=(1200,600), axis=True)\n", "Fig.Points(Model.swarm, Model.materialField, cullface=False, opacity=1.)\n", "Fig.Mesh(Model.mesh)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer = Fig.viewer(axis=True)\n", - "viewer.rotatex(-70)\n", - "viewer.rotatey(-10)\n", - "viewer.window()" + "\n", + "lv = Fig.window()\n", + "lv.rotate('x', -70)\n", + "lv.rotate('y', -10)\n", + "lv.redisplay()" ] }, { @@ -4745,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4765,7 +206,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4774,2294 +215,17 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "Fig = vis.Figure()\n", + "Fig = vis.Figure(resolution=(1200,600), axis=True)\n", "Fig.Points(Model.swarm, Model.materialField, cullface=False, opacity=1.)\n", "Fig.Mesh(Model.mesh)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer = Fig.viewer(axis=True)\n", - "viewer.rotatex(-70)\n", - "viewer.rotatey(-10)\n", - "viewer.window()" + "lv = Fig.window()\n", + "lv.rotate('x', -70)\n", + "lv.rotate('y', -10)\n", + "lv.redisplay()" ] }, { @@ -7075,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -7095,7 +259,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -7104,2294 +268,17 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "Fig = vis.Figure()\n", + "Fig = vis.Figure(resolution=(1200,600), axis=True)\n", "Fig.Points(Model.swarm, Model.materialField, cullface=False, opacity=1.)\n", "Fig.Mesh(Model.mesh)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer = Fig.viewer(axis=True)\n", - "viewer.rotatex(-70)\n", - "viewer.rotatey(-10)\n", - "viewer.window()" + "lv = Fig.window()\n", + "lv.rotate('x', -70)\n", + "lv.rotate('y', -10)\n", + "lv.redisplay()" ] }, { @@ -9403,7 +290,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -9412,7 +299,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -9421,2294 +308,17 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "Fig = vis.Figure()\n", + "Fig = vis.Figure(resolution=(1200,600), axis=True)\n", "Fig.Points(Model.swarm, Model.materialField, cullface=False, opacity=1.)\n", "Fig.Mesh(Model.mesh)\n", - "viewer = Fig.viewer(resolution=(1200,600))\n", - "viewer = Fig.viewer(axis=True)\n", - "viewer.rotatex(-70)\n", - "viewer.rotatey(-10)\n", - "viewer.window()" + "lv = Fig.window()\n", + "lv.rotate('x', -70)\n", + "lv.rotate('y', -10)\n", + "lv.redisplay()" ] } ], diff --git a/docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb b/docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb index eb8ae8c5..a5f8bd86 100644 --- a/docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb +++ b/docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb @@ -18,7 +18,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/workspace/codes/UWGeodynamics_use_with_docker/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -106,2291 +106,14 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "if GEO.nProcs == 1:\n", - " Fig = vis.Figure()\n", + " Fig = vis.Figure(resolution=(1200,600))\n", " Fig.Surface(Model.mesh, Model.projMaterialField, cullface=False, opacity=0.5)\n", - " viewer = Fig.viewer(resolution=(1200,600))\n", - " viewer.window()" + " Fig.window()" ] }, { @@ -2466,7 +189,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 14, @@ -2494,7 +217,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -2512,7 +235,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -2521,7 +244,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -2532,4594 +255,44 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], "source": [ "if GEO.nProcs == 1:\n", - " Fig = vis.Figure()\n", + " Fig = vis.Figure(resolution=(1200,600))\n", " Fig.Surface(Model.mesh, Model.temperature, cullface=False, opacity=0.5, colours=\"coolwarm\")\n", - " viewer = Fig.viewer(resolution=(1200,600))\n", - " viewer.window()" + " Fig.window()" ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], "source": [ "if GEO.nProcs == 1:\n", - " Fig = vis.Figure()\n", + " Fig = vis.Figure(resolution=(1200,600))\n", " Fig.Surface(Model.mesh.subMesh, Model.pressureField, cullface=False, opacity=0.5)\n", - " viewer = Fig.viewer(resolution=(1200,600))\n", - " viewer.window()" + " Fig.window()" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Running with UWGeodynamics version 2.9.6\n", + "Running with UWGeodynamics version 2.10.0-dev-71e6210(2.10-pre_release)\n", "Options: -Q22_pc_type gkgdiag -force_correction True -ksp_type bsscr -pc_type none -ksp_k2_type NULL -rescale_equations False -remove_constant_pressure_null_space False -change_backsolve False -change_A11rhspresolve False -restore_K False -A11_ksp_type preonly -A11_pc_type lu -A11_pc_factor_mat_solver_type mumps -scr_ksp_type fgmres -scr_ksp_rtol 1e-05 -A11_mg_active False\n", - "Step: 1 Model Time: 120699.1 year dt: 120699.1 year (2020-06-22 02:23:25)\n" + "Step: 1 Model Time: 120699.1 year dt: 120699.1 year (2020-08-13 05:59:23)\n" ] }, { @@ -7128,7 +301,7 @@ "1" ] }, - "execution_count": 21, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -7139,2291 +312,14 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "if GEO.nProcs == 1:\n", - " Fig = vis.Figure()\n", + " Fig = vis.Figure(resolution=(1200,600))\n", " Fig.VectorArrows(Model.mesh, Model.velocityField, cullface=False, opacity=0.5)\n", - " viewer = Fig.viewer(resolution=(1200,600))\n", - " viewer.window()" + " Fig.window()" ] } ],