diff --git a/.github/workflows/build_push_docker.yml b/.github/workflows/build_push_docker.yml index 020f5f87..fa0b4893 100644 --- a/.github/workflows/build_push_docker.yml +++ b/.github/workflows/build_push_docker.yml @@ -1,6 +1,9 @@ name: Docker -on: [push] +on: + push: + branches: + - master jobs: build: diff --git a/.github/workflows/conda_deploy.yml b/.github/workflows/conda_deploy.yml new file mode 100644 index 00000000..dc34a8d4 --- /dev/null +++ b/.github/workflows/conda_deploy.yml @@ -0,0 +1,33 @@ +name: Conda Deployment + +on: + release: + types: [created, edited] + workflow_dispatch: + +jobs: + + conda_build_test: + name: Conda Build (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: ["ubuntu-latest", "macos-latest"] + python-version: ["3.7", "3.8"] + steps: + - uses: actions/checkout@v2 + - uses: conda-incubator/setup-miniconda@v2 + with: + auto-update-conda: true + python-version: ${{ matrix.python-version }} + - name: Conda Upload + shell: bash -l {0} + run: | + conda install --channel conda-forge conda-build anaconda-client conda-verify + conda config --add channels conda-forge + conda config --add channels underworldcode + conda config --set anaconda_upload yes + anaconda login --hostname github-actions-${{ matrix.os }}-$RANDOM --username ${{ secrets.ANACONDA_USERNAME }} --password ${{ secrets.ANACONDA_PASSWORD }} + conda-build --channel conda-forge --user geo-down-under conda + anaconda logout diff --git a/.github/workflows/pypi_deployer.yml b/.github/workflows/pypi_deployer.yml index 7b8d526a..5b088c9e 100644 --- a/.github/workflows/pypi_deployer.yml +++ b/.github/workflows/pypi_deployer.yml @@ -1,8 +1,8 @@ name: pypi deployer on: - push - #tags: - # - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 + push: + tags: + - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 jobs: #Release new version on github releases # Github-release: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 70760c9b..27686da7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ jobs: test_in_UW_Container: runs-on: ubuntu-latest container: - image: underworldcode/underworld2:2.10.0b + image: underworldcode/underworld2:latest options: --user root steps: - name: Test in UW Container @@ -17,4 +17,4 @@ jobs: # git checkout development pip install -e . pip install pytest - python -m pytest -vvv \ No newline at end of file + python -m pytest -vvv diff --git a/CHANGELOG.md b/CHANGELOG.md index d356ec9a..0dd68fad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,14 @@ -# Version 2.10 +# Version 2.11 -- Layer2D which has now been deprecated for a while has been removed +- Change Passive Tracers Interface. The ``Model.add_passive_tracers`` method now return ``None``. Tracers can be accessed via the Model object. This is to avoid orphans and usage errors when doing a restart. +- Add option to pass UW function (or mesh variable) to the density material properties. +- `Model.init_model()` excepts arguments to optional to initiliase temperature and pressure fields with an UW function or a mesh variable. +- Various bug fixes. +# Version 2.10 + +- Layer2D which has now been deprecated for a while has been removed # Version 2.9 diff --git a/Dockerfile b/Dockerfile index 549b7755..f5d7d3ea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # Stage 1: Inherit from underworldcode/underworld2:2.10.0b and install dependency packages for Badlands ########## -FROM underworldcode/underworld2:2.10.0b as base_runtime +FROM underworldcode/underworld2:2.11.0b as base_runtime MAINTAINER https://github.com/underworldcode/ # install runtime requirements USER root diff --git a/README.md b/README.md index b4e75902..1f304a2c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![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) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/underworldcode/UWGeodynamics.git/master) ![image](docs/tutorials/images/Tutorial1.gif) ![image](docs/readthedocs/src/img/collision_wedge.gif) diff --git a/UWGeodynamics/LecodeIsostasy/LecodeIsostasy.py b/UWGeodynamics/LecodeIsostasy/LecodeIsostasy.py index e63caf91..d1926fdf 100644 --- a/UWGeodynamics/LecodeIsostasy/LecodeIsostasy.py +++ b/UWGeodynamics/LecodeIsostasy/LecodeIsostasy.py @@ -498,8 +498,8 @@ def _get_average_densities2D(self): # data_nodegId as domain size (local+node) so we need to only take # the local nodes otherwise the reduce operation will results in higher # values where domains overlaps... - local_densities[self.mesh.data_nodegId[:self.mesh.nodesLocal]] = self.DensityVar.data[:self.mesh.nodesLocal] - local_materials[self.mesh.data_nodegId[:self.mesh.nodesLocal]] = self.MaterialVar.data[:self.mesh.nodesLocal] + local_densities[self.mesh.data_nodegId[:self.mesh.nodesLocal]] = self.DensityVar.data[:self.mesh.nodesLocal, 0] + local_materials[self.mesh.data_nodegId[:self.mesh.nodesLocal]] = self.MaterialVar.data[:self.mesh.nodesLocal, 0] # Reduce local_densities arrays to global_densities comm.Allreduce(local_densities, global_densities) @@ -558,8 +558,8 @@ def _get_average_densities3D(self): global_materials = np.zeros((nx+1)*(ny+1)*(nz+1)) # Load the densities and material into the local_densities arrays - local_densities[self.mesh.data_nodegId[:self.mesh.nodesLocal]] = self.DensityVar.data[:self.mesh.nodesLocal] - local_materials[self.mesh.data_nodegId[:self.mesh.nodesLocal]] = self.MaterialVar.data[:self.mesh.nodesLocal] + local_densities[self.mesh.data_nodegId[:self.mesh.nodesLocal]] = self.DensityVar.data[:self.mesh.nodesLocal, 0] + local_materials[self.mesh.data_nodegId[:self.mesh.nodesLocal]] = self.MaterialVar.data[:self.mesh.nodesLocal, 0] # Reduce local_densities arrays to global_densities comm.Allreduce(local_densities, global_densities) diff --git a/UWGeodynamics/Underworld_extended/__init__.py b/UWGeodynamics/Underworld_extended/__init__.py deleted file mode 100644 index a4541ac8..00000000 --- a/UWGeodynamics/Underworld_extended/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from __future__ import print_function, absolute_import -from ._mesh import FeMesh_Cartesian -from ._swarm import Swarm -from ._swarmvariable import SwarmVariable -from ._meshvariable import MeshVariable diff --git a/UWGeodynamics/Underworld_extended/_mesh.py b/UWGeodynamics/Underworld_extended/_mesh.py deleted file mode 100644 index 9e0ce7af..00000000 --- a/UWGeodynamics/Underworld_extended/_mesh.py +++ /dev/null @@ -1,233 +0,0 @@ -from __future__ import print_function, absolute_import -import underworld as uw -import h5py -from mpi4py import MPI -from UWGeodynamics import dimensionalise -from UWGeodynamics import non_dimensionalise -from UWGeodynamics import UnitRegistry as u -from UWGeodynamics.version import git_revision as __git_revision__ -from . import _meshvariable as var - -class FeMesh_Cartesian(uw.mesh.FeMesh_Cartesian): - - def __init__(self, elementType="Q1/dQ0", - elementRes=(4,4), minCoord=(0.,0.), - maxCoord=(1.,1.), periodic=None, - partitioned=True, **kwargs): - - super(FeMesh_Cartesian, self).__init__(elementType, - elementRes, - minCoord, - maxCoord, - periodic, - partitioned, - **kwargs) - - def add_variable(self, nodeDofCount, dataType='double', **kwargs): - """ - Creates and returns a mesh variable using the discretisation of the given mesh. - - To set / read nodal values, use the numpy interface via the 'data' property. - - Parameters - ---------- - dataType : string - The data type for the variable. - Note that only 'double' type variables are currently - supported. - nodeDofCount : int - Number of degrees of freedom per node the variable will have - - Returns - ------- - underworld.mesh.MeshVariable - The newly created mesh variable. - - Example - ------- - >>> linearMesh = uw.mesh.FeMesh_Cartesian( elementType='Q1/dQ0', elementRes=(16,16), minCoord=(0.,0.), maxCoord=(1.,1.) ) - >>> scalarFeVar = linearMesh.add_variable( nodeDofCount=1, dataType="double" ) - >>> q0field = linearMesh.subMesh.add_variable( 1 ) # adds variable to secondary elementType discretisation - """ - - return var.MeshVariable(self, nodeDofCount, dataType, **kwargs) - - def save(self, filename, units=None, time=None): - """ - Save the mesh to disk - - Parameters - ---------- - filename : string - The name of the output file. - - Returns - ------- - underworld.utils.SavedFileData - Data object relating to saved file. This only needs to be retained - if you wish to create XDMF files and can be ignored otherwise. - - Notes - ----- - This method must be called collectively by all processes. - - Example - ------- - First create the mesh: - - >>> mesh = uw.mesh.FeMesh_Cartesian( elementType='Q1/dQ0', elementRes=(16,16), minCoord=(0.,0.), maxCoord=(1.,1.) ) - - Save to a file (note that the 'ignoreMe' object isn't really required): - - >>> ignoreMe = mesh.save("saved_mesh.h5") - - Now let's try and reload. First create new mesh (note the different spatial size): - - >>> clone_mesh = uw.mesh.FeMesh_Cartesian( elementType='Q1/dQ0', elementRes=(16,16), minCoord=(0.,0.), maxCoord=(1.5,1.5) ) - - Confirm clone mesh is different from original mesh: - - >>> import numpy as np - >>> np.allclose(mesh.data,clone_mesh.data) - False - - Now reload using saved file: - - >>> clone_mesh.load("saved_mesh.h5") - - Now check for equality: - - >>> np.allclose(mesh.data,clone_mesh.data) - True - - >>> # clean up: - >>> if uw.mpi.rank == 0: - ... import os; - ... os.remove( "saved_mesh.h5" ) - - """ - - if hasattr(self.generator, 'geometryMesh'): - raise RuntimeError("Cannot save this mesh as it's a subMesh. " - + "Most likely you only need to save its geometryMesh") - if not isinstance(filename, str): - raise TypeError("'filename', must be of type 'str'") - - h5f = h5py.File(name=filename, mode="w", driver='mpio', comm=MPI.COMM_WORLD) - - fact = 1.0 - if units: - fact = dimensionalise(1.0, units=units).magnitude - h5f.attrs['units'] = str(units) - - # save attributes and simple data - MUST be parallel as driver is mpio - h5f.attrs['dimensions'] = self.dim - h5f.attrs['mesh resolution'] = self.elementRes - h5f.attrs['max'] = tuple([fact*x for x in self.maxCoord]) - h5f.attrs['min'] = tuple([fact*x for x in self.minCoord]) - h5f.attrs['regular'] = self._cself.isRegular - h5f.attrs['elementType'] = self.elementType - h5f.attrs['time'] = str(time) - h5f.attrs["git commit"] = __git_revision__ - - # write the vertices - globalShape = ( self.nodesGlobal, self.data.shape[1] ) - dset = h5f.create_dataset("vertices", - shape=globalShape, - dtype=self.data.dtype) - - local = self.nodesLocal - # write to the dset using the local set of global node ids - with dset.collective: - dset[self.data_nodegId[0:local],:] = self.data[0:local] * fact - - # write the element node connectivity - globalShape = ( self.elementsGlobal, self.data_elementNodes.shape[1] ) - dset = h5f.create_dataset("en_map", - shape=globalShape, - dtype=self.data_elementNodes.dtype) - - local = self.elementsLocal - # write to the dset using the local set of global node ids - with dset.collective: - dset[self.data_elgId[0:local], :] = self.data_elementNodes[0:local] - - h5f.close() - - # return our file handle - return uw.utils.SavedFileData(self, filename) - - def load(self, filename): - """ - Load the mesh from disk. - - Parameters - ---------- - filename: str - The filename for the saved file. Relative or absolute paths may be - used, but all directories must exist. - - Notes - ----- - This method must be called collectively by all processes. - - If the file data array is the same length as the current mesh - global size, it is assumed the file contains compatible data. Note that - this may not be the case where for example where you have saved using a - 2*8 resolution mesh, then loaded using an 8*2 resolution mesh. - - Provided files must be in hdf5 format, and use the correct schema. - - Example - ------- - Refer to example provided for 'save' method. - - """ - self.reset() - if not isinstance(filename, str): - raise TypeError("Expected filename to be provided as a string") - - # get field and mesh information - h5f = h5py.File( filename, "r", driver='mpio', comm=MPI.COMM_WORLD ); - - # get resolution of old mesh - res = h5f.attrs['mesh resolution'] - if res is None: - raise RuntimeError("Can't read the 'mesh resolution' for the field hdf5 file,"+ - " was it created correctly?") - - if (res == self.elementRes).all() == False: - raise RuntimeError("Provided file mesh resolution does not appear to correspond to\n"\ - "resolution of mesh object.") - - # get units - try: - units = h5f.attrs["units"] - except KeyError: - units = None - - if units and units != "None": - units = u.parse_expression(units) - else: - units = None - - dset = h5f.get('vertices') - if dset == None: - raise RuntimeError("Can't find the 'vertices' dataset in hdf5 file '{0}'".format(filename) ) - - dof = dset.shape[1] - if dof != self.data.shape[1]: - raise RuntimeError("Can't load hdf5 '{0}', incompatible data shape".format(filename)) - - if len(dset) != self.nodesGlobal: - raise RuntimeError("Provided data file appears to be for a different resolution mesh.") - - with self.deform_mesh(isRegular=h5f.attrs['regular']): - with dset.collective: - if units: - self.data[0:self.nodesLocal] = non_dimensionalise( - dset[self.data_nodegId[0:self.nodesLocal], :] * units) - else: - self.data[0:self.nodesLocal] = dset[self.data_nodegId[0:self.nodesLocal], :] - - h5f.close() diff --git a/UWGeodynamics/Underworld_extended/_meshvariable.py b/UWGeodynamics/Underworld_extended/_meshvariable.py deleted file mode 100644 index dc96d434..00000000 --- a/UWGeodynamics/Underworld_extended/_meshvariable.py +++ /dev/null @@ -1,277 +0,0 @@ -from __future__ import print_function, absolute_import -import underworld as uw -import h5py -import numpy as np -import os -from mpi4py import MPI -from UWGeodynamics import dimensionalise -from UWGeodynamics import non_dimensionalise -from UWGeodynamics import UnitRegistry as u -from UWGeodynamics.version import git_revision as __git_revision__ - - -class MeshVariable(uw.mesh.MeshVariable): - - def __init__(self, mesh, nodeDofCount, dataType="double", **kwargs): - super(MeshVariable, self).__init__(mesh, nodeDofCount, dataType, **kwargs) - - def load(self, filename, interpolate=False): - """ - Load the MeshVariable from disk. - - Parameters - ---------- - filename: str - The filename for the saved file. Relative or absolute paths may be - used, but all directories must exist. - interpolate: bool - Set to True to interpolate a file containing different resolution data. - Note that a temporary MeshVariable with the file data will be build - on **each** processor. Also note that the temporary MeshVariable - can only be built if its corresponding mesh file is available. - Also note that the supporting mesh mush be regular. - - Notes - ----- - This method must be called collectively by all processes. - - If the file data array is the same length as the current variable - global size, it is assumed the file contains compatible data. Note that - this may not be the case where for example where you have saved using a - 2*8 resolution mesh, then loaded using an 8*2 resolution mesh. - - Provided files must be in hdf5 format, and use the correct schema. - - Example - ------- - Refer to example provided for 'save' method. - - """ - if not isinstance(filename, str): - raise TypeError("Expected filename to be provided as a string") - - # get field and mesh information - h5f = h5py.File( filename, "r", driver='mpio', comm=MPI.COMM_WORLD ); - dset = h5f.get('data') - - # get units - try: - units = h5f.attrs["units"] - except KeyError: - units = None - - if units and units != "None": - units = u.parse_expression(units) - else: - units = None - - if dset == None: - raise RuntimeError("Can't find the 'data' in hdf5 file '{0}'".format(filename) ) - - dof = dset.shape[1] - if dof != self.data.shape[1]: - raise RuntimeError("Can't load hdf5 '{0}', incompatible data shape".format(filename)) - - if len(dset) == self.mesh.nodesGlobal: - - # assume dset matches field exactly - mesh = self.mesh - local = mesh.nodesLocal - - with dset.collective: - self.data[0:local] = dset[mesh.data_nodegId[0:local],:] - - else: - if not interpolate: - raise RuntimeError("Provided data file appears to be for a different resolution MeshVariable.\n"\ - "If you would like to interpolate the data to the current variable, please set\n" \ - "the 'interpolate' parameter. Check docstring for important caveats of interpolation method.") - - # if here then we build a local version of the entire file field and interpolate it's values - - # first get file field's mesh - if h5f.get('mesh') == None: - raise RuntimeError("The hdf5 field to be loaded with interpolation must have an associated "+ - "'mesh' hdf5 file. Resave the field with its associated mesh."+ - "i.e. myField.save(\"filename.h5\", meshFilename)" ) - # get resolution of old mesh - res = h5f['mesh'].attrs.get('mesh resolution') - if res is None: - raise RuntimeError("Can't read the 'mesh resolution' for the field hdf5 file,"+ - " was it created correctly?") - - # get max of old mesh - inputMax = h5f['mesh'].attrs.get('max') - if inputMax is None: - raise RuntimeError("Can't read the 'max' for the field hdf5 file,"+ - " was it created correctly?") - - inputMin = h5f['mesh'].attrs.get('min') - if inputMin is None: - raise RuntimeError("Can't read the 'min' for the field hdf5 file,"+ - " was it created correctly?") - regular = h5f['mesh'].attrs.get('regular') - if regular and regular!=True: - raise RuntimeError("Saved mesh file appears to correspond to a irregular mesh.\n"\ - "Interpolating from irregular mesh not currently supported." ) - - elType = h5f['mesh'].attrs.get('elementType') - # for backwards compatiblity, the 'elementType' attribute was added Feb2017 - if elType == None: - elType = 'Q1' - - # build the NON-PARALLEL field and mesh - inputMesh = uw.mesh.FeMesh_Cartesian( elementType = (elType+"/DQ0"), # only geometryMesh can be saved - elementRes = tuple(res), - minCoord = tuple(inputMin), - maxCoord = tuple(inputMax), - partitioned=False) - - # load data onto MeshVariable - if len(dset) == inputMesh.nodesGlobal: - inputField = uw.mesh.MeshVariable( mesh=inputMesh, nodeDofCount=dof ) - elif dset.shape[0] == inputMesh.subMesh.nodesGlobal: - # load as a subMesh - # assume the dset field belongs to the subMesh - inputField = uw.mesh.MeshVariable( mesh=inputMesh.subMesh, nodeDofCount=dof ) - else: - # raise error - raise RuntimeError("The saved mesh file can't be read onto the interpolation grid.\n" \ - "Note: only subMesh variable with elementType 'DQ0' can be used presently used") - - # copy hdf5 numpy array onto serial inputField - inputField.data[:] = dset[:] - - # interpolate 'inputField' onto the self nodes - self.data[:] = inputField.evaluate(self.mesh.data) - - if units: - if units.units == "degC": - units = u.degK - self.data[:] = non_dimensionalise((self.data[:]+273.15)*units) - else: - self.data[:] = non_dimensionalise(self.data[:]*units) - - uw.libUnderworld.StgFEM._FeVariable_SyncShadowValues( self._cself ) - h5f.close() - - def save(self, filename, meshHandle=None, units=None, time=None): - """ - Save the MeshVariable to disk. - - Parameters - ---------- - filename : string - The name of the output file. Relative or absolute paths may be - used, but all directories must exist. - meshHandle :uw.utils.SavedFileData , optional - The saved mesh file handle. If provided, a link is created within the - mesh variable file to this saved mesh file. Important for checkpoint when - the mesh deforms. - - Notes - ----- - This method must be called collectively by all processes. - - Returns - ------- - underworld.utils.SavedFileData - Data object relating to saved file. This only needs to be retained - if you wish to create XDMF files and can be ignored otherwise. - - Example - ------- - First create the mesh add a variable: - - >>> mesh = uw.mesh.FeMesh_Cartesian( elementType='Q1/dQ0', elementRes=(16,16), minCoord=(0.,0.), maxCoord=(1.,1.) ) - >>> var = uw.mesh.MeshVariable( mesh=mesh, nodeDofCount=1, dataType="double" ) - - Write something to variable - - >>> import numpy as np - >>> var.data[:,0] = np.arange(var.data.shape[0]) - - Save to a file (note that the 'ignoreMe' object isn't really required): - - >>> ignoreMe = var.save("saved_mesh_variable.h5") - - Now let's try and reload. - - >>> clone_var = uw.mesh.MeshVariable( mesh=mesh, nodeDofCount=1, dataType="double" ) - >>> clone_var.load("saved_mesh_variable.h5") - - Now check for equality: - - >>> np.allclose(var.data,clone_var.data) - True - - >>> # clean up: - >>> if uw.mpi.rank == 0: - ... import os; - ... os.remove( "saved_mesh_variable.h5" ) - - """ - if not isinstance(filename, str): - raise TypeError("Expected 'filename' to be provided as a string") - - mesh = self.mesh - h5f = h5py.File(name=filename, mode="w", driver='mpio', comm=MPI.COMM_WORLD) - - # ugly global shape def - globalShape = ( mesh.nodesGlobal, self.data.shape[1] ) - # create dataset - dset = h5f.create_dataset("data", - shape=globalShape, - dtype=self.data.dtype) - fact = 1.0 - if units: - fact = dimensionalise(1.0, units=units).magnitude - if units == "degC": - fact = dimensionalise(1.0, units=u.degK).magnitude - # Save unit type as attribute - h5f.attrs['units'] = str(units) - - if time: - h5f.attrs['time'] = str(time) - - h5f.attrs["git commit"] = __git_revision__ - - # write to the dset using the global node ids - local = mesh.nodesLocal - - with dset.collective: - if units == "degC": - dset[mesh.data_nodegId[0:local],:] = self.data[0:local] * fact - 273.15 - else: - dset[mesh.data_nodegId[0:local],:] = self.data[0:local] * fact - - # save a hdf5 attribute to the elementType used for this field - maybe useful - h5f.attrs["elementType"] = np.string_(mesh.elementType) - - if hasattr( mesh.generator, "geometryMesh"): - mesh = mesh.generator.geometryMesh - - if meshHandle: - if not isinstance(meshHandle, (str, uw.utils.SavedFileData)): - raise TypeError("Expected 'meshHandle' to be of type 'uw.utils.SavedFileData'") - - if isinstance(meshHandle, str): - # DEPRECATION check - import warnings - warnings.warn("'meshHandle' paramater should be of type uw.utils.SaveFileData. Please update your models. "+ - "Accepting 'meshHandle' as a string parameter will be removed in the next release.") - meshFilename = meshHandle - else: - meshFilename = meshHandle.filename - - if not os.path.exists(meshFilename): - raise ValueError("You are trying to link against the mesh file '{}'\n\ - that does not appear to exist. If you need to link \n\ - against a mesh file, please make sure it is created first.".format(meshFilename)) - # set reference to mesh (all procs must call following) - h5f["mesh"] = h5py.ExternalLink(meshFilename, "./") - - h5f.close() - - # return our file handle - return uw.utils.SavedFileData(self, filename) diff --git a/UWGeodynamics/Underworld_extended/_swarm.py b/UWGeodynamics/Underworld_extended/_swarm.py deleted file mode 100644 index fe7ea9a9..00000000 --- a/UWGeodynamics/Underworld_extended/_swarm.py +++ /dev/null @@ -1,248 +0,0 @@ -from __future__ import print_function, absolute_import -import underworld as uw -import h5py -import numpy as np -from mpi4py import MPI -from UWGeodynamics import non_dimensionalise -from UWGeodynamics import UnitRegistry as u -from . import _swarmvariable as svar - - -class Swarm(uw.swarm.Swarm): - def __init__(self, mesh, particleEscape=False, **kwargs): - super(Swarm, self).__init__(mesh, particleEscape, **kwargs) - - def _setup(self): - if self._cself.particleCoordVariable: - self._particleCoordinates = svar.SwarmVariable( - self, "double", self.mesh.dim, - _cself=self._cself.particleCoordVariable, - writeable=False) - - def add_variable(self, dataType, count): - """ - Add a variable to each particle in this swarm. Variables can be added - at any point. Removal of variables is however not currently supported. - See help(SwarmVariable) for further information. - - Parameters - ---------- - dataType: str - The data type for the variable. Available types are "char", - "short", "int", "float" or "double". - count: unsigned - The number of values to be stored for each particle. - - Returns - ------- - underworld.swarm.SwarmVariable - The newly created swarm variable. - - Example - ------- - >>> # first we need a mesh - >>> mesh = uw.mesh.FeMesh_Cartesian( elementType='Q1/dQ0', elementRes=(16,16), minCoord=(0.,0.), maxCoord=(1.,1.) ) - >>> # create swarm - >>> swarm = uw.swarm.Swarm(mesh) - >>> # add a variable - >>> svar = swarm.add_variable("char",1) - >>> # add another - >>> svar = swarm.add_variable("double",3) - >>> # add some particles - >>> swarm.populate_using_layout(uw.swarm.layouts.PerCellGaussLayout(swarm,2)) - >>> # add another variable - >>> svar = swarm.add_variable("double",5) - - """ - return svar.SwarmVariable( self, dataType, count ) - - def save(self, filename, collective=False, units=None, time=None): - """ - Save the swarm to disk. - - Parameters - ---------- - filename : str - The filename for the saved file. Relative or absolute paths may be - used, but all directories must exist. - - Returns - ------- - underworld.utils.SavedFileData - Data object relating to saved file. This only needs to be retained - if you wish to create XDMF files and can be ignored otherwise. - - Notes - ----- - This method must be called collectively by all processes - - Example - ------- - First create the swarm, and populate with layout: - - >>> mesh = uw.mesh.FeMesh_Cartesian( elementType='Q1/dQ0', elementRes=(16,16), minCoord=(0.,0.), maxCoord=(1.,1.) ) - >>> swarm = uw.swarm.Swarm(mesh) - >>> swarm.populate_using_layout(uw.swarm.layouts.PerCellGaussLayout(swarm,2)) - - Save to a file: - - >>> ignoreMe = swarm.save("saved_swarm.h5") - - Now let's try and reload. First create an empty swarm, and then load: - - >>> clone_swarm = uw.swarm.Swarm(mesh) - >>> clone_swarm.load( "saved_swarm.h5" ) - - Now check for equality: - - >>> import numpy as np - >>> np.allclose(swarm.particleCoordinates.data,clone_swarm.particleCoordinates.data) - True - - >>> # clean up: - >>> if uw.mpi.rank == 0: - ... import os; - ... os.remove( "saved_swarm.h5" ) - - """ - - if not isinstance(filename, str): - raise TypeError("Expected filename to be provided as a string") - - # just save the particle coordinates SwarmVariable - self.particleCoordinates.save(filename, collective, units=units, time=time) - - return uw.utils.SavedFileData( self, filename ) - - def load( self, filename, collective=False, try_optimise=True, verbose=False ): - """ - Load a swarm from disk. Note that this must be called before any SwarmVariable - members are loaded. - - Parameters - ---------- - filename : str - The filename for the saved file. Relative or absolute paths may be - used. - try_optimise : bool, Default=True - Will speed up the swarm load time but warning - this algorithm assumes the - previously saved swarm data was made on an identical mesh and mesh partitioning - (number of processors) with respect to the current mesh. If this isn't the case then - the reloaded particle ordering will be broken, leading to an invalid swarms. - One can disable this optimisation and revert to a brute force algorithm, much slower, - by setting this option to False. - verbose : bool - Prints a swarm load progress bar. - - Notes - ----- - This method must be called collectively by all processes. - - Example - ------- - Refer to example provided for 'save' method. - - """ - - if not isinstance(filename, str): - raise TypeError("Expected 'filename' to be provided as a string") - - # open hdf5 file - h5f = h5py.File(name=filename, mode="r", driver='mpio', comm=MPI.COMM_WORLD) - - # get units - try: - units = h5f.attrs["units"] - except KeyError: - units = None - - if units and units != "None": - units = u.parse_expression(units) - else: - units = None - - dset = h5f.get('data') - if dset == None: - raise RuntimeError("Can't find 'data' in file '{0}'.\n".format(filename)) - if dset.shape[1] != self.particleCoordinates.data.shape[1]: - raise RuntimeError("Cannot load file data on current swarm. Data in file '{0}', " \ - "has {1} components -the particlesCoords has {2} components".format(filename, dset.shape[1], self.particleCoordinates.data.shape[1])) - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - nProcs = comm.Get_size() - - if rank == 0 and verbose: - bar = uw.utils._ProgressBar( start=0, end=dset.shape[0]-1, title="loading "+filename) - - # try and read the procCount attribute & assume that if nProcs in .h5 file - # is equal to the current no. procs then the particles will be distributed the - # same across the processors. (Danger if different discretisations are used... i think) - # else try and load the whole .h5 file. - # we set the 'offset' & 'size' variables to achieve the above - - offset = 0 - size = dset.shape[0] # number of particles in h5 file - - if try_optimise: - procCount = h5f.attrs.get('proc_offset') - if procCount is not None and nProcs == len(procCount): - for p_i in range(rank): - offset += procCount[p_i] - size = procCount[rank] - - valid = np.zeros(0, dtype='i') # array for read in - chunk=int(2e7) # read in this many points at a time - - firstChunk = True - (multiples, remainder) = divmod( size, chunk ) - for ii in range(multiples+1): - # setup the points to begin and end reading in - chunkStart = offset + ii*chunk - if ii == multiples: - chunkEnd = chunkStart + remainder - if remainder == 0: # in the case remainder is 0 - break - else: - chunkEnd = chunkStart + chunk - - # Add particles to swarm, ztmp is the corresponding local array - # non-local particles are not added and their ztmp index is -1. - # Note that for the first chunk, we do collective read, as this - # is the only time that we can guaranteed that all procs will - # take part, and usually most (if not all) particles are loaded - # in this step. - if firstChunk and collective: - with dset.collective: - if units: - vals = non_dimensionalise(dset[ chunkStart : chunkEnd] * units) - ztmp = self.add_particles_with_coordinates(vals) - else: - ztmp = self.add_particles_with_coordinates(dset[ chunkStart : chunkEnd ]) - firstChunk = False - else: - if units: - vals = non_dimensionalise(dset[ chunkStart : chunkEnd] * units) - ztmp = self.add_particles_with_coordinates(vals) - else: - ztmp = self.add_particles_with_coordinates(dset[ chunkStart : chunkEnd ]) - tmp = np.copy(ztmp) # copy because ztmp is 'readonly' - - # slice out -neg bits and make the local indices global - it = np.nditer(tmp, op_flags=['readwrite'], flags=['f_index']) - while not it.finished: - if it[0] >= 0: - it[0] = chunkStart+it.index # local to global - it.iternext() - - # slice out -neg bits - tmp = tmp[tmp[:]>=0] - # append to valid - valid = np.append(valid, tmp) - - if rank == 0 and verbose: - bar.update(chunkEnd) - - h5f.close() - self._local2globalMap = valid - # record which swarm state this corresponds to - self._checkpointMapsToState = self.stateId diff --git a/UWGeodynamics/Underworld_extended/_swarmvariable.py b/UWGeodynamics/Underworld_extended/_swarmvariable.py deleted file mode 100644 index 4ebafcca..00000000 --- a/UWGeodynamics/Underworld_extended/_swarmvariable.py +++ /dev/null @@ -1,285 +0,0 @@ -from __future__ import print_function, absolute_import -import underworld as uw -import h5py -import numpy as np -from mpi4py import MPI -from UWGeodynamics import dimensionalise -from UWGeodynamics import non_dimensionalise -from UWGeodynamics import UnitRegistry as u -from UWGeodynamics.version import git_revision as __git_revision__ - -class SwarmVariable(uw.swarm.SwarmVariable): - - def __init__(self, swarm, dataType, count, writeable=True, **kwargs): - super(SwarmVariable, self).__init__(swarm, dataType, count, - writeable=True, **kwargs) - - def load(self, filename, collective=False): - """ - Load the swarm variable from disk. This must be called *after* the swarm.load(). - - Parameters - ---------- - filename : str - The filename for the saved file. Relative or absolute paths may be - used, but all directories must exist. - - Notes - ----- - This method must be called collectively by all processes. - - - Example - ------- - Refer to example provided for 'save' method. - - """ - - if not isinstance(filename, str): - raise TypeError("'filename' parameter must be of type 'str'") - - if self.swarm._checkpointMapsToState != self.swarm.stateId: - raise RuntimeError("'Swarm' associate with this 'SwarmVariable' does not appear to be in the correct state.\n" \ - "Please ensure that you have loaded the swarm prior to loading any swarm variables.") - gIds = self.swarm._local2globalMap - - comm = MPI.COMM_WORLD - rank = comm.rank - - # open hdf5 file - h5f = h5py.File(name=filename, mode="r", driver='mpio', comm=MPI.COMM_WORLD) - - - dset = h5f.get('data') - if dset == None: - raise RuntimeError("Can't find 'data' in file '{}'.\n".format(filename)) - - if dset.shape[1] != self.data.shape[1]: - raise RuntimeError("Cannot load file data on current swarm. Data in file '{0}', " \ - "has {1} components -the particlesCoords has {2} components".format(filename, dset.shape[1], self.particleCoordinates.data.shape[1])) - - if dset.shape[0] != self.swarm.particleGlobalCount: - raise RuntimeError("It appears that the swarm has {} particles, but provided h5 file has {} data points. Please check that " \ - "both the Swarm and the SwarmVariable were saved at the same time, and that you have reloaded using " \ - "the correct files.".format(particleGobalCount, dset.shape[0])) - - # for efficiency, we want to load swarmvariable data in the largest stride chunks possible. - # we need to determine where required data is contiguous. - # first construct an array of gradients. the required data is contiguous - # where the indices into the array are increasing by 1, ie have a gradient of 1. - gradIds = np.zeros_like(gIds) # creates array of zeros of same size & type - if len(gIds) > 1: - gradIds[:-1] = gIds[1:] - gIds[:-1] # forward difference type gradient - - # note that we do only the first read into dset collective. this call usually - # does the entire read, but if it doesn't we won't know how many calls will - # be necessary, hence only collective calling the first. - done_collective = False - guy = 0 - while guy < len(gIds): - # do contiguous - start_guy = guy - while gradIds[guy]==1: # count run of contiguous. note bounds check not required as last element of gradIds is always zero. - guy += 1 - # copy contiguous chunk if found.. note that we are copying 'plus 1' items - if guy > start_guy: - if collective and not done_collective: - with dset.collective: - self.data[start_guy:guy+1] = dset[gIds[start_guy]:gIds[guy]+1] - done_collective = True - else: - self.data[start_guy:guy+1] = dset[gIds[start_guy]:gIds[guy]+1] - guy += 1 - - # do non-contiguous - start_guy = guy - while guy start_guy: - if collective and not done_collective: - with dset.collective: - self.data[start_guy:guy,:] = dset[gIds[start_guy:guy],:] - done_collective = True - else: - self.data[start_guy:guy,:] = dset[gIds[start_guy:guy],:] - - # if we haven't entered a collective call, do so now to - # avoid deadlock. we just do an empty read/write. - if collective and not done_collective: - with dset.collective: - self.data[0:0, :] = dset[0:0, :] - - # get units - try: - units = h5f.attrs["units"] - except KeyError: - units = None - - if units and units != "None": - units = u.parse_expression(units) - else: - units = None - - h5f.close() - - if units: - self.data[:] = non_dimensionalise(self.data * units) - - def save( self, filename, collective=False, units=None, time=None): - """ - Save the swarm variable to disk. - - Parameters - ---------- - filename : str - The filename for the saved file. Relative or absolute paths may be - used, but all directories must exist. - swarmHandle :uw.utils.SavedFileData , optional - The saved swarm file handle. If provided, a reference to the swarm file - is made. Currently this doesn't provide any extra functionality. - - Returns - ------- - underworld.utils.SavedFileData - Data object relating to saved file. This only needs to be retained - if you wish to create XDMF files and can be ignored otherwise. - - Notes - ----- - This method must be called collectively by all processes. - - Example - ------- - First create the swarm, populate, then add a variable: - - >>> mesh = uw.mesh.FeMesh_Cartesian( elementType='Q1/dQ0', elementRes=(16,16), minCoord=(0.,0.), maxCoord=(1.,1.) ) - >>> swarm = uw.swarm.Swarm(mesh) - >>> swarm.populate_using_layout(uw.swarm.layouts.PerCellGaussLayout(swarm,2)) - >>> svar = swarm.add_variable("int",1) - - Write something to variable - - >>> import numpy as np - >>> svar.data[:,0] = np.arange(swarm.particleLocalCount) - - Save to a file: - - >>> ignoreMe = swarm.save("saved_swarm.h5") - >>> ignoreMe = svar.save("saved_swarm_variable.h5") - - Now let's try and reload. First create a new swarm and swarm variable, - and then load both: - - >>> clone_swarm = uw.swarm.Swarm(mesh) - >>> clone_svar = clone_swarm.add_variable("int",1) - >>> clone_swarm.load("saved_swarm.h5") - >>> clone_svar.load("saved_swarm_variable.h5") - - Now check for equality: - - >>> import numpy as np - >>> np.allclose(svar.data,clone_svar.data) - True - - >>> # clean up: - >>> if uw.mpi.rank == 0: - ... import os; - ... os.remove( "saved_swarm.h5" ) - ... os.remove( "saved_swarm_variable.h5" ) - - """ - - if not isinstance(filename, str): - raise TypeError("'filename' parameter must be of type 'str'") - - # setup mpi basic vars - comm = MPI.COMM_WORLD - rank = comm.rank - - # allgather the number of particles each proc has - swarm = self.swarm - procCount = comm.allgather(swarm.particleLocalCount) - particleGlobalCount = np.sum(procCount) - - # calculate the hdf5 file offset - offset=0 - for i in range(comm.rank): - offset += procCount[i] - - # open parallel hdf5 file - with h5py.File(name=filename, mode="w", driver='mpio', comm=MPI.COMM_WORLD) as h5f: - # write the entire local swarm to the appropriate offset position - globalShape = (particleGlobalCount, self.data.shape[1]) - dset = h5f.create_dataset("data", - shape=globalShape, - dtype=self.data.dtype) - fact = 1.0 - if units: - fact = dimensionalise(1.0, units=units).magnitude - - if collective: - with dset.collective: - dset[offset:offset+swarm.particleLocalCount] = self.data[:] * fact - else: - dset[offset:offset + swarm.particleLocalCount] = self.data[:] * fact - - # let's reopen in serial to write the attrib. - # not sure if this really is necessary. - comm.Barrier() - if comm.rank == 0: - with h5py.File(name=filename, mode="a") as h5f: - # attribute of the proc offsets - used for loading from checkpoint - h5f.attrs["proc_offset"] = procCount - h5f.attrs['units'] = str(units) - h5f.attrs['time'] = str(time) - h5f.attrs["git commit"] = __git_revision__ - - return uw.utils.SavedFileData( self, filename ) - - def copy(self, deepcopy=False): - """ - This method returns a copy of the swarmvariable. - - Parameters - ---------- - deepcopy: bool - If True, the variable's data is also copied into - new variable. - - Returns - ------- - underworld.swarm.SwarmVariable - The swarm variable copy. - - Example - ------- - >>> import math - >>> mesh = uw.mesh.FeMesh_Cartesian() - >>> 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 == svar.swarm - True - >>> svarCopy.dataType == svar.dataType - True - >>> import numpy as np - >>> np.allclose(svar.data, svarCopy.data) - False - >>> svarCopy2 = svar.copy(deepcopy=True) - >>> np.allclose(svar.data, svarCopy2.data) - True - - """ - - if not isinstance(deepcopy, bool): - raise TypeError("'deepcopy' parameter is expected to be of type 'bool'.") - - newSv = SwarmVariable(self.swarm, self.dataType, self.count) - - if deepcopy: - newSv.data[:] = self.data[:] - - return newSv diff --git a/UWGeodynamics/Underworld_extended/_utils.py b/UWGeodynamics/Underworld_extended/_utils.py deleted file mode 100644 index 1eb7d750..00000000 --- a/UWGeodynamics/Underworld_extended/_utils.py +++ /dev/null @@ -1,57 +0,0 @@ -import os -import h5py -from underworld.utils._utils import _xdmfAttributeschema - - -_dtypes_to_xdmf = { - ' 0: + for dim in range(self.field.data.shape[1]): # Scalar condition @@ -217,10 +218,10 @@ def get_conditions(self): if nodes: self._apply_conditions_nodes(condition, nodes) - if self.condition_type is "Dirichlet": + if self.condition_type == "Dirichlet": return uw.conditions.DirichletCondition( variable=self.field, indexSetsPerDof=self._indices) - elif self.condition_type is "Neumann": + elif self.condition_type == "Neumann": _neumann_indices = [] # Remove empty Sets @@ -387,20 +388,16 @@ def _apply_conditions_nodes(self, condition, nodes): return - # Expect a list or tuple of dimension mesh.dim. - # Check that the domain actually contains some boundary nodes - # (nodes is not None) - if isinstance(condition, (list, tuple)) and nodes.data.size > 0: - for dim in range(self.Model.mesh.dim): - - # Inflow Outflow - if isinstance(condition[dim], Balanced_InflowOutflow): - obj = condition[dim] - obj.ynodes = self.Model.mesh.data[nodes.data, 1] - obj._get_side_flow() - self.Model.velocityField.data[nodes.data, dim] = ( - obj._get_side_flow()) - self._add_to_indices(dim, nodes) + if isinstance(condition, Balanced_InflowOutflow): + # I don't like that, needs to be redesigned... + obj = condition + obj.ynodes = self.Model.mesh.data[nodes.data, 1] + self.Model.velocityField.data[nodes.data, 0] = ( + obj._get_side_flow()) + self.Model.velocityField.data[nodes.data, 1] = 0. + self._add_to_indices(0, nodes) + self._add_to_indices(1, nodes) + return super(VelocityBCs, self)._apply_conditions_nodes(condition, nodes) @@ -647,7 +644,7 @@ def __init__(self, Model, left=None, right=None, top=None, bottom=None, right = self._get_heat_flux(right[0], right[1]) if top: - top = self._get_heat_flux(top[0], right[1]) + top = self._get_heat_flux(top[0], top[1]) if bottom: bottom = self._get_heat_flux(bottom[0], bottom[1]) diff --git a/UWGeodynamics/_model.py b/UWGeodynamics/_model.py index 9653e8b9..c3a3046d 100644 --- a/UWGeodynamics/_model.py +++ b/UWGeodynamics/_model.py @@ -23,15 +23,16 @@ from ._boundary_conditions import StressBCs, VelocityBCs from ._mesh_advector import Mesh_advector from ._frictional_boundary import FrictionBoundaries -from .Underworld_extended import FeMesh_Cartesian -from .Underworld_extended import Swarm -from .Underworld_extended import MeshVariable -from .Underworld_extended import SwarmVariable -from .Underworld_extended._utils import _swarmvarschema +from underworld.mesh import FeMesh_Cartesian +from underworld.swarm import Swarm +from underworld.mesh import MeshVariable +from underworld.swarm import SwarmVariable +from underworld.utils import _swarmvarschema from datetime import datetime from .version import full_version from ._freesurface import FreeSurfaceProcessor from ._remeshing import ReMesher +from ._density import Density comm = _MPI.COMM_WORLD rank = comm.rank @@ -169,7 +170,6 @@ def __init__(self, elementRes=(64, 64), self.restart_variables = OrderedDict() # Add common mesh variables - self.temperature = False self.add_submesh_field("pressureField", nodeDofCount=1, restart_variable=True) self.add_mesh_variable("velocityField", nodeDofCount=self.mesh.dim, @@ -245,6 +245,7 @@ def __init__(self, elementRes=(64, 64), # Initialise remaining attributes self.defaultStrainRate = 1e-15 / u.second + self.minStrainRate = 1e-20 / u.second self._solution_exist = fn.misc.constant(False) self._temperatureDot = None self._temperature = None @@ -285,16 +286,21 @@ def _initialize(self): maxSplits=rcParams["popcontrol.max.splits"], particlesPerCell=particlesPerCell) - # Add Common Swarm Variables + ## Add Common Swarm Variables + # time dependent vars self.add_swarm_variable("materialField", dataType="int", count=1, restart_variable=True, init_value=self.index) self.add_swarm_variable("plasticStrain", dataType="double", count=1, restart_variable=True) - self.add_swarm_variable("_viscosityField", dataType="double", count=1) - self.add_swarm_variable("_densityField", dataType="double", count=1) - self.add_swarm_variable("meltField", dataType="double", count=1) + self.add_swarm_variable("meltField", dataType="double", count=1, + restart_variable=True) self.add_swarm_variable("timeField", dataType="double", count=1, restart_variable=True) + + # non t dependent vars + # ASSUMES density and viscosity are uw.fn dependent on other vars + self.add_swarm_variable("_viscosityField", dataType="double", count=1) + self.add_swarm_variable("_densityField", dataType="double", count=1) self.timeField.data[...] = 0.0 self.materialField.data[...] = self.index @@ -445,6 +451,11 @@ def strainRate_2ndInvariant(self): condition = [(self._solution_exist, self._strainRate_2ndInvariant), (True, fn.misc.constant(nd(self.defaultStrainRate)))] self._strainRate_2ndInvariant = fn.branching.conditional(condition) + + condition = [(self._strainRate_2ndInvariant<=nd(self.minStrainRate),nd(self.minStrainRate)), + (True, self._strainRate_2ndInvariant)] + self._strainRate_2ndInvariant = fn.branching.conditional(condition) + return self._strainRate_2ndInvariant @property @@ -579,8 +590,8 @@ def set_temperatureBCs(self, left=None, right=None, >>> u = GEO.u >>> Model = GEO.Model() - >>> Model.set_temperatureBCs(top=500. * u.degK, bottom=1600. * u.degK) - ... + >>> ign = Model.set_temperatureBCs(top=500. * u.degK, bottom=1600. * u.degK) + You can of course define temperatures on the sidewalls: @@ -588,40 +599,37 @@ def set_temperatureBCs(self, left=None, right=None, >>> u = GEO.u >>> Model = GEO.Model() - >>> Model.set_temperatureBCs(right=500. * u.degK, left=1600. * u.degK) + >>> ign = Model.set_temperatureBCs(right=500. * u.degK, left=1600. * u.degK) ... Fix the temperature of a Material - >>> import UWGeodynamics as GEO + >>> import UWGeodynamics as GEO #doctest: +ELLIPSIS >>> u = GEO.u >>> Model = GEO.Model() - - >>> Model.set_temperatureBCs(top=500. * u.degK, + >>> air = Model.add_material(name="sky") + >>> ign = Model.set_temperatureBCs(top=500. * u.degK, ... bottom=-0.022 * u.milliwatt / u.metre**2, - ... bottom_material=Model, - ... materials=[(air, 273. * u.Kelvin)]) + ... materials=[(air, 273.*u.degK)]) ... Fix the temperature of internal nodes You can assign a temperature to a list of nodes by passing a list of node indices (global). - >>> import UWGeodynamics as GEO + >>> import UWGeodynamics as GEO #doctest: +ELLIPSIS >>> u = GEO.u >>> Model = GEO.Model() - >>> nodes = [0, 1, 2] - >>> Model.set_temperatureBCs(top=500. * u.degK, + >>> ign = Model.set_temperatureBCs(top=500. * u.degK, ... bottom=-0.022 * u.milliwatt / u.metre**2, - ... bottom_material=Model, - ... nodeSets=[(273. * u.Kelvin, nodes)]) + ... nodeSets=[(nodes, 273.*u.degK)]) ... - """ - if not self.temperature: - self.temperature = True + """ + if not self._temperature: + self._init_temperature_variables() self._temperatureBCs = TemperatureBCs(self, left=left, right=right, top=top, bottom=bottom, @@ -632,7 +640,7 @@ def set_temperatureBCs(self, left=None, right=None, def set_heatFlowBCs(self, left=None, right=None, top=None, bottom=None, - front=None, back=None): + front=None, back=None,nodeSets=None, materials=None): """ Define heat flow boundaries condition @@ -702,24 +710,28 @@ def set_heatFlowBCs(self, left=None, right=None, >>> u = GEO.u >>> Model = GEO.Model() - >>> Material = Model.add_material(shape=GEO.Layer(top=Model.top, - ... bottom=Model.bottom) - >>> Model.set_heatFlowBCs(bottom=(-0.22 * u.milliwatt / u.metre**2, + >>> Material = Model.add_material(shape=GEO.shapes.Layer(top=Model.top, + ... bottom=Model.bottom)) + >>> Material.capacity = 1e3 * u.joule / (u.degK * u.kg) + >>> Material.density = 2e3 * u.kg * u.m**-3 + >>> ign = Model.set_heatFlowBCs(bottom=(-0.22 * u.milliwatt / u.metre**2, ... Material)) ... """ - - if not self.temperature: - self.temperature = True - + if not self._temperature: + self._init_temperature_variables() + self._heatFlowBCs = HeatFlowBCs(self, left=left, right=right, top=top, bottom=bottom, - back=back, front=front) + back=back, front=front,nodeSets=nodeSets,materials=materials) return self._heatFlowBCs.get_conditions() @property def temperatureBCs(self): - return self._temperatureBCs.get_conditions() + if self._temperatureBCs: + return self._temperatureBCs.get_conditions() + else: + return self._temperatureBCs @temperatureBCs.setter def temperatureBCs(self, value): @@ -771,22 +783,14 @@ def solver(self): def temperature(self): """ Temperature Field """ return self._temperature - + @temperature.setter def temperature(self, value): - if value is True: - self._temperature = MeshVariable(mesh=self.mesh, - nodeDofCount=1) - self._temperatureDot = MeshVariable(mesh=self.mesh, - nodeDofCount=1) - self._heatFlux = MeshVariable(mesh=self.mesh, - nodeDofCount=1) - self._temperatureDot.data[...] = 0. - self._heatFlux.data[...] = 0. - self.mesh_variables["temperature"] = self._temperature - self.restart_variables["temperature"] = self._temperature - else: - self._temperature = False + """ Temperature Field """ + if not self._temperature: + self._init_temperature_variables() + if isinstance(value, fn.Function): + self._temperature.data[...] = value.evaluate(self.mesh) @property def _advdiffSystem(self): @@ -1227,14 +1231,13 @@ def _densityFn(self): densityMap = {} for material in self.materials: - if self.temperature: - dens_handler = material.density - dens_handler.temperatureField = self.temperature - dens_handler.pressureField = self.pressureField - densityMap[material.index] = dens_handler.effective_density() + density = material.density + if isinstance(material.density, Density): + density.temperatureField = self.temperature + density.pressureField = self.pressureField + densityMap[material.index] = density.effective_density() else: - dens_handler = material.density - densityMap[material.index] = nd(dens_handler.reference_density) + densityMap[material.index] = density if material.meltExpansion: fact = material.meltExpansion * self.meltField @@ -1488,17 +1491,31 @@ def solve(self): if rcParams["rebuild.solver"]: self._solver = False - def init_model(self, temperature=True, pressureField=True, + def _init_temperature_variables(self): + self._temperature = MeshVariable(mesh=self.mesh, + nodeDofCount=1) + self._temperatureDot = MeshVariable(mesh=self.mesh, + nodeDofCount=1) + self._heatFlux = MeshVariable(mesh=self.mesh, + nodeDofCount=1) + self._temperatureDot.data[...] = 0. + self._heatFlux.data[...] = 0. + self.mesh_variables["temperature"] = self._temperature + self.restart_variables["temperature"] = self._temperature + + def init_model(self, temperature="steady-state", pressure="lithostatic", defaultStrainRate=1e-15 / u.second): - """ Initialize the Temperature Field as steady state, - Initialize the Pressure Field as Lithostatic - Initialize the viscosity field based on default + """ Initialise the Temperature Field as steady state, + Initialise the Pressure Field as Lithostatic + Initialise the viscosity field based on default strain rate. + Will only initialise the temperature field if diffusivity is defined in the model. + Parameters: ----------- - temperature: (bool) default to True - pressure: (bool) default to True + temperature: defaults to "steady-state", can be an Underworld function + pressure: defaults to "lithostatic", can be an Underworld function example: -------- @@ -1508,18 +1525,40 @@ def init_model(self, temperature=True, pressureField=True, >>> Model = GEO.Model() >>> Model.density = 2000. * u.kilogram / u.metre**3 - >>> Model.init_model(temperature=False, pressure=True) + >>> Model.diffusivity = 9e-7 * u.metre**2 / u.second + >>> ign = Model.set_temperatureBCs(top=273.15 * u.degK, bottom=1603.15 * u.degK) + >>> Model.init_model(temperature="steady-state", pressure="lithostatic") ... """ - - # Init Temperature Field - if self.temperature and temperature: - self.solve_temperature_steady_state() + if temperature is None: + import warnings + warnings.warn("You have not passed anything to the temperature argument. The temperature field will not be initialised") + + if pressure is None: + import warnings + warnings.warn("You have not passed anything to the pressure argument. The pressure field will not be initialised") + + # Init Temperature Field only if DiffusivityFn or deffusivity are defined + if temperature is not None: + if not self._temperature: + self._init_temperature_variables() + if isinstance(temperature, fn.Function): + self._temperature.data[...] = temperature.evaluate(self.mesh) + elif isinstance(temperature, str) and temperature.lower() == "steady-state": + if not (self.DiffusivityFn or self.diffusivity): + import warnings + warnings.warn("Skipping the steady state calculation: No diffusivity variable defined on Model") + else: + self.solve_temperature_steady_state() # Init pressureField Field - if self.pressureField and pressureField: - self.initialize_pressure_to_lithostatic() + if pressure is not None: + if self.pressureField: + if isinstance(pressure, fn.Function): + self.pressureField.data[...] = pressure.evaluate(self.mesh.subMesh) + elif isinstance(pressure, str) and pressure.lower() == "lithostatic": + self.initialize_pressure_to_lithostatic() # Init ViscosityField if any([material.viscosity for material in self.materials]): @@ -1602,7 +1641,7 @@ def run_for(self, duration=None, checkpoint_interval=None, nstep=None, self._dt = 2.0 * rcParams["CFL"] * self.swarm_advector.get_max_dt() - if self.temperature: + if self.temperatureBCs: # Only get a condition if using SUPG if rcParams["advection.diffusion.method"] == "SUPG": supg_dt = self._advdiffSystem.get_max_dt() @@ -1720,7 +1759,7 @@ def _update(self): self.update_melt_fraction() # Solve for temperature - if self.temperature: + if self.temperatureBCs: self._advdiffSystem.integrate(dt) if self._advector: @@ -1801,7 +1840,7 @@ def add_passive_tracers(self, name, vertices, >>> coords = np.ndarray((npoints, 2)) >>> coords[:, 0] = x >>> coords[:, 1] = y - >>> tracers = Model.add_passive_tracers(vertices=coords) + >>> Model.add_passive_tracers(name='test', 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 @@ -1820,17 +1859,17 @@ def add_passive_tracers(self, name, vertices, >>> 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) + >>> Model.add_passive_tracers(name='test', vertices=np.array([[0,0]]), centroids=coords) We provide a function to create circles on a grid: >>> import UWGeodynamics as GEO - >>> pts = GEO.circles_grid(radius = 2.0 * u.kilometer, - ... minCoord=[Model.minCoord[0], lowercrust.bottom], - ... maxCoord=[Model.maxCoord[0], 0.*u.kilometer]) + >>> pts = GEO.circles_grid(radius = 2.0 * u.km, + ... minCoord=[0.*u.km, 0.*u.km], + ... maxCoord=[10.*u.km, 10.*u.km]) + ... """ @@ -1868,8 +1907,8 @@ def add_passive_tracers(self, name, vertices, self.velocityField, tracers, order=2) self.passive_tracers[name] = tracers - setattr(self, name.lower() + "_tracers", tracers) - return tracers + setattr(self, name + "_tracers", tracers) + return def _get_melt_fraction(self): """ Melt Fraction function @@ -2299,9 +2338,9 @@ def checkpoint(self): Model = self.Model - if (((self.step_type is "time") and + if (((self.step_type == "time") and (Model._ndtime == self.next_checkpoint)) or - ((self.step_type is "step") and + ((self.step_type == "step") and (Model.stepDone == self.next_checkpoint))): Model.checkpointID += 1 @@ -2326,7 +2365,7 @@ def get_next_checkpoint_time(self): dt1 = None dt2 = None - if self.step_type is "time": + if self.step_type == "time": dt1 = self.next_checkpoint - Model._ndtime if self.checkpoint_times: diff --git a/UWGeodynamics/_remeshing.py b/UWGeodynamics/_remeshing.py index ba57c539..545330a0 100644 --- a/UWGeodynamics/_remeshing.py +++ b/UWGeodynamics/_remeshing.py @@ -1,6 +1,6 @@ import numpy as np from UWGeodynamics import non_dimensionalise as nd -from .Underworld_extended import MeshVariable +from underworld.mesh import MeshVariable from scipy.interpolate import interp1d import copy diff --git a/UWGeodynamics/_utils.py b/UWGeodynamics/_utils.py index 3ef3f176..8593c91c 100644 --- a/UWGeodynamics/_utils.py +++ b/UWGeodynamics/_utils.py @@ -8,8 +8,8 @@ from UWGeodynamics import non_dimensionalise as nd from UWGeodynamics import dimensionalise from UWGeodynamics import UnitRegistry as u -from .Underworld_extended._utils import _swarmvarschema -from .Underworld_extended import Swarm, SwarmVariable +from underworld.utils import _swarmvarschema +from underworld.swarm import Swarm, SwarmVariable from scipy import spatial from mpi4py import MPI as _MPI @@ -214,8 +214,6 @@ def __init__(self, vtop, top, pt1, pt2, ynodes=None, conditions such as the total volume is conserved. Return the velocity profile. - NOTE. The current version implies uniform dy. - Input: Vtop Top Velocity condition @@ -331,9 +329,10 @@ def circles_grid(radius, minCoord, maxCoord, npoints=72): >>> import UWGeodynamics as GEO >>> u = GEO.u - >>> x_c, y_c = GEO.circles_grid(radius = 2.0 * u.kilometer, - ... minCoord=[Model.minCoord[0], 20. * u.kilometer], - ... maxCoord=[Model.maxCoord[0], 40. * u.kilometer]) + >>> pts = GEO.circles_grid(radius = 2.0 * u.km, + ... minCoord=(0. * u.km, 0. * u.km), + ... maxCoord=(40. * u.km, 40. * u.km)) + ... """ @@ -403,7 +402,7 @@ def circles_grid(radius, minCoord, maxCoord, npoints=72): z = points[:, :, 2].ravel() # Finally, returns a 2D array - coords = np.ndarray((x.size, 2)) + coords = np.ndarray((x.size, 3)) coords[:, 0] = x coords[:, 1] = y coords[:, 2] = z @@ -663,3 +662,43 @@ def rotateTensor2D(t, theta): t_[:,2] = ( t[:,1] - t[:,0] ) *np.cos(theta[:])*np.sin(theta[:]) + t[:,2]*np.cos(2*theta[:]) return t_ + + +def remesh(mesh, xcoords=None, xelements=None, ycoords=None, yelements=None): + """ This function can be used to remesh the mesh based on + required number of elements along each axis. + + example: + + Model = GEO.Model(elementRes=(128, 32), + minCoord=(-600 * u.kilometer, -600. * u.kilometer), + maxCoord=(600. * u.kilometer, 0. * u.kilometer)) + + xnodes = GEO.nd(np.array([-600, -120, 0.]) * u.km) + ynodes = GEO.nd(np.array([-600, 600]) * u.km) + + from UWGeodynamics import remesh + remesh(Model.mesh, xnodes, np.array([2, 30]), ynodes, np.array([128])) + + """ + + def redistribute_nodes(coords, elements): + data = np.array([]) + for idx, n in enumerate(elements): + endpoint=True if idx + 1 == len(elements) else False + npts = n + 1 if idx + 1 == len(elements) else n + data = np.append(data, np.linspace(coords[idx], coords[idx+1], npts, endpoint=endpoint)) + return data + + if ycoords.size and yelements.size: + ys = redistribute_nodes(xcoords, xelements) + + if xcoords.size and xelements.size: + xs = redistribute_nodes(ycoords, yelements) + + xs, ys = np.meshgrid(xs, ys) + + with mesh.deform_mesh(): + mesh.data[:,0] = xs.flatten() + mesh.data[:,1] = ys.flatten() + return mesh diff --git a/UWGeodynamics/lithopress/lithopress.py b/UWGeodynamics/lithopress/lithopress.py index 8800ec99..a4899c1e 100644 --- a/UWGeodynamics/lithopress/lithopress.py +++ b/UWGeodynamics/lithopress/lithopress.py @@ -95,8 +95,8 @@ def _lithoPressure2D(self): Ipositions = node_gids - Jpositions * (ncol + 1) # Get local domain data - local_y[Jpositions, Ipositions] = self.mesh.data[:self.mesh.nodesLocal, 1][:, np.newaxis] - local_density[Jpositions, Ipositions] = self.DensityVar.data[:self.mesh.nodesLocal] + local_y[Jpositions, Ipositions] = self.mesh.data[:self.mesh.nodesLocal, 1] + local_density[Jpositions, Ipositions] = self.DensityVar.data[:self.mesh.nodesLocal, 0] comm.Allreduce(local_y, global_y) comm.Allreduce(local_density, global_density) @@ -127,7 +127,7 @@ def _lithoPressure2D(self): local_pressure = Tpressure.flatten()[all_nodes] - self.lithostatic_field.data[:] = local_pressure + self.lithostatic_field.data[:, 0] = local_pressure self.lithostatic_field.syncronise() self.Cell2Nodes.solve() @@ -218,7 +218,7 @@ def _lithoPressure3D(self): local_pressure = Tpressure.flatten()[all_nodes] - self.lithostatic_field.data[:] = local_pressure + self.lithostatic_field.data[:, 0] = local_pressure self.lithostatic_field.syncronise() self.Cell2Nodes.solve() diff --git a/UWGeodynamics/scaling/__init__.py b/UWGeodynamics/scaling/__init__.py deleted file mode 100644 index abf873c8..00000000 --- a/UWGeodynamics/scaling/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -##~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~## -## ## -## This file forms part of the Underworld geophysics modelling application. ## -## ## -## For full license and copyright information, please refer to the LICENSE.md file ## -## located at the project root, or contact the authors. ## -## ## -##~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~## - -""" -The scaling module provides units and scaling capabilities. -""" - -from ._scaling import non_dimensionalise -from ._scaling import dimensionalise -from ._scaling import u as units -from ._scaling import get_coefficients diff --git a/UWGeodynamics/scaling/_scaling.py b/UWGeodynamics/scaling/_scaling.py deleted file mode 100644 index 7c0a738c..00000000 --- a/UWGeodynamics/scaling/_scaling.py +++ /dev/null @@ -1,209 +0,0 @@ -##~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~## -## ## -## This file forms part of the Underworld geophysics modelling application. ## -## ## -## For full license and copyright information, please refer to the LICENSE.md file ## -## located at the project root, or contact the authors. ## -## ## -##~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~## - -""" -Utilities to convert between dimensional and non-dimensional values. -""" -from __future__ import print_function, absolute_import -import underworld as uw -from ._utils import TransformedDict -from pint import UnitRegistry - -u = UnitRegistry() - -COEFFICIENTS = None -def get_coefficients(): - """ - Returns the global scaling dictionary. - """ - global COEFFICIENTS - if COEFFICIENTS is None: - COEFFICIENTS = TransformedDict() - COEFFICIENTS["[length]"] = 1.0 * u.meter - COEFFICIENTS["[mass]"] = 1.0 * u.kilogram - COEFFICIENTS["[time]"] = 1.0 * u.year - COEFFICIENTS["[temperature]"] = 1.0 * u.degK - COEFFICIENTS["[substance]"] = 1.0 * u.mole - return COEFFICIENTS - -def non_dimensionalise(dimValue): - """ - Non-dimensionalize (scale) provided quantity. - - This function uses pint to perform a dimension analysis and - return a value scaled according to a set of scaling coefficients. - - Parameters - ---------- - dimValue : pint quantity - - Returns - ------- - float: The scaled value. - - Example: - -------- - >>> import underworld as uw - >>> u = uw.scaling.units - - >>> # Characteristic values of the system - >>> half_rate = 0.5 * u.centimeter / u.year - >>> model_height = 600e3 * u.meter - >>> refViscosity = 1e24 * u.pascal * u.second - >>> surfaceTemp = 0. * u.kelvin - >>> baseModelTemp = 1330. * u.kelvin - >>> baseCrustTemp = 550. * u.kelvin - - >>> KL_meters = model_height - >>> KT_seconds = KL_meters / half_rate - >>> KM_kilograms = refViscosity * KL_meters * KT_seconds - >>> Kt_degrees = (baseModelTemp - surfaceTemp) - >>> K_substance = 1. * u.mole - - >>> scaling_coefficients = uw.scaling.get_coefficients() - >>> scaling_coefficients["[time]"] = KT_seconds - >>> scaling_coefficients["[length]"] = KL_meters - >>> scaling_coefficients["[mass]"] = KM_kilograms - >>> scaling_coefficients["[temperature]"] = Kt_degrees - >>> scaling_coefficients["[substance]"] -= K_substance - - >>> # Get a scaled value: - >>> gravity = uw.scaling.non_dimensionalise(9.81 * u.meter / u.second**2) - """ - try: - val = dimValue.unitless - if val: - return dimValue - except AttributeError: - return dimValue - - dimValue = dimValue.to_base_units() - - scaling_coefficients = get_coefficients() - - length = scaling_coefficients["[length]"] - time = scaling_coefficients["[time]"] - mass = scaling_coefficients["[mass]"] - temperature = scaling_coefficients["[temperature]"] - substance = scaling_coefficients["[substance]"] - - length = length.to_base_units() - time = time.to_base_units() - mass = mass.to_base_units() - temperature = temperature.to_base_units() - substance = substance.to_base_units() - - @u.check('[length]', '[time]', '[mass]', '[temperature]', '[substance]') - def check(length, time, mass, temperature, substance): - return - - check(length, time, mass, temperature, substance) - - # Get dimensionality - dlength = dimValue.dimensionality['[length]'] - dtime = dimValue.dimensionality['[time]'] - dmass = dimValue.dimensionality['[mass]'] - dtemp = dimValue.dimensionality['[temperature]'] - dsubstance = dimValue.dimensionality['[substance]'] - factor = (length**(-dlength) * - time**(-dtime) * - mass**(-dmass) * - temperature**(-dtemp) * - substance**(-dsubstance)) - - dimValue *= factor - - if dimValue.unitless: - return dimValue.magnitude - else: - raise ValueError('Dimension Error') - - -def dimensionalise(value, units): - """ - Dimensionalise a value. - - Parameters - ---------- - value : float, int - The value to be assigned units. - units : pint units - The units to be assigned. - - Returns - ------- - pint quantity: dimensionalised value. - - Example - ------- - >>> import underworld as uw - >>> A = uw.scaling.dimensionalise(1.0, u.metre) - """ - - unit = (1.0 * units).to_base_units() - - scaling_coefficients = get_coefficients() - - length = scaling_coefficients["[length]"] - time = scaling_coefficients["[time]"] - mass = scaling_coefficients["[mass]"] - temperature = scaling_coefficients["[temperature]"] - substance = scaling_coefficients["[substance]"] - - length = length.to_base_units() - time = time.to_base_units() - mass = mass.to_base_units() - temperature = temperature.to_base_units() - substance = substance.to_base_units() - - @u.check('[length]', '[time]', '[mass]', '[temperature]', '[substance]') - def check(length, time, mass, temperature, substance): - return - - # Check that the scaling parameters have the correct dimensions - check(length, time, mass, temperature, substance) - - # Get dimensionality - dlength = unit.dimensionality['[length]'] - dtime = unit.dimensionality['[time]'] - dmass = unit.dimensionality['[mass]'] - dtemp = unit.dimensionality['[temperature]'] - dsubstance = unit.dimensionality['[substance]'] - factor = (length**(dlength) * - time**(dtime) * - mass**(dmass) * - temperature**(dtemp) * - substance**(dsubstance)) - - if (isinstance(value, uw.mesh._meshvariable.MeshVariable) or - isinstance(value, uw.swarm._swarmvariable.SwarmVariable)): - - tempVar = value.copy() - tempVar.data[...] = (value.data[...] * factor).to(units) - return tempVar - 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 diff --git a/UWGeodynamics/scaling/_utils.py b/UWGeodynamics/scaling/_utils.py deleted file mode 100644 index 1940f69b..00000000 --- a/UWGeodynamics/scaling/_utils.py +++ /dev/null @@ -1,92 +0,0 @@ -##~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~## -## ## -## This file forms part of the Underworld geophysics modelling application. ## -## ## -## For full license and copyright information, please refer to the LICENSE.md file ## -## located at the project root, or contact the authors. ## -## ## -##~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~## - -from __future__ import print_function, absolute_import -from itertools import chain -from collections import OrderedDict - -try: # Python 2 - str_base = basestring - items = 'iteritems' -except NameError: # Python 3 - str_base = str, bytes, bytearray - items = 'items' - -_RaiseKeyError = object() # singleton for no-default behavior - - - -def ensure_lower(maybe_str): - """dict keys can be any hashable object - only call lower if str""" - return maybe_str.lower() if isinstance(maybe_str, str_base) else maybe_str - - -def ensure_to_base_units(val): - return val.to_base_units() - - -class TransformedDict(dict): # dicts take a mapping or iterable as their optional first argument - __slots__ = () # no __dict__ - that would be redundant - - @staticmethod # because this doesn't make sense as a global function. - def _process_args(mapping=(), **kwargs): - if hasattr(mapping, items): - mapping = getattr(mapping, items)() - return ((ensure_lower(k), ensure_to_base_units(v)) for k, v in chain(mapping, getattr(kwargs, items)())) - - def __init__(self, mapping=(), **kwargs): - super(TransformedDict, self).__init__(self._process_args(mapping, **kwargs)) - - def __getitem__(self, k): - return super(TransformedDict, self).__getitem__(ensure_lower(k)) - - def __setitem__(self, k, v): - return super(TransformedDict, self).__setitem__(ensure_lower(k), ensure_to_base_units(v)) - - def __delitem__(self, k): - return super(TransformedDict, self).__delitem__(ensure_lower(k)) - - def get(self, k, default=None): - return super(TransformedDict, self).get(ensure_lower(k), default) - - def setdefault(self, k, default=None): - return super(TransformedDict, self).setdefault(ensure_lower(k), default) - - def pop(self, k, v=_RaiseKeyError): - if v is _RaiseKeyError: - return super(TransformedDict, self).pop(ensure_lower(k)) - return super(TransformedDict, self).pop(ensure_lower(k), v) - - def update(self, mapping=(), **kwargs): - super(TransformedDict, self).update(self._process_args(mapping, **kwargs)) - - def __contains__(self, k): - return super(TransformedDict, self).__contains__(ensure_lower(k)) - - def copy(self): # don't delegate w/ super - dict.copy() -> dict :( - return type(self)(self) - - @classmethod - def fromkeys(cls, keys, v=None): - return super(TransformedDict, cls).fromkeys((ensure_lower(k) for k in keys), v) - - def _repr_html_(self): - attributes = OrderedDict() - attributes["[mass]"] = self["[mass]"] - attributes["[length]"] = self["[length]"] - attributes["[temperature]"] = self["[temperature]"] - attributes["[time]"] = self["[time]"] - attributes["[substance]"] = self["[substance]"] - header = "" - footer = "
" - html = "" - for key, val in attributes.items(): - html += "{0}{1}".format(key, val) - - return header + html + footer diff --git a/conda/meta.yaml b/conda/meta.yaml new file mode 100644 index 00000000..52a4e818 --- /dev/null +++ b/conda/meta.yaml @@ -0,0 +1,41 @@ +{% set name = "UWGeodynamics" %} +{% set version = "2.10.0b" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + #url: https://github.com/underworldcode/UWGeodynamics/archive/v{{ version }}.tar.gz + #sha256: + git_url: https://github.com/underworldcode/UWGeodynamics.git + git_tag: development + +build: + skip: true # [win] + number: 0 + script: {{ PYTHON }} -m pip install . -vv + +requirements: + host: + - python + - underworld2>=2.10 + + run: + - python + - underworld2>=2.10 + + +about: + home: "https://github.com/underworldcode/UWGeodynamics" + license: LGPL-3.0-only + license_family: LGPL + license_file: LICENSE.md + summary: "Underworld Geodynamics Project" + doc_url: https://uwgeodynamics.readthedocs.io/ + dev_url: https://github.com/underworldcode/UWGeodynamics/tree/development + +extra: + recipe-maintainers: + - rbeucher + - jgiordani diff --git a/docker-compose.yaml b/docker-compose.yaml index a132e077..cd17c36b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -13,6 +13,6 @@ services: - "8888:8888" - "9999:9999" volumes: - - "$PWD:/workspace" + - "$PWD:/home/jovyan/workspace" diff --git a/docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb b/docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb index 7b54ff51..e5d71eaf 100644 --- a/docs/benchmarks/1_12_Slab_Detachment_Benchmark.ipynb +++ b/docs/benchmarks/1_12_Slab_Detachment_Benchmark.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/romain/Projects/Project_Surface_processes/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -125,12 +125,12 @@ "outputs": [], "source": [ "Mantle.viscosity = GEO.ViscousCreep(preExponentialFactor=5.0e-22 * u.pascal**-1 * u.second**-1, \n", - " stressExponent=1, \n", + " stressExponent=1., \n", " activationVolume=0.0,\n", " activationEnergy=0.0)\n", "\n", "Lithosphere.viscosity = GEO.ViscousCreep(preExponentialFactor=1.23e-48 * u.pascal**-4 * u.second**-1, \n", - " stressExponent=4, \n", + " stressExponent=4., \n", " activationVolume=0.0,\n", " activationEnergy=0.0)" ] @@ -143,7 +143,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -161,7 +161,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -175,21 +175,21 @@ "\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", + "Model.add_passive_tracers(name=\"left\", vertices=coords)\n", "\n", "coords[:, 0] = GEO.nd(40 * u.km)\n", - "right_tracers = Model.add_passive_tracers(name=\"right tracers\", vertices=coords)" + "Model.add_passive_tracers(name=\"right\", vertices=coords)" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -201,24 +201,24 @@ ], "source": [ "Fig = vis.Figure(figsize=(800,600))\n", - "Fig.Points(left_tracers, pointSize=5.0)\n", - "Fig.Points(right_tracers, pointSize=5.0)\n", + "Fig.Points(Model.left_tracers, pointSize=5.0)\n", + "Fig.Points(Model.right_tracers, pointSize=5.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=3.0)\n", "Fig.show()" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 17, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -229,22 +229,31 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Projects/Project_Surface_processes/UWGeodynamics/UWGeodynamics/_model.py:1527: UserWarning: You have not passed anything to the temperature argument. The temperature field will not be initialised\n", + " warnings.warn(\"You have not passed anything to the temperature argument. The temperature field will not be initialised\")\n" + ] + } + ], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -262,7 +271,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -274,160 +283,25 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Step:1 Model Time: 1.0 megayear dt: 1.0 megayear (2018-06-14 05:32:59)\n", - "Step:2 Model Time: 2.0 megayear dt: 1.0 megayear (2018-06-14 05:33:02)\n", - "Step:3 Model Time: 3.0 megayear dt: 1.0 megayear (2018-06-14 05:33:04)\n", - "Step:4 Model Time: 4.0 megayear dt: 1.0 megayear (2018-06-14 05:33:08)\n", - "Step:5 Model Time: 5.0 megayear dt: 1.0 megayear (2018-06-14 05:33:11)\n", - "Step:6 Model Time: 6.0 megayear dt: 1.0 megayear (2018-06-14 05:33:14)\n", - "Step:7 Model Time: 6.96990538404 megayear dt: 0.969905384044 megayear (2018-06-14 05:33:16)\n", - "Step:8 Model Time: 7.0 megayear dt: 0.030094615956 megayear (2018-06-14 05:33:18)\n", - "Step:9 Model Time: 7.94699583585 megayear dt: 0.946995835847 megayear (2018-06-14 05:33:19)\n", - "Step:10 Model Time: 8.0 megayear dt: 0.0530041641526 megayear (2018-06-14 05:33:22)\n", - "Step:11 Model Time: 8.83128924743 megayear dt: 0.831289247431 megayear (2018-06-14 05:33:24)\n", - "Step:12 Model Time: 9.0 megayear dt: 0.168710752569 megayear (2018-06-14 05:33:27)\n", - "Step:13 Model Time: 9.7490473083 megayear dt: 0.749047308301 megayear (2018-06-14 05:33:29)\n", - "Step:14 Model Time: 10.0 megayear dt: 0.250952691699 megayear (2018-06-14 05:33:32)\n", - "Step:15 Model Time: 10.6990920637 megayear dt: 0.699092063749 megayear (2018-06-14 05:33:33)\n", - "Step:16 Model Time: 11.0 megayear dt: 0.300907936251 megayear (2018-06-14 05:33:36)\n", - "Step:17 Model Time: 11.6109883554 megayear dt: 0.610988355372 megayear (2018-06-14 05:33:38)\n", - "Step:18 Model Time: 12.0 megayear dt: 0.389011644628 megayear (2018-06-14 05:33:40)\n", - "Step:19 Model Time: 12.5245366471 megayear dt: 0.524536647141 megayear (2018-06-14 05:33:43)\n", - "Step:20 Model Time: 13.0 megayear dt: 0.475463352859 megayear (2018-06-14 05:33:46)\n", - "Step:21 Model Time: 13.4500480171 megayear dt: 0.450048017111 megayear (2018-06-14 05:33:48)\n", - "Step:22 Model Time: 13.9024065928 megayear dt: 0.45235857564 megayear (2018-06-14 05:33:50)\n", - "Step:23 Model Time: 14.0 megayear dt: 0.0975934072498 megayear (2018-06-14 05:33:53)\n", - "Step:24 Model Time: 14.4086681017 megayear dt: 0.40866810173 megayear (2018-06-14 05:33:55)\n", - "Step:25 Model Time: 14.79657031 megayear dt: 0.387902208262 megayear (2018-06-14 05:33:57)\n", - "Step:26 Model Time: 15.0 megayear dt: 0.203429690008 megayear (2018-06-14 05:34:00)\n", - "Step:27 Model Time: 15.3184790509 megayear dt: 0.31847905094 megayear (2018-06-14 05:34:02)\n", - "Step:28 Model Time: 15.6135852378 megayear dt: 0.29510618683 megayear (2018-06-14 05:34:05)\n", - "Step:29 Model Time: 15.891958643 megayear dt: 0.278373405192 megayear (2018-06-14 05:34:07)\n", - "Step:30 Model Time: 16.0 megayear dt: 0.108041357038 megayear (2018-06-14 05:34:11)\n", - "Step:31 Model Time: 16.25754686 megayear dt: 0.257546860003 megayear (2018-06-14 05:34:13)\n", - "Step:32 Model Time: 16.5037784619 megayear dt: 0.246231601935 megayear (2018-06-14 05:34:15)\n", - "Step:33 Model Time: 16.7345994207 megayear dt: 0.230820958738 megayear (2018-06-14 05:34:17)\n", - "Step:34 Model Time: 16.9583987776 megayear dt: 0.223799356948 megayear (2018-06-14 05:34:19)\n", - "Step:35 Model Time: 17.0 megayear dt: 0.0416012223752 megayear (2018-06-14 05:34:23)\n", - "Step:36 Model Time: 17.1902002206 megayear dt: 0.190200220594 megayear (2018-06-14 05:34:24)\n", - "Step:37 Model Time: 17.3750015155 megayear dt: 0.184801294892 megayear (2018-06-14 05:34:26)\n", - "Step:38 Model Time: 17.5557633776 megayear dt: 0.180761862139 megayear (2018-06-14 05:34:28)\n", - "Step:39 Model Time: 17.7330438645 megayear dt: 0.177280486872 megayear (2018-06-14 05:34:30)\n", - "Step:40 Model Time: 17.8961117468 megayear dt: 0.16306788226 megayear (2018-06-14 05:34:33)\n", - "Step:41 Model Time: 18.0 megayear dt: 0.103888253244 megayear (2018-06-14 05:34:36)\n", - "Step:42 Model Time: 18.1494585685 megayear dt: 0.149458568472 megayear (2018-06-14 05:34:38)\n", - "Step:43 Model Time: 18.2890953999 megayear dt: 0.139636831472 megayear (2018-06-14 05:34:40)\n", - "Step:44 Model Time: 18.4176958145 megayear dt: 0.128600414554 megayear (2018-06-14 05:34:42)\n", - "Step:45 Model Time: 18.5426373436 megayear dt: 0.124941529058 megayear (2018-06-14 05:34:44)\n", - "Step:46 Model Time: 18.6641799169 megayear dt: 0.121542573391 megayear (2018-06-14 05:34:46)\n", - "Step:47 Model Time: 18.7830073329 megayear dt: 0.118827415992 megayear (2018-06-14 05:34:48)\n", - "Step:48 Model Time: 18.8978745872 megayear dt: 0.114867254237 megayear (2018-06-14 05:34:50)\n", - "Step:49 Model Time: 19.0 megayear dt: 0.102125412823 megayear (2018-06-14 05:34:52)\n", - "Step:50 Model Time: 19.1097562017 megayear dt: 0.109756201698 megayear (2018-06-14 05:34:54)\n", - "Step:51 Model Time: 19.2187614655 megayear dt: 0.109005263804 megayear (2018-06-14 05:34:56)\n", - "Step:52 Model Time: 19.32474977 megayear dt: 0.105988304512 megayear (2018-06-14 05:34:58)\n", - "Step:53 Model Time: 19.4293844321 megayear dt: 0.104634662052 megayear (2018-06-14 05:34:59)\n", - "Step:54 Model Time: 19.5269934992 megayear dt: 0.0976090671282 megayear (2018-06-14 05:35:01)\n", - "Step:55 Model Time: 19.6235335169 megayear dt: 0.0965400177484 megayear (2018-06-14 05:35:02)\n", - "Step:56 Model Time: 19.7165142228 megayear dt: 0.0929807058086 megayear (2018-06-14 05:35:04)\n", - "Step:57 Model Time: 19.8057497158 megayear dt: 0.0892354930373 megayear (2018-06-14 05:35:06)\n", - "Step:58 Model Time: 19.8872342607 megayear dt: 0.0814845448925 megayear (2018-06-14 05:35:07)\n", - "Step:59 Model Time: 19.966248305 megayear dt: 0.0790140443548 megayear (2018-06-14 05:35:09)\n", - "Step:60 Model Time: 20.0 megayear dt: 0.0337516949652 megayear (2018-06-14 05:35:11)\n", - "Step:61 Model Time: 20.0735942944 megayear dt: 0.0735942943897 megayear (2018-06-14 05:35:13)\n", - "Step:62 Model Time: 20.1473665921 megayear dt: 0.0737722976726 megayear (2018-06-14 05:35:15)\n", - "Step:63 Model Time: 20.2208916087 megayear dt: 0.0735250166416 megayear (2018-06-14 05:35:16)\n", - "Step:64 Model Time: 20.2927026526 megayear dt: 0.0718110439218 megayear (2018-06-14 05:35:18)\n", - "Step:65 Model Time: 20.3635001793 megayear dt: 0.070797526667 megayear (2018-06-14 05:35:19)\n", - "Step:66 Model Time: 20.4335218453 megayear dt: 0.0700216660374 megayear (2018-06-14 05:35:21)\n", - "Step:67 Model Time: 20.5020123529 megayear dt: 0.0684905075299 megayear (2018-06-14 05:35:23)\n", - "Step:68 Model Time: 20.5707287127 megayear dt: 0.0687163598111 megayear (2018-06-14 05:35:24)\n", - "Step:69 Model Time: 20.6376762935 megayear dt: 0.0669475808509 megayear (2018-06-14 05:35:26)\n", - "Step:70 Model Time: 20.7033724733 megayear dt: 0.0656961797667 megayear (2018-06-14 05:35:28)\n", - "Step:71 Model Time: 20.7699094073 megayear dt: 0.0665369340171 megayear (2018-06-14 05:35:29)\n", - "Step:72 Model Time: 20.8359750158 megayear dt: 0.0660656085054 megayear (2018-06-14 05:35:31)\n", - "Step:73 Model Time: 20.9007725848 megayear dt: 0.0647975689539 megayear (2018-06-14 05:35:33)\n", - "Step:74 Model Time: 20.9652425633 megayear dt: 0.0644699785663 megayear (2018-06-14 05:35:34)\n", - "Step:75 Model Time: 21.0 megayear dt: 0.0347574366686 megayear (2018-06-14 05:35:37)\n", - "Step:76 Model Time: 21.0647279726 megayear dt: 0.0647279726058 megayear (2018-06-14 05:35:38)\n", - "Step:77 Model Time: 21.1287379876 megayear dt: 0.0640100149518 megayear (2018-06-14 05:35:40)\n", - "Step:78 Model Time: 21.1924043124 megayear dt: 0.0636663248181 megayear (2018-06-14 05:35:42)\n", - "Step:79 Model Time: 21.255227418 megayear dt: 0.0628231056662 megayear (2018-06-14 05:35:43)\n", - "Step:80 Model Time: 21.3182232044 megayear dt: 0.0629957863994 megayear (2018-06-14 05:35:45)\n", - "Step:81 Model Time: 21.3804943091 megayear dt: 0.0622711046558 megayear (2018-06-14 05:35:46)\n", - "Step:82 Model Time: 21.4430992966 megayear dt: 0.0626049875232 megayear (2018-06-14 05:35:48)\n", - "Step:83 Model Time: 21.5048178035 megayear dt: 0.0617185069108 megayear (2018-06-14 05:35:50)\n", - "Step:84 Model Time: 21.5671371618 megayear dt: 0.0623193582387 megayear (2018-06-14 05:35:52)\n", - "Step:85 Model Time: 21.6287224965 megayear dt: 0.0615853347508 megayear (2018-06-14 05:35:54)\n", - "Step:86 Model Time: 21.6902325565 megayear dt: 0.0615100599759 megayear (2018-06-14 05:35:56)\n", - "Step:87 Model Time: 21.7510913689 megayear dt: 0.060858812361 megayear (2018-06-14 05:35:58)\n", - "Step:88 Model Time: 21.8121185662 megayear dt: 0.0610271973654 megayear (2018-06-14 05:36:00)\n", - "Step:89 Model Time: 21.873417324 megayear dt: 0.0612987578243 megayear (2018-06-14 05:36:02)\n", - "Step:90 Model Time: 21.9347661559 megayear dt: 0.0613488318618 megayear (2018-06-14 05:36:04)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step:91 Model Time: 21.9951704796 megayear dt: 0.0604043237122 megayear (2018-06-14 05:36:05)\n", - "Step:92 Model Time: 22.0 megayear dt: 0.00482952037897 megayear (2018-06-14 05:36:08)\n", - "Step:93 Model Time: 22.0604914941 megayear dt: 0.0604914941355 megayear (2018-06-14 05:36:10)\n", - "Step:94 Model Time: 22.1209493891 megayear dt: 0.0604578949851 megayear (2018-06-14 05:36:12)\n", - "Step:95 Model Time: 22.1820329158 megayear dt: 0.061083526679 megayear (2018-06-14 05:36:13)\n", - "Step:96 Model Time: 22.243007742 megayear dt: 0.0609748261731 megayear (2018-06-14 05:36:15)\n", - "Step:97 Model Time: 22.3037319588 megayear dt: 0.0607242168606 megayear (2018-06-14 05:36:18)\n", - "Step:98 Model Time: 22.3649619404 megayear dt: 0.0612299815494 megayear (2018-06-14 05:36:20)\n", - "Step:99 Model Time: 22.4263771086 megayear dt: 0.0614151681897 megayear (2018-06-14 05:36:22)\n", - "Step:100 Model Time: 22.4878299138 megayear dt: 0.0614528052626 megayear (2018-06-14 05:36:24)\n", - "Step:101 Model Time: 22.5492913752 megayear dt: 0.0614614613328 megayear (2018-06-14 05:36:26)\n", - "Step:102 Model Time: 22.610123274 megayear dt: 0.0608318988196 megayear (2018-06-14 05:36:28)\n", - "Step:103 Model Time: 22.672488711 megayear dt: 0.0623654369901 megayear (2018-06-14 05:36:30)\n", - "Step:104 Model Time: 22.7343841584 megayear dt: 0.0618954474268 megayear (2018-06-14 05:36:32)\n", - "Step:105 Model Time: 22.7977436419 megayear dt: 0.0633594835132 megayear (2018-06-14 05:36:34)\n", - "Step:106 Model Time: 22.8618384271 megayear dt: 0.0640947852314 megayear (2018-06-14 05:36:36)\n", - "Step:107 Model Time: 22.9249428794 megayear dt: 0.0631044522279 megayear (2018-06-14 05:36:38)\n", - "Step:108 Model Time: 22.989267983 megayear dt: 0.0643251035843 megayear (2018-06-14 05:36:39)\n", - "Step:109 Model Time: 23.0 megayear dt: 0.0107320170389 megayear (2018-06-14 05:36:42)\n", - "Step:110 Model Time: 23.0660679882 megayear dt: 0.0660679882286 megayear (2018-06-14 05:36:44)\n", - "Step:111 Model Time: 23.1312424859 megayear dt: 0.0651744977034 megayear (2018-06-14 05:36:47)\n", - "Step:112 Model Time: 23.1972135689 megayear dt: 0.0659710830009 megayear (2018-06-14 05:36:49)\n", - "Step:113 Model Time: 23.2641490755 megayear dt: 0.0669355065944 megayear (2018-06-14 05:36:51)\n", - "Step:114 Model Time: 23.3307427483 megayear dt: 0.0665936727947 megayear (2018-06-14 05:36:53)\n", - "Step:115 Model Time: 23.3964705725 megayear dt: 0.0657278241932 megayear (2018-06-14 05:36:55)\n", - "Step:116 Model Time: 23.4620411439 megayear dt: 0.0655705714179 megayear (2018-06-14 05:36:57)\n", - "Step:117 Model Time: 23.52633254 megayear dt: 0.064291396034 megayear (2018-06-14 05:36:59)\n", - "Step:118 Model Time: 23.5915179151 megayear dt: 0.0651853751722 megayear (2018-06-14 05:37:01)\n", - "Step:119 Model Time: 23.6554699192 megayear dt: 0.0639520040937 megayear (2018-06-14 05:37:03)\n", - "Step:120 Model Time: 23.7198617593 megayear dt: 0.0643918400963 megayear (2018-06-14 05:37:05)\n", - "Step:121 Model Time: 23.7834772024 megayear dt: 0.0636154431079 megayear (2018-06-14 05:37:07)\n", - "Step:122 Model Time: 23.8469883297 megayear dt: 0.0635111273078 megayear (2018-06-14 05:37:09)\n", - "Step:123 Model Time: 23.9120307348 megayear dt: 0.0650424050485 megayear (2018-06-14 05:37:11)\n", - "Step:124 Model Time: 23.9778545247 megayear dt: 0.0658237899443 megayear (2018-06-14 05:37:13)\n", - "Step:125 Model Time: 24.0 megayear dt: 0.0221454752623 megayear (2018-06-14 05:37:15)\n", - "Step:126 Model Time: 24.0650488599 megayear dt: 0.0650488599486 megayear (2018-06-14 05:37:17)\n", - "Step:127 Model Time: 24.1295694153 megayear dt: 0.0645205553281 megayear (2018-06-14 05:37:19)\n", - "Step:128 Model Time: 24.1925711324 megayear dt: 0.0630017171546 megayear (2018-06-14 05:37:21)\n", - "Step:129 Model Time: 24.2579446029 megayear dt: 0.0653734704361 megayear (2018-06-14 05:37:23)\n", - "Step:130 Model Time: 24.3243830538 megayear dt: 0.0664384509094 megayear (2018-06-14 05:37:24)\n", - "Step:131 Model Time: 24.3913345831 megayear dt: 0.0669515293457 megayear (2018-06-14 05:37:26)\n", - "Step:132 Model Time: 24.4587636358 megayear dt: 0.0674290526793 megayear (2018-06-14 05:37:28)\n", - "Step:133 Model Time: 24.5262970523 megayear dt: 0.0675334165011 megayear (2018-06-14 05:37:30)\n", - "Step:134 Model Time: 24.5940511412 megayear dt: 0.0677540888598 megayear (2018-06-14 05:37:31)\n", - "Step:135 Model Time: 24.6635212102 megayear dt: 0.0694700690713 megayear (2018-06-14 05:37:33)\n", - "Step:136 Model Time: 24.7359000869 megayear dt: 0.0723788766544 megayear (2018-06-14 05:37:35)\n", - "Step:137 Model Time: 24.8098615617 megayear dt: 0.073961474814 megayear (2018-06-14 05:37:37)\n", - "Step:138 Model Time: 24.8853181181 megayear dt: 0.0754565564372 megayear (2018-06-14 05:37:39)\n", - "Step:139 Model Time: 24.9619967221 megayear dt: 0.076678603913 megayear (2018-06-14 05:37:41)\n", - "Step:140 Model Time: 25.0 megayear dt: 0.0380032779474 megayear (2018-06-14 05:37:45)\n", - "Step:141 Model Time: 25.0 megayear dt: 4.07081775696e-15 megayear (2018-06-14 05:37:47)\n" + "Running with UWGeodynamics version 2.10.5\n", + "Options: -Q22_pc_type gkgdiag -force_correction True -ksp_type bsscr -pc_type none -ksp_k2_type GMG -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: 5.5 megayear dt: 2.4 megayear (2021-02-19 10:51:29)\n", + "Step: 2 Model Time: 7.5 megayear dt: 1.9 megayear (2021-02-19 10:51:36)\n", + "Step: 3 Model Time: 9.4 megayear dt: 1.9 megayear (2021-02-19 10:51:42)\n", + "Step: 4 Model Time: 10.9 megayear dt: 1.5 megayear (2021-02-19 10:51:49)\n", + "Step: 5 Model Time: 12.2 megayear dt: 1.4 megayear (2021-02-19 10:51:56)\n", + "Step: 6 Model Time: 13.4 megayear dt: 1.1 megayear (2021-02-19 10:52:02)\n", + "Step: 7 Model Time: 14.3 megayear dt: 989812.1 year (2021-02-19 10:52:08)\n", + "Step: 8 Model Time: 15.2 megayear dt: 865755.9 year (2021-02-19 10:52:14)\n", + "Step: 9 Model Time: 15.9 megayear dt: 734331.4 year (2021-02-19 10:52:19)\n", + "Step: 10 Model Time: 16.5 megayear dt: 592829.0 year (2021-02-19 10:52:25)\n" ] }, { @@ -436,24 +310,24 @@ "1" ] }, - "execution_count": 15, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "Model.run_for(nstep=1)" + "Model.run_for(nstep=10)" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -465,7 +339,7 @@ ], "source": [ "Fig = vis.Figure(figsize=(800,600))\n", - "Fig.Points(Model.swarm, Model.viscosityField, fn_size=3.0)\n", + "Fig.Points(Model.swarm, Model.materialField, fn_size=3.0)\n", "Fig.show()" ] } @@ -486,7 +360,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/benchmarks/1_22_Indentor_Benchmark.ipynb b/docs/benchmarks/1_22_Indentor_Benchmark.ipynb index 6587bbf7..f11a12e1 100644 --- a/docs/benchmarks/1_22_Indentor_Benchmark.ipynb +++ b/docs/benchmarks/1_22_Indentor_Benchmark.ipynb @@ -110,7 +110,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -221,7 +221,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/benchmarks/2D_Self_Subduction_Case1.ipynb b/docs/benchmarks/2D_Self_Subduction_Case1.ipynb index 9185362f..fb2f67e5 100644 --- a/docs/benchmarks/2D_Self_Subduction_Case1.ipynb +++ b/docs/benchmarks/2D_Self_Subduction_Case1.ipynb @@ -132,9 +132,9 @@ "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)" + "Model.add_passive_tracers(name=\"tip1\", vertices=coords1)\n", + "Model.add_passive_tracers(name=\"tip2\", vertices=coords2)\n", + "Model.add_passive_tracers(name=\"tip3\", vertices=coords3)" ] }, { @@ -157,9 +157,9 @@ ], "source": [ "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(Model.tip1_tracers, pointSize=5.0)\n", + "Fig.Points(Model.tip2_tracers, pointSize=5.0)\n", + "Fig.Points(Model.tip3_tracers, pointSize=5.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=3.0)\n", "Fig.show()" ] @@ -273,7 +273,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -358,7 +358,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/benchmarks/2D_Self_Subduction_Case2.ipynb b/docs/benchmarks/2D_Self_Subduction_Case2.ipynb index 5c693152..21c9fd4f 100644 --- a/docs/benchmarks/2D_Self_Subduction_Case2.ipynb +++ b/docs/benchmarks/2D_Self_Subduction_Case2.ipynb @@ -153,7 +153,7 @@ "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)" + "Model.add_passive_tracers(name=\"tip\", vertices=coords)" ] }, { @@ -177,7 +177,7 @@ "source": [ "from UWGeodynamics import visualisation as vis\n", "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Points(tip_tracers, pointSize=5.0)\n", + "Fig.Points(Model.tip_tracers, pointSize=5.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=3.0)\n", "Fig.show()" ] @@ -289,7 +289,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -373,7 +373,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/benchmarks/Kaus_BrickBenchmark-Compression.ipynb b/docs/benchmarks/Kaus_BrickBenchmark-Compression.ipynb index 975f11ea..338246f1 100644 --- a/docs/benchmarks/Kaus_BrickBenchmark-Compression.ipynb +++ b/docs/benchmarks/Kaus_BrickBenchmark-Compression.ipynb @@ -235,7 +235,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -381,7 +381,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/benchmarks/Kaus_BrickBenchmark_Extension.ipynb b/docs/benchmarks/Kaus_BrickBenchmark_Extension.ipynb index c70f5962..686a501e 100644 --- a/docs/benchmarks/Kaus_BrickBenchmark_Extension.ipynb +++ b/docs/benchmarks/Kaus_BrickBenchmark_Extension.ipynb @@ -261,7 +261,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -406,7 +406,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/examples/1_01_Steady_State_Heat.ipynb b/docs/examples/1_01_Steady_State_Heat.ipynb index f083063a..2792e183 100644 --- a/docs/examples/1_01_Steady_State_Heat.ipynb +++ b/docs/examples/1_01_Steady_State_Heat.ipynb @@ -224,7 +224,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/examples/1_02_Convection_Example.ipynb b/docs/examples/1_02_Convection_Example.ipynb index 1761afa5..21592544 100644 --- a/docs/examples/1_02_Convection_Example.ipynb +++ b/docs/examples/1_02_Convection_Example.ipynb @@ -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 /home/romain/Projects/Project_Surface_processes/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -80,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -123,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -156,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -172,7 +172,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -188,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -211,13 +211,13 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -236,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -246,24 +246,34 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Projects/Project_Surface_processes/UWGeodynamics/UWGeodynamics/_model.py:1524: UserWarning: You have not passed anything to the temperature argument. The temperature field will not be initialised\n", + " warnings.warn(\"You have not passed anything to the temperature argument. The temperature field will not be initialised\")\n" + ] + } + ], "source": [ - "Model.init_model(temperature=False)" + "Model.init_model(pressure=\"lithostatic\")" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Running with UWGeodynamics version 0.9.8b-dev-29e4c3b(development)\n", - "Step:1 Model Time: 20000.0 year dt: 20000.0 year (2018-11-27 02:13:56)\n" + "Running with UWGeodynamics version 2.10.5\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: 20000.0 year dt: 20000.0 year (2021-02-19 10:38:23)\n" ] }, { @@ -272,7 +282,7 @@ "1" ] }, - "execution_count": 13, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -283,13 +293,13 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -309,13 +319,13 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -350,7 +360,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/examples/1_03_BlankenbachBenchmark.ipynb b/docs/examples/1_03_BlankenbachBenchmark.ipynb index a8b356b2..12749379 100644 --- a/docs/examples/1_03_BlankenbachBenchmark.ipynb +++ b/docs/examples/1_03_BlankenbachBenchmark.ipynb @@ -461,7 +461,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model(temperature=False)" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -602,7 +602,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/examples/1_05_StokesSinker.ipynb b/docs/examples/1_05_StokesSinker.ipynb index b2e0e61f..fe33d0a0 100644 --- a/docs/examples/1_05_StokesSinker.ipynb +++ b/docs/examples/1_05_StokesSinker.ipynb @@ -307,7 +307,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -518,7 +518,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/examples/1_06_HypnicJerk.ipynb b/docs/examples/1_06_HypnicJerk.ipynb index 2705c733..b3a49e63 100644 --- a/docs/examples/1_06_HypnicJerk.ipynb +++ b/docs/examples/1_06_HypnicJerk.ipynb @@ -156,7 +156,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -324,7 +324,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/examples/1_07_SlabSubduction.ipynb b/docs/examples/1_07_SlabSubduction.ipynb index 90347c64..f1d969df 100644 --- a/docs/examples/1_07_SlabSubduction.ipynb +++ b/docs/examples/1_07_SlabSubduction.ipynb @@ -242,7 +242,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/examples/1_08_ViscoElasticHalfSpace.ipynb b/docs/examples/1_08_ViscoElasticHalfSpace.ipynb index c4fd07dd..1e500557 100644 --- a/docs/examples/1_08_ViscoElasticHalfSpace.ipynb +++ b/docs/examples/1_08_ViscoElasticHalfSpace.ipynb @@ -23,7 +23,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/romain/Projects/Project_Surface_processes/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -289,7 +289,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 17, @@ -318,8 +318,7 @@ "coords = np.ndarray((1, 2))\n", "coords[:, 1] = GEO.nd(w_m)\n", "coords\n", - "tracerSolo = Model.add_passive_tracers(name=\"Single Tracer\", \n", - " vertices=coords)" + "Model.add_passive_tracers(name=\"Single\", vertices=coords)" ] }, { @@ -337,7 +336,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -354,7 +353,7 @@ "\n", "figMaterial = vis.Figure(figsize=(1600,400))\n", "figMaterial.Mesh(Model.mesh,opacity=0.5)\n", - "figMaterial.Points(tracerSolo, pointSize=10, colourBar=False)\n", + "figMaterial.Points(Model.Single_tracers, pointSize=10, colourBar=False)\n", "figMaterial.Points(Model.swarm, Model.materialField, fn_mask=materialFilter, \n", " pointSize=2, colourBar=False, valueRange=[0,1])\n", "figMaterial.save(\"Figure_1.png\")\n", @@ -377,12 +376,12 @@ "outputs": [], "source": [ "tTracer = [GEO.nd(Model.time)]\n", - "displacement = [GEO.nd(tracerSolo.particleCoordinates.data[0][1])]\n", + "displacement = [GEO.nd(Model.Single_tracers.particleCoordinates.data[0][1])]\n", "\n", "def postSolveHook():\n", " global tTracer, displacement\n", " tTracer.append(GEO.nd(Model.time))\n", - " displacement.append(GEO.nd(tracerSolo.particleCoordinates.data[0][1]))" + " displacement.append(GEO.nd(Model.Single_tracers.particleCoordinates.data[0][1]))" ] }, { @@ -405,533 +404,532 @@ "name": "stdout", "output_type": "stream", "text": [ - "Running with UWGeodynamics version 2.9.5\n", + "Running with UWGeodynamics version 2.10.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" + "Step: 1 Model Time: 1230.1 year dt: 1230.1 year (2021-02-19 10:58:25)\n", + "Step: 2 Model Time: 2460.1 year dt: 1230.1 year (2021-02-19 10:58:26)\n", + "Step: 3 Model Time: 3690.2 year dt: 1230.1 year (2021-02-19 10:58:27)\n", + "Step: 4 Model Time: 4920.2 year dt: 1230.1 year (2021-02-19 10:58:28)\n", + "Step: 5 Model Time: 6150.3 year dt: 1230.1 year (2021-02-19 10:58:29)\n", + "Step: 6 Model Time: 7380.3 year dt: 1230.1 year (2021-02-19 10:58:30)\n", + "Step: 7 Model Time: 8610.4 year dt: 1230.1 year (2021-02-19 10:58:31)\n", + "Step: 8 Model Time: 9840.4 year dt: 1230.1 year (2021-02-19 10:58:32)\n", + "Step: 9 Model Time: 11070.5 year dt: 1230.1 year (2021-02-19 10:58:33)\n", + "Step: 10 Model Time: 12300.5 year dt: 1230.1 year (2021-02-19 10:58:34)\n", + "Step: 11 Model Time: 13530.6 year dt: 1230.1 year (2021-02-19 10:58:35)\n", + "Step: 12 Model Time: 14760.6 year dt: 1230.1 year (2021-02-19 10:58:35)\n", + "Step: 13 Model Time: 15990.7 year dt: 1230.1 year (2021-02-19 10:58:36)\n", + "Step: 14 Model Time: 17220.7 year dt: 1230.1 year (2021-02-19 10:58:37)\n", + "Step: 15 Model Time: 18450.8 year dt: 1230.1 year (2021-02-19 10:58:38)\n", + "Step: 16 Model Time: 19680.8 year dt: 1230.1 year (2021-02-19 10:58:39)\n", + "Step: 17 Model Time: 20910.9 year dt: 1230.1 year (2021-02-19 10:58:40)\n", + "Step: 18 Model Time: 22140.9 year dt: 1230.1 year (2021-02-19 10:58:41)\n", + "Step: 19 Model Time: 23371.0 year dt: 1230.1 year (2021-02-19 10:58:42)\n", + "Step: 20 Model Time: 24601.0 year dt: 1230.1 year (2021-02-19 10:58:44)\n", + "Step: 21 Model Time: 25831.1 year dt: 1230.1 year (2021-02-19 10:58:44)\n", + "Step: 22 Model Time: 27061.1 year dt: 1230.1 year (2021-02-19 10:58:45)\n", + "Step: 23 Model Time: 28291.2 year dt: 1230.1 year (2021-02-19 10:58:46)\n", + "Step: 24 Model Time: 29521.2 year dt: 1230.1 year (2021-02-19 10:58:47)\n", + "Step: 25 Model Time: 30751.3 year dt: 1230.1 year (2021-02-19 10:58:48)\n", + "Step: 26 Model Time: 31981.3 year dt: 1230.1 year (2021-02-19 10:58:49)\n", + "Step: 27 Model Time: 33211.4 year dt: 1230.1 year (2021-02-19 10:58:50)\n", + "Step: 28 Model Time: 34441.4 year dt: 1230.1 year (2021-02-19 10:58:51)\n", + "Step: 29 Model Time: 35671.5 year dt: 1230.1 year (2021-02-19 10:58:52)\n", + "Step: 30 Model Time: 36901.5 year dt: 1230.1 year (2021-02-19 10:58:53)\n", + "Step: 31 Model Time: 38131.6 year dt: 1230.1 year (2021-02-19 10:58:54)\n", + "Step: 32 Model Time: 39361.6 year dt: 1230.1 year (2021-02-19 10:58:55)\n", + "Step: 33 Model Time: 40591.7 year dt: 1230.1 year (2021-02-19 10:58:56)\n", + "Step: 34 Model Time: 41821.7 year dt: 1230.1 year (2021-02-19 10:58:57)\n", + "Step: 35 Model Time: 43051.8 year dt: 1230.1 year (2021-02-19 10:58:58)\n", + "Step: 36 Model Time: 44281.8 year dt: 1230.1 year (2021-02-19 10:58:59)\n", + "Step: 37 Model Time: 45511.9 year dt: 1230.1 year (2021-02-19 10:59:00)\n", + "Step: 38 Model Time: 46741.9 year dt: 1230.1 year (2021-02-19 10:59:01)\n", + "Step: 39 Model Time: 47972.0 year dt: 1230.1 year (2021-02-19 10:59:02)\n", + "Step: 40 Model Time: 49202.0 year dt: 1230.1 year (2021-02-19 10:59:03)\n", + "Step: 41 Model Time: 50432.1 year dt: 1230.1 year (2021-02-19 10:59:04)\n", + "Step: 42 Model Time: 51662.1 year dt: 1230.1 year (2021-02-19 10:59:05)\n", + "Step: 43 Model Time: 52892.2 year dt: 1230.1 year (2021-02-19 10:59:06)\n", + "Step: 44 Model Time: 54122.2 year dt: 1230.1 year (2021-02-19 10:59:07)\n", + "Step: 45 Model Time: 55352.3 year dt: 1230.1 year (2021-02-19 10:59:07)\n", + "Step: 46 Model Time: 56582.3 year dt: 1230.1 year (2021-02-19 10:59:08)\n", + "Step: 47 Model Time: 57812.4 year dt: 1230.1 year (2021-02-19 10:59:09)\n", + "Step: 48 Model Time: 59042.4 year dt: 1230.1 year (2021-02-19 10:59:10)\n", + "Step: 49 Model Time: 60272.5 year dt: 1230.1 year (2021-02-19 10:59:11)\n", + "Step: 50 Model Time: 61502.5 year dt: 1230.1 year (2021-02-19 10:59:12)\n", + "Step: 51 Model Time: 62732.6 year dt: 1230.1 year (2021-02-19 10:59:13)\n", + "Step: 52 Model Time: 63962.6 year dt: 1230.1 year (2021-02-19 10:59:14)\n", + "Step: 53 Model Time: 65192.7 year dt: 1230.1 year (2021-02-19 10:59:15)\n", + "Step: 54 Model Time: 66422.7 year dt: 1230.1 year (2021-02-19 10:59:16)\n", + "Step: 55 Model Time: 67652.8 year dt: 1230.1 year (2021-02-19 10:59:17)\n", + "Step: 56 Model Time: 68882.8 year dt: 1230.1 year (2021-02-19 10:59:18)\n", + "Step: 57 Model Time: 70112.9 year dt: 1230.1 year (2021-02-19 10:59:19)\n", + "Step: 58 Model Time: 71342.9 year dt: 1230.1 year (2021-02-19 10:59:20)\n", + "Step: 59 Model Time: 72573.0 year dt: 1230.1 year (2021-02-19 10:59:21)\n", + "Step: 60 Model Time: 73803.0 year dt: 1230.1 year (2021-02-19 10:59:22)\n", + "Step: 61 Model Time: 75033.1 year dt: 1230.1 year (2021-02-19 10:59:23)\n", + "Step: 62 Model Time: 76263.1 year dt: 1230.1 year (2021-02-19 10:59:24)\n", + "Step: 63 Model Time: 77493.2 year dt: 1230.1 year (2021-02-19 10:59:25)\n", + "Step: 64 Model Time: 78723.2 year dt: 1230.1 year (2021-02-19 10:59:26)\n", + "Step: 65 Model Time: 79953.3 year dt: 1230.1 year (2021-02-19 10:59:27)\n", + "Step: 66 Model Time: 81183.3 year dt: 1230.1 year (2021-02-19 10:59:28)\n", + "Step: 67 Model Time: 82413.4 year dt: 1230.1 year (2021-02-19 10:59:29)\n", + "Step: 68 Model Time: 83643.4 year dt: 1230.1 year (2021-02-19 10:59:30)\n", + "Step: 69 Model Time: 84873.5 year dt: 1230.1 year (2021-02-19 10:59:31)\n", + "Step: 70 Model Time: 86103.5 year dt: 1230.1 year (2021-02-19 10:59:32)\n", + "Step: 71 Model Time: 87333.6 year dt: 1230.1 year (2021-02-19 10:59:33)\n", + "Step: 72 Model Time: 88563.6 year dt: 1230.1 year (2021-02-19 10:59:33)\n", + "Step: 73 Model Time: 89793.7 year dt: 1230.1 year (2021-02-19 10:59:34)\n", + "Step: 74 Model Time: 91023.7 year dt: 1230.1 year (2021-02-19 10:59:35)\n", + "Step: 75 Model Time: 92253.8 year dt: 1230.1 year (2021-02-19 10:59:36)\n", + "Step: 76 Model Time: 93483.8 year dt: 1230.1 year (2021-02-19 10:59:37)\n", + "Step: 77 Model Time: 94713.9 year dt: 1230.1 year (2021-02-19 10:59:38)\n", + "Step: 78 Model Time: 95943.9 year dt: 1230.1 year (2021-02-19 10:59:39)\n", + "Step: 79 Model Time: 97174.0 year dt: 1230.1 year (2021-02-19 10:59:40)\n", + "Step: 80 Model Time: 98404.0 year dt: 1230.1 year (2021-02-19 10:59:41)\n", + "Step: 81 Model Time: 99634.1 year dt: 1230.1 year (2021-02-19 10:59:42)\n", + "Step: 82 Model Time: 100864.1 year dt: 1230.1 year (2021-02-19 10:59:43)\n", + "Step: 83 Model Time: 102094.2 year dt: 1230.1 year (2021-02-19 10:59:44)\n", + "Step: 84 Model Time: 103324.2 year dt: 1230.1 year (2021-02-19 10:59:44)\n", + "Step: 85 Model Time: 104554.3 year dt: 1230.1 year (2021-02-19 10:59:45)\n", + "Step: 86 Model Time: 105784.3 year dt: 1230.1 year (2021-02-19 10:59:46)\n", + "Step: 87 Model Time: 107014.4 year dt: 1230.1 year (2021-02-19 10:59:47)\n", + "Step: 88 Model Time: 108244.4 year dt: 1230.1 year (2021-02-19 10:59:48)\n", + "Step: 89 Model Time: 109474.5 year dt: 1230.1 year (2021-02-19 10:59:49)\n", + "Step: 90 Model Time: 110704.5 year dt: 1230.1 year (2021-02-19 10:59:50)\n", + "Step: 91 Model Time: 111934.6 year dt: 1230.1 year (2021-02-19 10:59:51)\n", + "Step: 92 Model Time: 113164.6 year dt: 1230.1 year (2021-02-19 10:59:52)\n", + "Step: 93 Model Time: 114394.7 year dt: 1230.1 year (2021-02-19 10:59:53)\n", + "Step: 94 Model Time: 115624.7 year dt: 1230.1 year (2021-02-19 10:59:54)\n", + "Step: 95 Model Time: 116854.8 year dt: 1230.1 year (2021-02-19 10:59:55)\n", + "Step: 96 Model Time: 118084.9 year dt: 1230.1 year (2021-02-19 10:59:56)\n", + "Step: 97 Model Time: 119314.9 year dt: 1230.1 year (2021-02-19 10:59:57)\n", + "Step: 98 Model Time: 120545.0 year dt: 1230.1 year (2021-02-19 10:59:58)\n", + "Step: 99 Model Time: 121775.0 year dt: 1230.1 year (2021-02-19 10:59:59)\n", + "Step: 100 Model Time: 123005.1 year dt: 1230.1 year (2021-02-19 11:00:00)\n", + "Step: 101 Model Time: 124235.1 year dt: 1230.1 year (2021-02-19 11:00:01)\n", + "Step: 102 Model Time: 125465.2 year dt: 1230.1 year (2021-02-19 11:00:02)\n", + "Step: 103 Model Time: 126695.2 year dt: 1230.1 year (2021-02-19 11:00:03)\n", + "Step: 104 Model Time: 127925.3 year dt: 1230.1 year (2021-02-19 11:00:04)\n", + "Step: 105 Model Time: 129155.3 year dt: 1230.1 year (2021-02-19 11:00:05)\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" + "Step: 106 Model Time: 130385.4 year dt: 1230.1 year (2021-02-19 11:00:06)\n", + "Step: 107 Model Time: 131615.4 year dt: 1230.1 year (2021-02-19 11:00:07)\n", + "Step: 108 Model Time: 132845.5 year dt: 1230.1 year (2021-02-19 11:00:08)\n", + "Step: 109 Model Time: 134075.5 year dt: 1230.1 year (2021-02-19 11:00:09)\n", + "Step: 110 Model Time: 135305.6 year dt: 1230.1 year (2021-02-19 11:00:10)\n", + "Step: 111 Model Time: 136535.6 year dt: 1230.1 year (2021-02-19 11:00:11)\n", + "Step: 112 Model Time: 137765.7 year dt: 1230.1 year (2021-02-19 11:00:12)\n", + "Step: 113 Model Time: 138995.7 year dt: 1230.1 year (2021-02-19 11:00:13)\n", + "Step: 114 Model Time: 140225.8 year dt: 1230.1 year (2021-02-19 11:00:14)\n", + "Step: 115 Model Time: 141455.8 year dt: 1230.1 year (2021-02-19 11:00:15)\n", + "Step: 116 Model Time: 142685.9 year dt: 1230.1 year (2021-02-19 11:00:16)\n", + "Step: 117 Model Time: 143915.9 year dt: 1230.1 year (2021-02-19 11:00:17)\n", + "Step: 118 Model Time: 145146.0 year dt: 1230.1 year (2021-02-19 11:00:18)\n", + "Step: 119 Model Time: 146376.0 year dt: 1230.1 year (2021-02-19 11:00:19)\n", + "Step: 120 Model Time: 147606.1 year dt: 1230.1 year (2021-02-19 11:00:20)\n", + "Step: 121 Model Time: 148836.1 year dt: 1230.1 year (2021-02-19 11:00:21)\n", + "Step: 122 Model Time: 150066.2 year dt: 1230.1 year (2021-02-19 11:00:22)\n", + "Step: 123 Model Time: 151296.2 year dt: 1230.1 year (2021-02-19 11:00:22)\n", + "Step: 124 Model Time: 152526.3 year dt: 1230.1 year (2021-02-19 11:00:23)\n", + "Step: 125 Model Time: 153756.3 year dt: 1230.1 year (2021-02-19 11:00:24)\n", + "Step: 126 Model Time: 154986.4 year dt: 1230.1 year (2021-02-19 11:00:25)\n", + "Step: 127 Model Time: 156216.4 year dt: 1230.1 year (2021-02-19 11:00:26)\n", + "Step: 128 Model Time: 157446.5 year dt: 1230.1 year (2021-02-19 11:00:27)\n", + "Step: 129 Model Time: 158676.5 year dt: 1230.1 year (2021-02-19 11:00:28)\n", + "Step: 130 Model Time: 159906.6 year dt: 1230.1 year (2021-02-19 11:00:29)\n", + "Step: 131 Model Time: 161136.6 year dt: 1230.1 year (2021-02-19 11:00:30)\n", + "Step: 132 Model Time: 162366.7 year dt: 1230.1 year (2021-02-19 11:00:30)\n", + "Step: 133 Model Time: 163596.7 year dt: 1230.1 year (2021-02-19 11:00:31)\n", + "Step: 134 Model Time: 164826.8 year dt: 1230.1 year (2021-02-19 11:00:32)\n", + "Step: 135 Model Time: 166056.8 year dt: 1230.1 year (2021-02-19 11:00:33)\n", + "Step: 136 Model Time: 167286.9 year dt: 1230.1 year (2021-02-19 11:00:34)\n", + "Step: 137 Model Time: 168516.9 year dt: 1230.1 year (2021-02-19 11:00:35)\n", + "Step: 138 Model Time: 169747.0 year dt: 1230.1 year (2021-02-19 11:00:36)\n", + "Step: 139 Model Time: 170977.0 year dt: 1230.1 year (2021-02-19 11:00:37)\n", + "Step: 140 Model Time: 172207.1 year dt: 1230.1 year (2021-02-19 11:00:38)\n", + "Step: 141 Model Time: 173437.1 year dt: 1230.1 year (2021-02-19 11:00:39)\n", + "Step: 142 Model Time: 174667.2 year dt: 1230.1 year (2021-02-19 11:00:40)\n", + "Step: 143 Model Time: 175897.2 year dt: 1230.1 year (2021-02-19 11:00:41)\n", + "Step: 144 Model Time: 177127.3 year dt: 1230.1 year (2021-02-19 11:00:42)\n", + "Step: 145 Model Time: 178357.3 year dt: 1230.1 year (2021-02-19 11:00:43)\n", + "Step: 146 Model Time: 179587.4 year dt: 1230.1 year (2021-02-19 11:00:44)\n", + "Step: 147 Model Time: 180817.4 year dt: 1230.1 year (2021-02-19 11:00:45)\n", + "Step: 148 Model Time: 182047.5 year dt: 1230.1 year (2021-02-19 11:00:45)\n", + "Step: 149 Model Time: 183277.5 year dt: 1230.1 year (2021-02-19 11:00:46)\n", + "Step: 150 Model Time: 184507.6 year dt: 1230.1 year (2021-02-19 11:00:47)\n", + "Step: 151 Model Time: 185737.6 year dt: 1230.1 year (2021-02-19 11:00:48)\n", + "Step: 152 Model Time: 186967.7 year dt: 1230.1 year (2021-02-19 11:00:49)\n", + "Step: 153 Model Time: 188197.7 year dt: 1230.1 year (2021-02-19 11:00:50)\n", + "Step: 154 Model Time: 189427.8 year dt: 1230.1 year (2021-02-19 11:00:51)\n", + "Step: 155 Model Time: 190657.8 year dt: 1230.1 year (2021-02-19 11:00:52)\n", + "Step: 156 Model Time: 191887.9 year dt: 1230.1 year (2021-02-19 11:00:53)\n", + "Step: 157 Model Time: 193117.9 year dt: 1230.1 year (2021-02-19 11:00:53)\n", + "Step: 158 Model Time: 194348.0 year dt: 1230.1 year (2021-02-19 11:00:54)\n", + "Step: 159 Model Time: 195578.0 year dt: 1230.1 year (2021-02-19 11:00:55)\n", + "Step: 160 Model Time: 196808.1 year dt: 1230.1 year (2021-02-19 11:00:56)\n", + "Step: 161 Model Time: 198038.1 year dt: 1230.1 year (2021-02-19 11:00:57)\n", + "Step: 162 Model Time: 199268.2 year dt: 1230.1 year (2021-02-19 11:00:58)\n", + "Step: 163 Model Time: 200498.2 year dt: 1230.1 year (2021-02-19 11:00:59)\n", + "Step: 164 Model Time: 201728.3 year dt: 1230.1 year (2021-02-19 11:01:00)\n", + "Step: 165 Model Time: 202958.3 year dt: 1230.1 year (2021-02-19 11:01:00)\n", + "Step: 166 Model Time: 204188.4 year dt: 1230.1 year (2021-02-19 11:01:01)\n", + "Step: 167 Model Time: 205418.4 year dt: 1230.1 year (2021-02-19 11:01:02)\n", + "Step: 168 Model Time: 206648.5 year dt: 1230.1 year (2021-02-19 11:01:03)\n", + "Step: 169 Model Time: 207878.5 year dt: 1230.1 year (2021-02-19 11:01:04)\n", + "Step: 170 Model Time: 209108.6 year dt: 1230.1 year (2021-02-19 11:01:05)\n", + "Step: 171 Model Time: 210338.6 year dt: 1230.1 year (2021-02-19 11:01:06)\n", + "Step: 172 Model Time: 211568.7 year dt: 1230.1 year (2021-02-19 11:01:07)\n", + "Step: 173 Model Time: 212798.7 year dt: 1230.1 year (2021-02-19 11:01:08)\n", + "Step: 174 Model Time: 214028.8 year dt: 1230.1 year (2021-02-19 11:01:08)\n", + "Step: 175 Model Time: 215258.8 year dt: 1230.1 year (2021-02-19 11:01:09)\n", + "Step: 176 Model Time: 216488.9 year dt: 1230.1 year (2021-02-19 11:01:10)\n", + "Step: 177 Model Time: 217718.9 year dt: 1230.1 year (2021-02-19 11:01:11)\n", + "Step: 178 Model Time: 218949.0 year dt: 1230.1 year (2021-02-19 11:01:12)\n", + "Step: 179 Model Time: 220179.0 year dt: 1230.1 year (2021-02-19 11:01:13)\n", + "Step: 180 Model Time: 221409.1 year dt: 1230.1 year (2021-02-19 11:01:14)\n", + "Step: 181 Model Time: 222639.1 year dt: 1230.1 year (2021-02-19 11:01:15)\n", + "Step: 182 Model Time: 223869.2 year dt: 1230.1 year (2021-02-19 11:01:16)\n", + "Step: 183 Model Time: 225099.2 year dt: 1230.1 year (2021-02-19 11:01:17)\n", + "Step: 184 Model Time: 226329.3 year dt: 1230.1 year (2021-02-19 11:01:17)\n", + "Step: 185 Model Time: 227559.3 year dt: 1230.1 year (2021-02-19 11:01:18)\n", + "Step: 186 Model Time: 228789.4 year dt: 1230.1 year (2021-02-19 11:01:19)\n", + "Step: 187 Model Time: 230019.4 year dt: 1230.1 year (2021-02-19 11:01:20)\n", + "Step: 188 Model Time: 231249.5 year dt: 1230.1 year (2021-02-19 11:01:21)\n", + "Step: 189 Model Time: 232479.5 year dt: 1230.1 year (2021-02-19 11:01:22)\n", + "Step: 190 Model Time: 233709.6 year dt: 1230.1 year (2021-02-19 11:01:23)\n", + "Step: 191 Model Time: 234939.6 year dt: 1230.1 year (2021-02-19 11:01:23)\n", + "Step: 192 Model Time: 236169.7 year dt: 1230.1 year (2021-02-19 11:01:24)\n", + "Step: 193 Model Time: 237399.8 year dt: 1230.1 year (2021-02-19 11:01:25)\n", + "Step: 194 Model Time: 238629.8 year dt: 1230.1 year (2021-02-19 11:01:26)\n", + "Step: 195 Model Time: 239859.9 year dt: 1230.1 year (2021-02-19 11:01:27)\n", + "Step: 196 Model Time: 241089.9 year dt: 1230.1 year (2021-02-19 11:01:28)\n", + "Step: 197 Model Time: 242320.0 year dt: 1230.1 year (2021-02-19 11:01:29)\n", + "Step: 198 Model Time: 243550.0 year dt: 1230.1 year (2021-02-19 11:01:30)\n", + "Step: 199 Model Time: 244780.1 year dt: 1230.1 year (2021-02-19 11:01:31)\n", + "Step: 200 Model Time: 246010.1 year dt: 1230.1 year (2021-02-19 11:01:32)\n", + "Step: 201 Model Time: 247240.2 year dt: 1230.1 year (2021-02-19 11:01:33)\n", + "Step: 202 Model Time: 248470.2 year dt: 1230.1 year (2021-02-19 11:01:34)\n", + "Step: 203 Model Time: 249700.3 year dt: 1230.1 year (2021-02-19 11:01:35)\n", + "Step: 204 Model Time: 250930.3 year dt: 1230.1 year (2021-02-19 11:01:36)\n", + "Step: 205 Model Time: 252160.4 year dt: 1230.1 year (2021-02-19 11:01:37)\n", + "Step: 206 Model Time: 253390.4 year dt: 1230.1 year (2021-02-19 11:01:38)\n", + "Step: 207 Model Time: 254620.5 year dt: 1230.1 year (2021-02-19 11:01:39)\n", + "Step: 208 Model Time: 255850.5 year dt: 1230.1 year (2021-02-19 11:01:40)\n", + "Step: 209 Model Time: 257080.6 year dt: 1230.1 year (2021-02-19 11:01:40)\n", + "Step: 210 Model Time: 258310.6 year dt: 1230.1 year (2021-02-19 11:01:41)\n", + "Step: 211 Model Time: 259540.7 year dt: 1230.1 year (2021-02-19 11:01:42)\n", + "Step: 212 Model Time: 260770.7 year dt: 1230.1 year (2021-02-19 11:01:43)\n", + "Step: 213 Model Time: 262000.8 year dt: 1230.1 year (2021-02-19 11:01:44)\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" + "Step: 214 Model Time: 263230.8 year dt: 1230.1 year (2021-02-19 11:01:45)\n", + "Step: 215 Model Time: 264460.9 year dt: 1230.1 year (2021-02-19 11:01:46)\n", + "Step: 216 Model Time: 265690.9 year dt: 1230.1 year (2021-02-19 11:01:47)\n", + "Step: 217 Model Time: 266921.0 year dt: 1230.1 year (2021-02-19 11:01:48)\n", + "Step: 218 Model Time: 268151.0 year dt: 1230.1 year (2021-02-19 11:01:49)\n", + "Step: 219 Model Time: 269381.1 year dt: 1230.1 year (2021-02-19 11:01:49)\n", + "Step: 220 Model Time: 270611.1 year dt: 1230.1 year (2021-02-19 11:01:50)\n", + "Step: 221 Model Time: 271841.2 year dt: 1230.1 year (2021-02-19 11:01:51)\n", + "Step: 222 Model Time: 273071.2 year dt: 1230.1 year (2021-02-19 11:01:52)\n", + "Step: 223 Model Time: 274301.3 year dt: 1230.1 year (2021-02-19 11:01:53)\n", + "Step: 224 Model Time: 275531.3 year dt: 1230.1 year (2021-02-19 11:01:54)\n", + "Step: 225 Model Time: 276761.4 year dt: 1230.1 year (2021-02-19 11:01:55)\n", + "Step: 226 Model Time: 277991.4 year dt: 1230.1 year (2021-02-19 11:01:56)\n", + "Step: 227 Model Time: 279221.5 year dt: 1230.1 year (2021-02-19 11:01:57)\n", + "Step: 228 Model Time: 280451.5 year dt: 1230.1 year (2021-02-19 11:01:57)\n", + "Step: 229 Model Time: 281681.6 year dt: 1230.1 year (2021-02-19 11:01:58)\n", + "Step: 230 Model Time: 282911.6 year dt: 1230.1 year (2021-02-19 11:01:59)\n", + "Step: 231 Model Time: 284141.7 year dt: 1230.1 year (2021-02-19 11:02:00)\n", + "Step: 232 Model Time: 285371.7 year dt: 1230.1 year (2021-02-19 11:02:01)\n", + "Step: 233 Model Time: 286601.8 year dt: 1230.1 year (2021-02-19 11:02:02)\n", + "Step: 234 Model Time: 287831.8 year dt: 1230.1 year (2021-02-19 11:02:03)\n", + "Step: 235 Model Time: 289061.9 year dt: 1230.1 year (2021-02-19 11:02:04)\n", + "Step: 236 Model Time: 290291.9 year dt: 1230.1 year (2021-02-19 11:02:05)\n", + "Step: 237 Model Time: 291522.0 year dt: 1230.1 year (2021-02-19 11:02:06)\n", + "Step: 238 Model Time: 292752.0 year dt: 1230.1 year (2021-02-19 11:02:07)\n", + "Step: 239 Model Time: 293982.1 year dt: 1230.1 year (2021-02-19 11:02:08)\n", + "Step: 240 Model Time: 295212.1 year dt: 1230.1 year (2021-02-19 11:02:09)\n", + "Step: 241 Model Time: 296442.2 year dt: 1230.1 year (2021-02-19 11:02:09)\n", + "Step: 242 Model Time: 297672.2 year dt: 1230.1 year (2021-02-19 11:02:10)\n", + "Step: 243 Model Time: 298902.3 year dt: 1230.1 year (2021-02-19 11:02:11)\n", + "Step: 244 Model Time: 300132.3 year dt: 1230.1 year (2021-02-19 11:02:12)\n", + "Step: 245 Model Time: 301362.4 year dt: 1230.1 year (2021-02-19 11:02:13)\n", + "Step: 246 Model Time: 302592.4 year dt: 1230.1 year (2021-02-19 11:02:14)\n", + "Step: 247 Model Time: 303822.5 year dt: 1230.1 year (2021-02-19 11:02:15)\n", + "Step: 248 Model Time: 305052.5 year dt: 1230.1 year (2021-02-19 11:02:16)\n", + "Step: 249 Model Time: 306282.6 year dt: 1230.1 year (2021-02-19 11:02:17)\n", + "Step: 250 Model Time: 307512.6 year dt: 1230.1 year (2021-02-19 11:02:18)\n", + "Step: 251 Model Time: 308742.7 year dt: 1230.1 year (2021-02-19 11:02:18)\n", + "Step: 252 Model Time: 309972.7 year dt: 1230.1 year (2021-02-19 11:02:19)\n", + "Step: 253 Model Time: 311202.8 year dt: 1230.1 year (2021-02-19 11:02:20)\n", + "Step: 254 Model Time: 312432.8 year dt: 1230.1 year (2021-02-19 11:02:21)\n", + "Step: 255 Model Time: 313662.9 year dt: 1230.1 year (2021-02-19 11:02:22)\n", + "Step: 256 Model Time: 314892.9 year dt: 1230.1 year (2021-02-19 11:02:23)\n", + "Step: 257 Model Time: 316123.0 year dt: 1230.1 year (2021-02-19 11:02:24)\n", + "Step: 258 Model Time: 317353.0 year dt: 1230.1 year (2021-02-19 11:02:25)\n", + "Step: 259 Model Time: 318583.1 year dt: 1230.1 year (2021-02-19 11:02:26)\n", + "Step: 260 Model Time: 319813.1 year dt: 1230.1 year (2021-02-19 11:02:27)\n", + "Step: 261 Model Time: 321043.2 year dt: 1230.1 year (2021-02-19 11:02:28)\n", + "Step: 262 Model Time: 322273.2 year dt: 1230.1 year (2021-02-19 11:02:28)\n", + "Step: 263 Model Time: 323503.3 year dt: 1230.1 year (2021-02-19 11:02:29)\n", + "Step: 264 Model Time: 324733.3 year dt: 1230.1 year (2021-02-19 11:02:30)\n", + "Step: 265 Model Time: 325963.4 year dt: 1230.1 year (2021-02-19 11:02:31)\n", + "Step: 266 Model Time: 327193.4 year dt: 1230.1 year (2021-02-19 11:02:32)\n", + "Step: 267 Model Time: 328423.5 year dt: 1230.1 year (2021-02-19 11:02:33)\n", + "Step: 268 Model Time: 329653.5 year dt: 1230.1 year (2021-02-19 11:02:34)\n", + "Step: 269 Model Time: 330883.6 year dt: 1230.1 year (2021-02-19 11:02:35)\n", + "Step: 270 Model Time: 332113.6 year dt: 1230.1 year (2021-02-19 11:02:35)\n", + "Step: 271 Model Time: 333343.7 year dt: 1230.1 year (2021-02-19 11:02:36)\n", + "Step: 272 Model Time: 334573.7 year dt: 1230.1 year (2021-02-19 11:02:37)\n", + "Step: 273 Model Time: 335803.8 year dt: 1230.1 year (2021-02-19 11:02:38)\n", + "Step: 274 Model Time: 337033.8 year dt: 1230.1 year (2021-02-19 11:02:39)\n", + "Step: 275 Model Time: 338263.9 year dt: 1230.1 year (2021-02-19 11:02:40)\n", + "Step: 276 Model Time: 339493.9 year dt: 1230.1 year (2021-02-19 11:02:41)\n", + "Step: 277 Model Time: 340724.0 year dt: 1230.1 year (2021-02-19 11:02:42)\n", + "Step: 278 Model Time: 341954.0 year dt: 1230.1 year (2021-02-19 11:02:43)\n", + "Step: 279 Model Time: 343184.1 year dt: 1230.1 year (2021-02-19 11:02:44)\n", + "Step: 280 Model Time: 344414.1 year dt: 1230.1 year (2021-02-19 11:02:45)\n", + "Step: 281 Model Time: 345644.2 year dt: 1230.1 year (2021-02-19 11:02:46)\n", + "Step: 282 Model Time: 346874.2 year dt: 1230.1 year (2021-02-19 11:02:47)\n", + "Step: 283 Model Time: 348104.3 year dt: 1230.1 year (2021-02-19 11:02:48)\n", + "Step: 284 Model Time: 349334.3 year dt: 1230.1 year (2021-02-19 11:02:49)\n", + "Step: 285 Model Time: 350564.4 year dt: 1230.1 year (2021-02-19 11:02:50)\n", + "Step: 286 Model Time: 351794.4 year dt: 1230.1 year (2021-02-19 11:02:51)\n", + "Step: 287 Model Time: 353024.5 year dt: 1230.1 year (2021-02-19 11:02:52)\n", + "Step: 288 Model Time: 354254.6 year dt: 1230.1 year (2021-02-19 11:02:53)\n", + "Step: 289 Model Time: 355484.6 year dt: 1230.1 year (2021-02-19 11:02:54)\n", + "Step: 290 Model Time: 356714.7 year dt: 1230.1 year (2021-02-19 11:02:55)\n", + "Step: 291 Model Time: 357944.7 year dt: 1230.1 year (2021-02-19 11:02:55)\n", + "Step: 292 Model Time: 359174.8 year dt: 1230.1 year (2021-02-19 11:02:56)\n", + "Step: 293 Model Time: 360404.8 year dt: 1230.1 year (2021-02-19 11:02:57)\n", + "Step: 294 Model Time: 361634.9 year dt: 1230.1 year (2021-02-19 11:02:58)\n", + "Step: 295 Model Time: 362864.9 year dt: 1230.1 year (2021-02-19 11:02:59)\n", + "Step: 296 Model Time: 364095.0 year dt: 1230.1 year (2021-02-19 11:03:00)\n", + "Step: 297 Model Time: 365325.0 year dt: 1230.1 year (2021-02-19 11:03:01)\n", + "Step: 298 Model Time: 366555.1 year dt: 1230.1 year (2021-02-19 11:03:02)\n", + "Step: 299 Model Time: 367785.1 year dt: 1230.1 year (2021-02-19 11:03:02)\n", + "Step: 300 Model Time: 369015.2 year dt: 1230.1 year (2021-02-19 11:03:03)\n", + "Step: 301 Model Time: 370245.2 year dt: 1230.1 year (2021-02-19 11:03:04)\n", + "Step: 302 Model Time: 371475.3 year dt: 1230.1 year (2021-02-19 11:03:05)\n", + "Step: 303 Model Time: 372705.3 year dt: 1230.1 year (2021-02-19 11:03:06)\n", + "Step: 304 Model Time: 373935.4 year dt: 1230.1 year (2021-02-19 11:03:07)\n", + "Step: 305 Model Time: 375165.4 year dt: 1230.1 year (2021-02-19 11:03:08)\n", + "Step: 306 Model Time: 376395.5 year dt: 1230.1 year (2021-02-19 11:03:08)\n", + "Step: 307 Model Time: 377625.5 year dt: 1230.1 year (2021-02-19 11:03:09)\n", + "Step: 308 Model Time: 378855.6 year dt: 1230.1 year (2021-02-19 11:03:10)\n", + "Step: 309 Model Time: 380085.6 year dt: 1230.1 year (2021-02-19 11:03:11)\n", + "Step: 310 Model Time: 381315.7 year dt: 1230.1 year (2021-02-19 11:03:12)\n", + "Step: 311 Model Time: 382545.7 year dt: 1230.1 year (2021-02-19 11:03:13)\n", + "Step: 312 Model Time: 383775.8 year dt: 1230.1 year (2021-02-19 11:03:14)\n", + "Step: 313 Model Time: 385005.8 year dt: 1230.1 year (2021-02-19 11:03:14)\n", + "Step: 314 Model Time: 386235.9 year dt: 1230.1 year (2021-02-19 11:03:15)\n", + "Step: 315 Model Time: 387465.9 year dt: 1230.1 year (2021-02-19 11:03:16)\n", + "Step: 316 Model Time: 388696.0 year dt: 1230.1 year (2021-02-19 11:03:17)\n", + "Step: 317 Model Time: 389926.0 year dt: 1230.1 year (2021-02-19 11:03:18)\n", + "Step: 318 Model Time: 391156.1 year dt: 1230.1 year (2021-02-19 11:03:19)\n", + "Step: 319 Model Time: 392386.1 year dt: 1230.1 year (2021-02-19 11:03:20)\n", + "Step: 320 Model Time: 393616.2 year dt: 1230.1 year (2021-02-19 11:03:20)\n", + "Step: 321 Model Time: 394846.2 year dt: 1230.1 year (2021-02-19 11:03:21)\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" + "Step: 322 Model Time: 396076.3 year dt: 1230.1 year (2021-02-19 11:03:22)\n", + "Step: 323 Model Time: 397306.3 year dt: 1230.1 year (2021-02-19 11:03:23)\n", + "Step: 324 Model Time: 398536.4 year dt: 1230.1 year (2021-02-19 11:03:24)\n", + "Step: 325 Model Time: 399766.4 year dt: 1230.1 year (2021-02-19 11:03:25)\n", + "Step: 326 Model Time: 400996.5 year dt: 1230.1 year (2021-02-19 11:03:26)\n", + "Step: 327 Model Time: 402226.5 year dt: 1230.1 year (2021-02-19 11:03:27)\n", + "Step: 328 Model Time: 403456.6 year dt: 1230.1 year (2021-02-19 11:03:28)\n", + "Step: 329 Model Time: 404686.6 year dt: 1230.1 year (2021-02-19 11:03:28)\n", + "Step: 330 Model Time: 405916.7 year dt: 1230.1 year (2021-02-19 11:03:29)\n", + "Step: 331 Model Time: 407146.7 year dt: 1230.1 year (2021-02-19 11:03:30)\n", + "Step: 332 Model Time: 408376.8 year dt: 1230.1 year (2021-02-19 11:03:31)\n", + "Step: 333 Model Time: 409606.8 year dt: 1230.1 year (2021-02-19 11:03:32)\n", + "Step: 334 Model Time: 410836.9 year dt: 1230.1 year (2021-02-19 11:03:33)\n", + "Step: 335 Model Time: 412066.9 year dt: 1230.1 year (2021-02-19 11:03:34)\n", + "Step: 336 Model Time: 413297.0 year dt: 1230.1 year (2021-02-19 11:03:35)\n", + "Step: 337 Model Time: 414527.0 year dt: 1230.1 year (2021-02-19 11:03:35)\n", + "Step: 338 Model Time: 415757.1 year dt: 1230.1 year (2021-02-19 11:03:36)\n", + "Step: 339 Model Time: 416987.1 year dt: 1230.1 year (2021-02-19 11:03:37)\n", + "Step: 340 Model Time: 418217.2 year dt: 1230.1 year (2021-02-19 11:03:38)\n", + "Step: 341 Model Time: 419447.2 year dt: 1230.1 year (2021-02-19 11:03:39)\n", + "Step: 342 Model Time: 420677.3 year dt: 1230.1 year (2021-02-19 11:03:40)\n", + "Step: 343 Model Time: 421907.3 year dt: 1230.1 year (2021-02-19 11:03:41)\n", + "Step: 344 Model Time: 423137.4 year dt: 1230.1 year (2021-02-19 11:03:41)\n", + "Step: 345 Model Time: 424367.4 year dt: 1230.1 year (2021-02-19 11:03:42)\n", + "Step: 346 Model Time: 425597.5 year dt: 1230.1 year (2021-02-19 11:03:43)\n", + "Step: 347 Model Time: 426827.5 year dt: 1230.1 year (2021-02-19 11:03:44)\n", + "Step: 348 Model Time: 428057.6 year dt: 1230.1 year (2021-02-19 11:03:45)\n", + "Step: 349 Model Time: 429287.6 year dt: 1230.1 year (2021-02-19 11:03:46)\n", + "Step: 350 Model Time: 430517.7 year dt: 1230.1 year (2021-02-19 11:03:47)\n", + "Step: 351 Model Time: 431747.7 year dt: 1230.1 year (2021-02-19 11:03:48)\n", + "Step: 352 Model Time: 432977.8 year dt: 1230.1 year (2021-02-19 11:03:49)\n", + "Step: 353 Model Time: 434207.8 year dt: 1230.1 year (2021-02-19 11:03:49)\n", + "Step: 354 Model Time: 435437.9 year dt: 1230.1 year (2021-02-19 11:03:50)\n", + "Step: 355 Model Time: 436667.9 year dt: 1230.1 year (2021-02-19 11:03:51)\n", + "Step: 356 Model Time: 437898.0 year dt: 1230.1 year (2021-02-19 11:03:52)\n", + "Step: 357 Model Time: 439128.0 year dt: 1230.1 year (2021-02-19 11:03:53)\n", + "Step: 358 Model Time: 440358.1 year dt: 1230.1 year (2021-02-19 11:03:54)\n", + "Step: 359 Model Time: 441588.1 year dt: 1230.1 year (2021-02-19 11:03:55)\n", + "Step: 360 Model Time: 442818.2 year dt: 1230.1 year (2021-02-19 11:03:55)\n", + "Step: 361 Model Time: 444048.2 year dt: 1230.1 year (2021-02-19 11:03:56)\n", + "Step: 362 Model Time: 445278.3 year dt: 1230.1 year (2021-02-19 11:03:57)\n", + "Step: 363 Model Time: 446508.3 year dt: 1230.1 year (2021-02-19 11:03:58)\n", + "Step: 364 Model Time: 447738.4 year dt: 1230.1 year (2021-02-19 11:03:59)\n", + "Step: 365 Model Time: 448968.4 year dt: 1230.1 year (2021-02-19 11:04:00)\n", + "Step: 366 Model Time: 450198.5 year dt: 1230.1 year (2021-02-19 11:04:01)\n", + "Step: 367 Model Time: 451428.5 year dt: 1230.1 year (2021-02-19 11:04:01)\n", + "Step: 368 Model Time: 452658.6 year dt: 1230.1 year (2021-02-19 11:04:02)\n", + "Step: 369 Model Time: 453888.6 year dt: 1230.1 year (2021-02-19 11:04:03)\n", + "Step: 370 Model Time: 455118.7 year dt: 1230.1 year (2021-02-19 11:04:04)\n", + "Step: 371 Model Time: 456348.7 year dt: 1230.1 year (2021-02-19 11:04:05)\n", + "Step: 372 Model Time: 457578.8 year dt: 1230.1 year (2021-02-19 11:04:06)\n", + "Step: 373 Model Time: 458808.8 year dt: 1230.1 year (2021-02-19 11:04:07)\n", + "Step: 374 Model Time: 460038.9 year dt: 1230.1 year (2021-02-19 11:04:08)\n", + "Step: 375 Model Time: 461268.9 year dt: 1230.1 year (2021-02-19 11:04:08)\n", + "Step: 376 Model Time: 462499.0 year dt: 1230.1 year (2021-02-19 11:04:09)\n", + "Step: 377 Model Time: 463729.0 year dt: 1230.1 year (2021-02-19 11:04:10)\n", + "Step: 378 Model Time: 464959.1 year dt: 1230.1 year (2021-02-19 11:04:11)\n", + "Step: 379 Model Time: 466189.1 year dt: 1230.1 year (2021-02-19 11:04:12)\n", + "Step: 380 Model Time: 467419.2 year dt: 1230.1 year (2021-02-19 11:04:13)\n", + "Step: 381 Model Time: 468649.2 year dt: 1230.1 year (2021-02-19 11:04:14)\n", + "Step: 382 Model Time: 469879.3 year dt: 1230.1 year (2021-02-19 11:04:14)\n", + "Step: 383 Model Time: 471109.3 year dt: 1230.1 year (2021-02-19 11:04:15)\n", + "Step: 384 Model Time: 472339.4 year dt: 1230.1 year (2021-02-19 11:04:16)\n", + "Step: 385 Model Time: 473569.5 year dt: 1230.1 year (2021-02-19 11:04:17)\n", + "Step: 386 Model Time: 474799.5 year dt: 1230.1 year (2021-02-19 11:04:18)\n", + "Step: 387 Model Time: 476029.6 year dt: 1230.1 year (2021-02-19 11:04:19)\n", + "Step: 388 Model Time: 477259.6 year dt: 1230.1 year (2021-02-19 11:04:19)\n", + "Step: 389 Model Time: 478489.7 year dt: 1230.1 year (2021-02-19 11:04:20)\n", + "Step: 390 Model Time: 479719.7 year dt: 1230.1 year (2021-02-19 11:04:21)\n", + "Step: 391 Model Time: 480949.8 year dt: 1230.1 year (2021-02-19 11:04:22)\n", + "Step: 392 Model Time: 482179.8 year dt: 1230.1 year (2021-02-19 11:04:23)\n", + "Step: 393 Model Time: 483409.9 year dt: 1230.1 year (2021-02-19 11:04:24)\n", + "Step: 394 Model Time: 484639.9 year dt: 1230.1 year (2021-02-19 11:04:25)\n", + "Step: 395 Model Time: 485870.0 year dt: 1230.1 year (2021-02-19 11:04:26)\n", + "Step: 396 Model Time: 487100.0 year dt: 1230.1 year (2021-02-19 11:04:26)\n", + "Step: 397 Model Time: 488330.1 year dt: 1230.1 year (2021-02-19 11:04:27)\n", + "Step: 398 Model Time: 489560.1 year dt: 1230.1 year (2021-02-19 11:04:28)\n", + "Step: 399 Model Time: 490790.2 year dt: 1230.1 year (2021-02-19 11:04:29)\n", + "Step: 400 Model Time: 492020.2 year dt: 1230.1 year (2021-02-19 11:04:30)\n", + "Step: 401 Model Time: 493250.3 year dt: 1230.1 year (2021-02-19 11:04:31)\n", + "Step: 402 Model Time: 494480.3 year dt: 1230.1 year (2021-02-19 11:04:32)\n", + "Step: 403 Model Time: 495710.4 year dt: 1230.1 year (2021-02-19 11:04:33)\n", + "Step: 404 Model Time: 496940.4 year dt: 1230.1 year (2021-02-19 11:04:33)\n", + "Step: 405 Model Time: 498170.5 year dt: 1230.1 year (2021-02-19 11:04:34)\n", + "Step: 406 Model Time: 499400.5 year dt: 1230.1 year (2021-02-19 11:04:35)\n", + "Step: 407 Model Time: 500630.6 year dt: 1230.1 year (2021-02-19 11:04:36)\n", + "Step: 408 Model Time: 501860.6 year dt: 1230.1 year (2021-02-19 11:04:37)\n", + "Step: 409 Model Time: 503090.7 year dt: 1230.1 year (2021-02-19 11:04:38)\n", + "Step: 410 Model Time: 504320.7 year dt: 1230.1 year (2021-02-19 11:04:39)\n", + "Step: 411 Model Time: 505550.8 year dt: 1230.1 year (2021-02-19 11:04:40)\n", + "Step: 412 Model Time: 506780.8 year dt: 1230.1 year (2021-02-19 11:04:41)\n", + "Step: 413 Model Time: 508010.9 year dt: 1230.1 year (2021-02-19 11:04:41)\n", + "Step: 414 Model Time: 509240.9 year dt: 1230.1 year (2021-02-19 11:04:42)\n", + "Step: 415 Model Time: 510471.0 year dt: 1230.1 year (2021-02-19 11:04:43)\n", + "Step: 416 Model Time: 511701.0 year dt: 1230.1 year (2021-02-19 11:04:44)\n", + "Step: 417 Model Time: 512931.1 year dt: 1230.1 year (2021-02-19 11:04:45)\n", + "Step: 418 Model Time: 514161.1 year dt: 1230.1 year (2021-02-19 11:04:46)\n", + "Step: 419 Model Time: 515391.2 year dt: 1230.1 year (2021-02-19 11:04:47)\n", + "Step: 420 Model Time: 516621.2 year dt: 1230.1 year (2021-02-19 11:04:48)\n", + "Step: 421 Model Time: 517851.3 year dt: 1230.1 year (2021-02-19 11:04:48)\n", + "Step: 422 Model Time: 519081.3 year dt: 1230.1 year (2021-02-19 11:04:49)\n", + "Step: 423 Model Time: 520311.4 year dt: 1230.1 year (2021-02-19 11:04:50)\n", + "Step: 424 Model Time: 521541.4 year dt: 1230.1 year (2021-02-19 11:04:51)\n", + "Step: 425 Model Time: 522771.5 year dt: 1230.1 year (2021-02-19 11:04:52)\n", + "Step: 426 Model Time: 524001.5 year dt: 1230.1 year (2021-02-19 11:04:53)\n", + "Step: 427 Model Time: 525231.6 year dt: 1230.1 year (2021-02-19 11:04:54)\n", + "Step: 428 Model Time: 526461.6 year dt: 1230.1 year (2021-02-19 11:04:55)\n", + "Step: 429 Model Time: 527691.7 year dt: 1230.1 year (2021-02-19 11:04:55)\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" + "Step: 430 Model Time: 528921.7 year dt: 1230.1 year (2021-02-19 11:04:56)\n", + "Step: 431 Model Time: 530151.8 year dt: 1230.1 year (2021-02-19 11:04:57)\n", + "Step: 432 Model Time: 531381.8 year dt: 1230.1 year (2021-02-19 11:04:58)\n", + "Step: 433 Model Time: 532611.9 year dt: 1230.1 year (2021-02-19 11:04:59)\n", + "Step: 434 Model Time: 533841.9 year dt: 1230.1 year (2021-02-19 11:05:00)\n", + "Step: 435 Model Time: 535072.0 year dt: 1230.1 year (2021-02-19 11:05:01)\n", + "Step: 436 Model Time: 536302.0 year dt: 1230.1 year (2021-02-19 11:05:02)\n", + "Step: 437 Model Time: 537532.1 year dt: 1230.1 year (2021-02-19 11:05:02)\n", + "Step: 438 Model Time: 538762.1 year dt: 1230.1 year (2021-02-19 11:05:03)\n", + "Step: 439 Model Time: 539992.2 year dt: 1230.1 year (2021-02-19 11:05:04)\n", + "Step: 440 Model Time: 541222.2 year dt: 1230.1 year (2021-02-19 11:05:05)\n", + "Step: 441 Model Time: 542452.3 year dt: 1230.1 year (2021-02-19 11:05:06)\n", + "Step: 442 Model Time: 543682.3 year dt: 1230.1 year (2021-02-19 11:05:07)\n", + "Step: 443 Model Time: 544912.4 year dt: 1230.1 year (2021-02-19 11:05:08)\n", + "Step: 444 Model Time: 546142.4 year dt: 1230.1 year (2021-02-19 11:05:09)\n", + "Step: 445 Model Time: 547372.5 year dt: 1230.1 year (2021-02-19 11:05:10)\n", + "Step: 446 Model Time: 548602.5 year dt: 1230.1 year (2021-02-19 11:05:11)\n", + "Step: 447 Model Time: 549832.6 year dt: 1230.1 year (2021-02-19 11:05:11)\n", + "Step: 448 Model Time: 551062.6 year dt: 1230.1 year (2021-02-19 11:05:12)\n", + "Step: 449 Model Time: 552292.7 year dt: 1230.1 year (2021-02-19 11:05:13)\n", + "Step: 450 Model Time: 553522.7 year dt: 1230.1 year (2021-02-19 11:05:14)\n", + "Step: 451 Model Time: 554752.8 year dt: 1230.1 year (2021-02-19 11:05:15)\n", + "Step: 452 Model Time: 555982.8 year dt: 1230.1 year (2021-02-19 11:05:16)\n", + "Step: 453 Model Time: 557212.9 year dt: 1230.1 year (2021-02-19 11:05:17)\n", + "Step: 454 Model Time: 558442.9 year dt: 1230.1 year (2021-02-19 11:05:18)\n", + "Step: 455 Model Time: 559673.0 year dt: 1230.1 year (2021-02-19 11:05:19)\n", + "Step: 456 Model Time: 560903.0 year dt: 1230.1 year (2021-02-19 11:05:20)\n", + "Step: 457 Model Time: 562133.1 year dt: 1230.1 year (2021-02-19 11:05:21)\n", + "Step: 458 Model Time: 563363.1 year dt: 1230.1 year (2021-02-19 11:05:22)\n", + "Step: 459 Model Time: 564593.2 year dt: 1230.1 year (2021-02-19 11:05:23)\n", + "Step: 460 Model Time: 565823.2 year dt: 1230.1 year (2021-02-19 11:05:23)\n", + "Step: 461 Model Time: 567053.3 year dt: 1230.1 year (2021-02-19 11:05:24)\n", + "Step: 462 Model Time: 568283.3 year dt: 1230.1 year (2021-02-19 11:05:25)\n", + "Step: 463 Model Time: 569513.4 year dt: 1230.1 year (2021-02-19 11:05:26)\n", + "Step: 464 Model Time: 570743.4 year dt: 1230.1 year (2021-02-19 11:05:27)\n", + "Step: 465 Model Time: 571973.5 year dt: 1230.1 year (2021-02-19 11:05:28)\n", + "Step: 466 Model Time: 573203.5 year dt: 1230.1 year (2021-02-19 11:05:29)\n", + "Step: 467 Model Time: 574433.6 year dt: 1230.1 year (2021-02-19 11:05:30)\n", + "Step: 468 Model Time: 575663.6 year dt: 1230.1 year (2021-02-19 11:05:31)\n", + "Step: 469 Model Time: 576893.7 year dt: 1230.1 year (2021-02-19 11:05:32)\n", + "Step: 470 Model Time: 578123.7 year dt: 1230.1 year (2021-02-19 11:05:33)\n", + "Step: 471 Model Time: 579353.8 year dt: 1230.1 year (2021-02-19 11:05:34)\n", + "Step: 472 Model Time: 580583.8 year dt: 1230.1 year (2021-02-19 11:05:35)\n", + "Step: 473 Model Time: 581813.9 year dt: 1230.1 year (2021-02-19 11:05:36)\n", + "Step: 474 Model Time: 583043.9 year dt: 1230.1 year (2021-02-19 11:05:36)\n", + "Step: 475 Model Time: 584274.0 year dt: 1230.1 year (2021-02-19 11:05:37)\n", + "Step: 476 Model Time: 585504.0 year dt: 1230.1 year (2021-02-19 11:05:38)\n", + "Step: 477 Model Time: 586734.1 year dt: 1230.1 year (2021-02-19 11:05:39)\n", + "Step: 478 Model Time: 587964.1 year dt: 1230.1 year (2021-02-19 11:05:40)\n", + "Step: 479 Model Time: 589194.2 year dt: 1230.1 year (2021-02-19 11:05:41)\n", + "Step: 480 Model Time: 590424.3 year dt: 1230.1 year (2021-02-19 11:05:42)\n", + "Step: 481 Model Time: 591654.3 year dt: 1230.1 year (2021-02-19 11:05:42)\n", + "Step: 482 Model Time: 592884.4 year dt: 1230.1 year (2021-02-19 11:05:43)\n", + "Step: 483 Model Time: 594114.4 year dt: 1230.1 year (2021-02-19 11:05:44)\n", + "Step: 484 Model Time: 595344.5 year dt: 1230.1 year (2021-02-19 11:05:45)\n", + "Step: 485 Model Time: 596574.5 year dt: 1230.1 year (2021-02-19 11:05:46)\n", + "Step: 486 Model Time: 597804.6 year dt: 1230.1 year (2021-02-19 11:05:47)\n", + "Step: 487 Model Time: 599034.6 year dt: 1230.1 year (2021-02-19 11:05:48)\n", + "Step: 488 Model Time: 600264.7 year dt: 1230.1 year (2021-02-19 11:05:48)\n", + "Step: 489 Model Time: 601494.7 year dt: 1230.1 year (2021-02-19 11:05:49)\n", + "Step: 490 Model Time: 602724.8 year dt: 1230.1 year (2021-02-19 11:05:50)\n", + "Step: 491 Model Time: 603954.8 year dt: 1230.1 year (2021-02-19 11:05:51)\n", + "Step: 492 Model Time: 605184.9 year dt: 1230.1 year (2021-02-19 11:05:52)\n", + "Step: 493 Model Time: 606414.9 year dt: 1230.1 year (2021-02-19 11:05:53)\n", + "Step: 494 Model Time: 607645.0 year dt: 1230.1 year (2021-02-19 11:05:54)\n", + "Step: 495 Model Time: 608875.0 year dt: 1230.1 year (2021-02-19 11:05:55)\n", + "Step: 496 Model Time: 610105.1 year dt: 1230.1 year (2021-02-19 11:05:55)\n", + "Step: 497 Model Time: 611335.1 year dt: 1230.1 year (2021-02-19 11:05:56)\n", + "Step: 498 Model Time: 612565.2 year dt: 1230.1 year (2021-02-19 11:05:57)\n", + "Step: 499 Model Time: 613795.2 year dt: 1230.1 year (2021-02-19 11:05:58)\n", + "Step: 500 Model Time: 615025.3 year dt: 1230.1 year (2021-02-19 11:05:59)\n" ] }, { @@ -1012,7 +1010,6 @@ " label='current numeric solution', color=\"red\",\n", " linestyle=\"--\", linewidth=2)\n", "ax.axhline(0.,color='black',linestyle='--')\n", - "ax.axis(ticklabel_format='sci')\n", "ax.set_xlabel('Time (yrs)')\n", "ax.set_ylabel('Deflection (km)')\n", "ax.legend(loc='best')\n", @@ -1043,7 +1040,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/examples/1_09_ViscoElasticShear.ipynb b/docs/examples/1_09_ViscoElasticShear.ipynb index 672e3d17..45e3c80e 100644 --- a/docs/examples/1_09_ViscoElasticShear.ipynb +++ b/docs/examples/1_09_ViscoElasticShear.ipynb @@ -382,7 +382,7 @@ "C2 = -V*h*eta*mu *mu/(mu*mu*h*h + V*V*eta*eta);\n", "\n", "increment = 301 #int(10 / (dt_e / 3.0) )\n", - "t = np.linspace(0, maxTime.to(u.year), increment)\n", + "t = np.linspace(0, maxTime.to(u.year).magnitude, increment)\n", "t *= u.years\n", "\n", "analyticSoln = np.exp(-mu/eta*t)*(C2*np.cos(V*t/h)-C1*np.sin(V*t/h))-C2" @@ -446,7 +446,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb b/docs/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb index 4a851da1..30c24932 100644 --- a/docs/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb +++ b/docs/examples/1_10_Viscoelastoplasticity-in-simple-shear.ipynb @@ -505,7 +505,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/examples/1_25_Hot_Canon_Ball.ipynb b/docs/examples/1_25_Hot_Canon_Ball.ipynb index a18d09b8..c348c4ae 100644 --- a/docs/examples/1_25_Hot_Canon_Ball.ipynb +++ b/docs/examples/1_25_Hot_Canon_Ball.ipynb @@ -19,7 +19,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /workspace/user_data/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/workspace/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -83,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -93,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -105,13 +105,13 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -130,16 +130,16 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -150,11 +150,11 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(temperature=\"steady-state\")" ] }, { @@ -162,10 +162,18 @@ "execution_count": 11, "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": [ "" @@ -199,7 +207,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_26_NumericalSandboxCompression-MovingWall.ipynb b/docs/examples/1_26_NumericalSandboxCompression-MovingWall.ipynb index 4338487e..31b52b7a 100644 --- a/docs/examples/1_26_NumericalSandboxCompression-MovingWall.ipynb +++ b/docs/examples/1_26_NumericalSandboxCompression-MovingWall.ipynb @@ -164,19 +164,19 @@ "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", + "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", + "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)\n", + "Model.add_passive_tracers(name=\"Interface3\", vertices=coords)\n", "\n", "coords[:, 1] = GEO.nd(microbeads.top)\n", - "interface4 = Model.add_passive_tracers(name=\"Interface4\", vertices=coords)\n", + "Model.add_passive_tracers(name=\"Interface4\", vertices=coords)\n", "\n", "coords[:, 1] = GEO.nd(microbeads.bottom)\n", - "interface5 = Model.add_passive_tracers(name=\"Interface5\", vertices=coords)" + "Model.add_passive_tracers(name=\"Interface5\", vertices=coords)" ] }, { @@ -200,11 +200,11 @@ "source": [ "from UWGeodynamics import visualisation as vis\n", "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Points(interface1, pointSize=2.0)\n", - "Fig.Points(interface2, pointSize=2.0)\n", - "Fig.Points(interface3, pointSize=2.0)\n", - "Fig.Points(interface4, pointSize=2.0)\n", - "Fig.Points(interface5, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface2_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface3_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface4_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface5_tracers, pointSize=2.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=2.0)\n", "Fig.show()" ] @@ -366,11 +366,11 @@ "source": [ "from UWGeodynamics import visualisation as vis\n", "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Points(interface1, pointSize=2.0)\n", - "Fig.Points(interface2, pointSize=2.0)\n", - "Fig.Points(interface3, pointSize=2.0)\n", - "Fig.Points(interface4, pointSize=2.0)\n", - "Fig.Points(interface5, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface2_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface3_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface4_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface5_tracers, pointSize=2.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=3.0)\n", "Fig.show()" ] @@ -467,7 +467,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/examples/1_27_ColumnPureThermalAdvection.ipynb b/docs/examples/1_27_ColumnPureThermalAdvection.ipynb index 24dfc720..5ed44218 100644 --- a/docs/examples/1_27_ColumnPureThermalAdvection.ipynb +++ b/docs/examples/1_27_ColumnPureThermalAdvection.ipynb @@ -28,7 +28,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /opt/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/jovyan/workspace/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -215,16 +215,7 @@ "metadata": { "scrolled": true }, - "outputs": [ - { - "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", - " warnings.warn(\"The unit of the quantity is stripped.\", UnitStrippedWarning)\n" - ] - } - ], + "outputs": [], "source": [ "import numpy as np\n", "\n", @@ -234,10 +225,10 @@ "coords[:, 0] = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), npoints)\n", "coords[:, 1] = GEO.nd(uppercrust.top)\n", "\n", - "interface1 = Model.add_passive_tracers(name=\"Interface1\", vertices=coords)\n", + "Model.add_passive_tracers(name=\"Interface1\", vertices=coords)\n", "\n", "coords[:, 1] = GEO.nd(mantle.top)\n", - "interface2 = Model.add_passive_tracers(name=\"Interface2\", vertices=coords)" + "Model.add_passive_tracers(name=\"Interface2\", vertices=coords)" ] }, { @@ -294,7 +285,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -334,7 +325,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 13, @@ -364,7 +355,7 @@ }, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(temperature=\"steady-state\")" ] }, { @@ -384,13 +375,13 @@ { "data": { "text/html": [ - "716.4864725844466 kelvin" + "716.4864725844412 kelvin" ], "text/latex": [ - "$716.4864725844466\\ \\mathrm{kelvin}$" + "$716.4864725844412\\ \\mathrm{kelvin}$" ], "text/plain": [ - "716.48647258444657 " + "716.48647258444123 " ] }, "execution_count": 15, @@ -399,7 +390,7 @@ } ], "source": [ - "GEO.dimensionalise(Model.temperature.evaluate(interface2).mean(), u.degK)" + "GEO.dimensionalise(Model.temperature.evaluate(Model.Interface2_tracers).mean(), u.degK)" ] }, { @@ -419,7 +410,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -687,7 +678,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb b/docs/examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb index 637ae437..f8701163 100644 --- a/docs/examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb +++ b/docs/examples/1_31_User_defined_geotherm_and_TP_dependent_densities.ipynb @@ -26,7 +26,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/workspace/codes/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -39,13 +39,15 @@ { "cell_type": "code", "execution_count": 2, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2.9.3\n" + "2.11.0-dev-ffeaab8(development)\n" ] } ], @@ -162,7 +164,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -354,20 +356,25 @@ ] }, { - "cell_type": "code", - "execution_count": 17, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "Model.temperature = True\n", - "Model.temperature.data[...] = geotherm_fn.evaluate(Model.mesh)" + "# Initialise Model\n", + "\n", + "To initalise the model temperature we use the `geotherm_fn`. \n", + "\n", + "UWGeodynamics will only solve for a steady-state temperature field if `temperature='steady-state'` and the requiste defintions for diffusivity variable(s) and thermal boundary conditions exist.\n", + "\n", + "Here the pressure field will be automatically calculated with the default argument `pressure='lithostatic'`. If desired one could use an underworld function to override the pressure field definition, i.e. `pressure=myPress_fn`." ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 17, "metadata": {}, + "outputs": [], "source": [ - "### Visualisation of the temperature field" + "Model.init_model(temperature=geotherm_fn)" ] }, { @@ -378,7 +385,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -389,8 +396,8 @@ } ], "source": [ - "Fig = vis.Figure(figsize=(1200,400), title=\"Initial Temperature\")\n", - "Fig.Surface(Model.mesh, Model.temperature, colours=\"coolwarm\")\n", + "Fig = vis.Figure(figsize=(1200,400))\n", + "Fig.Surface(Model.mesh, GEO.dimensionalise(Model.temperature, u.kg / u.m**3),colours=\"coolwarm\")\n", "Fig.show()" ] }, @@ -403,20 +410,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "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": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -436,63 +435,13 @@ " distances, pressure = GEO.extract_profile(Model.pressureField, line = [(180.* u.kilometer, 0.), (180.* u.kilometer, Model.bottom)])\n", "\n", " Fig, ax1 = plt.subplots(1,1,figsize=(15,7))\n", - " ax1.plot(GEO.dimensionalise(temperature, u.degK), GEO.dimensionalise(distances, u.kilometer))\n", + " ax1.plot(GEO.dimensionalise(temperature, u.degK).m, GEO.dimensionalise(distances, u.kilometer).m)\n", " ax1.set_xlabel(\"Temperature in Kelvin\")\n", " ax1.set_ylabel(\"Depth in kms\")\n", " ax1.set_ylim(670, 0)\n", " ax1.set_title(\"Temperature profile\")" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Initialise Model\n", - "\n", - "The model is then initialise, we want to make sure that UWGeodynamics will not attempt to solve for the temperature field, we must set the `temperature=False` (We have not set any thermal boundary conditions here, so using temperature=True will result in an error). The Pressure field needs to be calculated so we set `pressureField=True`." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "Model.init_model(temperature=False, pressureField=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "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": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Surface(Model.mesh, GEO.dimensionalise(Model.temperature, u.kg / u.m**3),colours=\"coolwarm\")\n", - "Fig.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -502,7 +451,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -541,7 +490,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.5" } }, "nbformat": 4, diff --git a/docs/examples/1_32_Passive_Tracers_tests.ipynb b/docs/examples/1_32_Passive_Tracers_tests.ipynb index 9b84c1f5..aaeccd61 100644 --- a/docs/examples/1_32_Passive_Tracers_tests.ipynb +++ b/docs/examples/1_32_Passive_Tracers_tests.ipynb @@ -171,7 +171,7 @@ "vertices[:, 0] = GEO.nd((Model.maxCoord[0] - Model.minCoord[0]) / 2.0)\n", "vertices[:, 1] = 0.\n", "\n", - "central_tracer = Model.add_passive_tracers(name=\"central\", vertices=vertices)" + "Model.add_passive_tracers(name=\"central\", vertices=vertices)" ] }, { @@ -197,10 +197,10 @@ "coords[:, 0] = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), npoints)\n", "coords[:, 1] = 0.\n", "\n", - "interface_tracers_1 = Model.add_passive_tracers(name=\"interface_1\", vertices=coords)\n", + "Model.add_passive_tracers(name=\"interface_1\", vertices=coords)\n", "\n", "coords[:, 1] = -GEO.nd(20.*u.kilometres)\n", - "interface_tracers_2 = Model.add_passive_tracers(name=\"interface_2\", vertices=coords)\n" + "Model.add_passive_tracers(name=\"interface_2\", vertices=coords)\n" ] }, { @@ -220,7 +220,7 @@ " minCoord=[Model.minCoord[0], -20.*u.kilometer], \n", " maxCoord=[Model.maxCoord[0], 0.*u.kilometer])\n", "\n", - "grid_tracers = Model.add_passive_tracers(name=\"grid\", vertices=pts)" + "Model.add_passive_tracers(name=\"grid\", vertices=pts)" ] }, { @@ -247,10 +247,10 @@ ], "source": [ "Fig = vis.Figure(figsize=(1200,400), title=\"Material Field\", quality=2)\n", - "Fig.Points(interface_tracers_1, pointSize=2.0)\n", - "Fig.Points(interface_tracers_2, pointSize=2.0)\n", - "Fig.Points(grid_tracers, pointSize=2.0)\n", - "Fig.Points(central_tracer, pointSize=10.0, colour=\"red\")\n", + "Fig.Points(Model.interface_1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.interface_2_tracers, pointSize=2.0)\n", + "Fig.Points(Model.grid_tracers, pointSize=2.0)\n", + "Fig.Points(Model.central_tracers, pointSize=10.0, colour=\"red\")\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=2.0)\n", "Fig.show()" ] @@ -279,17 +279,17 @@ } ], "source": [ - "interface_tracers_2.add_tracked_field(Model.pressureField,\n", - " name=\"Pressure\",\n", - " units=u.pascal, \n", - " dataType=\"double\",\n", - " count=1)\n", + "Model.interface_2_tracers.add_tracked_field(Model.pressureField,\n", + " name=\"Pressure\",\n", + " units=u.pascal, \n", + " dataType=\"double\",\n", + " count=1)\n", "\n", - "interface_tracers_2.add_tracked_field(Model.projViscosityField,\n", - " name=\"Viscosity\",\n", - " units=u.pascal / u.second, \n", - " dataType=\"double\",\n", - " count=1)" + "Model.interface_2_tracers.add_tracked_field(Model.projViscosityField,\n", + " name=\"Viscosity\",\n", + " units=u.pascal / u.second, \n", + " dataType=\"double\",\n", + " count=1)" ] }, { @@ -423,10 +423,10 @@ ], "source": [ "Fig = vis.Figure(figsize=(1200,400), title=\"Viscosity Field (Pa.s)\", quality=3)\n", - "Fig.Points(interface_tracers_1, pointSize=2.0)\n", - "Fig.Points(interface_tracers_2, pointSize=2.0)\n", - "Fig.Points(grid_tracers, pointSize=2.0)\n", - "Fig.Points(central_tracer, pointSize=2.0)\n", + "Fig.Points(Model.interface_1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.interface_2_tracers, pointSize=2.0)\n", + "Fig.Points(Model.grid_tracers, pointSize=2.0)\n", + "Fig.Points(Model.central_tracers, pointSize=2.0)\n", "Fig.Points(Model.swarm, \n", " GEO.dimensionalise(Model.viscosityField, u.pascal * u.second),\n", " logScale=True,\n", @@ -459,7 +459,7 @@ } ], "source": [ - "interface_tracers_2.tracked_fields" + "Model.interface_2_tracers.tracked_fields" ] }, { @@ -488,7 +488,7 @@ } ], "source": [ - "interface_tracers_2.pressure.data[:10]" + "Model.interface_2_tracers.pressure.data[:10]" ] }, { @@ -517,7 +517,7 @@ } ], "source": [ - "interface_tracers_2.viscosity.data[:10]" + "Model.interface_2_tracers.viscosity.data[:10]" ] }, { @@ -546,7 +546,7 @@ } ], "source": [ - "interface_tracers_2.global_index.data[:10]" + "Model.interface_2_tracers.global_index.data[:10]" ] }, { @@ -621,7 +621,7 @@ } ], "source": [ - "interface_tracers_2.tracked_fields" + "Model.interface_2_tracers.tracked_fields" ] }, { @@ -650,7 +650,7 @@ } ], "source": [ - "interface_tracers_2.global_index.data[:10]" + "Model.interface_2_tracers.global_index.data[:10]" ] } ], @@ -670,7 +670,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/nci_gadi/install_on_gadi.sh b/docs/nci_gadi/install_on_gadi.sh index 93eaa3cc..9659d92a 100644 --- a/docs/nci_gadi/install_on_gadi.sh +++ b/docs/nci_gadi/install_on_gadi.sh @@ -1,11 +1,11 @@ #!/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 +module load openmpi/4.0.2 hdf5/1.10.5p python3/3.8.5 scons/3.1.1 export GROUP=q97 export USER= -export INSTALL_NAME=UWGeodynamics_2.9.6 +export INSTALL_NAME=UWGeodynamics_2.10.0 export CODES_PATH=/scratch/$GROUP/$USER/codes export UW_OPT_DIR=$CODES_PATH/opt @@ -18,7 +18,10 @@ 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 +export LD_PRELOAD=$OPENMPI_ROOT/lib/libmpi_usempif08_GNU.so.40:$OPENMPI_ROOT/lib/libmpi_usempi_ignore_tkr_GNU.so.40:$OPENMPI_ROOT/lib/libmpi_cxx.so.40 + +export UW_BRANCH=v2.10.0b +export UWGEO_BRANCH=development install_swig() { tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX) @@ -61,8 +64,11 @@ install_python_dependencies(){ source $INSTALL_PATH/bin/activate pip3 install Cython pip3 install mpi4py + unset HDF5_DIR 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 + export HDF5_LIBDIR=/apps/hdf5/1.10.5p/lib/ompi3 + export HDF5_INCLUDEDIR=/apps/hdf5/1.10.5p/include + CC=mpicc HDF5_MPI="ON" pip3 install --no-cache-dir --no-binary=h5py h5py } @@ -71,7 +77,7 @@ install_underworld(){ 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 + git clone --branch $UW_BRANCH https://github.com/underworldcode/underworld2.git $tmp_dir pip3 install . rm -rf $tmp_dir cd $CDIR @@ -81,9 +87,9 @@ 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 + git clone --branch $UWGEO_BRANCH https://github.com/underworldcode/uwgeodynamics.git $tmp_dir + pip3 install . + rm -rf $tmp_dir cd $CDIR } diff --git a/docs/readthedocs/src/UserGuide.rst b/docs/readthedocs/src/UserGuide.rst index 1cc6a976..760604f0 100644 --- a/docs/readthedocs/src/UserGuide.rst +++ b/docs/readthedocs/src/UserGuide.rst @@ -1399,11 +1399,11 @@ Initialization of the pressure and temperature fields is done by using the ``Model.init_model`` method. -The default behavior is to initialise the temperature field to a steady-state -while the pressure field is initialized to the lithostatic pressure. +The default behavior is to not initialise the pressure nor the temperature fields. -You can deactivate pressure or temperature initialization by setting the -corresponding argument to `False` (`Model.init_model(temperature=False)`) +You can initialise the fields by passing an Underworld function or a Mesh variable. +You can initialise the temperature field to steady-state using the "steady-state" value. +Yuo can initialise the pressure field to be lithostatic using the "lithostatic" value. .. code:: python @@ -1412,7 +1412,7 @@ corresponding argument to `False` (`Model.init_model(temperature=False)`) >>> Model = GEO.Model() >>> Model.density = 2000. * u.kilogram / u.metre**3 - >>> Model.init_model(temperature=False, pressure=True) + >>> Model.init_model(temperature="steady-state", pressure="lithostatic") ... @@ -1652,7 +1652,7 @@ Passive Tracers >>> coords = np.ndarray((npoints, 2)) >>> coords[:, 0] = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), npoints) >>> coords[:, 1] = GEO.nd(32. * u.kilometre) - >>> tracers = Model.add_passive_tracers(vertices=coords) + >>> 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 to the @@ -1673,8 +1673,7 @@ position of the centroids. The pattern is repeated around each centroid. >>> coords_centroid[:, 1] = cypos.ravel() >>> >>> coords = np.zeros((1, 2)) - >>> tracers = Model.add_passive_tracers(vertices=coords, - ... centroids=coords_centroid) + >>> Model.add_passive_tracers(vertices=coords, centroids=coords_centroid) We provide a function to create circles on a grid: @@ -1705,16 +1704,16 @@ through time. >>> coords = np.ndarray((npoints, 2)) >>> coords[:, 0] = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), npoints) >>> coords[:, 1] = GEO.nd(32. * u.kilometre) - >>> tracers = Model.add_passive_tracers(vertices=coords) - - >>> tracers.add_tracked_field(Model.pressureField, - name="tracers_press", - units=u.megapascal, - dataType="float") - >>> tracers.add_tracked_field(Model.strainRateField, - name="tracers_strainRate", - units=1.0/u.second, - dataType="float") + >>> Model.add_passive_tracers(name="p1", vertices=coords) + + >>> Model.p1_tracers.add_tracked_field(Model.pressureField, + name="tracers_press", + units=u.megapascal, + dataType="float") + >>> Model.p1_tracers.add_tracked_field(Model.strainRateField, + name="tracers_strainRate", + units=1.0/u.second, + dataType="float") Surface Processes ----------------- diff --git a/docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb b/docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb index 03c64c0b..b7bd4f14 100644 --- a/docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb +++ b/docs/tutorials/Tutorial_10_Thrust_Wedges.ipynb @@ -348,7 +348,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -430,7 +430,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb b/docs/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb index acb64f55..4f772fd5 100644 --- a/docs/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb +++ b/docs/tutorials/Tutorial_11_Coupling_with_Badlands.ipynb @@ -357,7 +357,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(temperature=\"steady-state\", pressure=\"lithostatic\")" ] }, { @@ -479,7 +479,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb b/docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb index be0f6ca5..488ae107 100644 --- a/docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb +++ b/docs/tutorials/Tutorial_1_ThermoMechanical_Model.ipynb @@ -37,7 +37,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/romain/Projects/Project_UWGeodynamics/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -299,7 +299,7 @@ " ViscosityConstant (1e+19 pascal * second)" ], "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -328,7 +328,7 @@ " ViscosityWet Quartz, Viscous Dislocation Creep, Gleason and Tullis, 1995PlasticityHuismans et al. 2011, (Crust)" ], "text/plain": [ - "" + "" ] }, "execution_count": 16, @@ -355,7 +355,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 17, @@ -384,7 +384,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -434,7 +434,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -471,7 +471,7 @@ "vertices[:, 0] = GEO.nd((Model.maxCoord[0] - Model.minCoord[0]) / 2.0)\n", "vertices[:, 1] = 0.\n", "\n", - "central_tracer = Model.add_passive_tracers(name=\"central\", vertices=vertices)" + "Model.add_passive_tracers(name=\"Central\", vertices=vertices)" ] }, { @@ -501,10 +501,10 @@ "coords[:, 0] = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), npoints)\n", "coords[:, 1] = 0.\n", "\n", - "surface_tracers = Model.add_passive_tracers(name=\"Surface\", vertices=coords)\n", + "Model.add_passive_tracers(name=\"Surface\", vertices=coords)\n", "\n", "coords[:, 1] -= GEO.nd(35.*u.km)\n", - "moho_tracers = Model.add_passive_tracers(name=\"Moho\", vertices=coords)" + "Model.add_passive_tracers(name=\"Moho\", vertices=coords)" ] }, { @@ -524,18 +524,18 @@ " minCoord=[Model.minCoord[0], crust.bottom], \n", " maxCoord=[Model.maxCoord[0], 0.*u.kilometer])\n", "\n", - "FSE_Crust = Model.add_passive_tracers(name=\"FSE_Crust\", vertices=pts)\n", + "Model.add_passive_tracers(name=\"FSE_Crust\", vertices=pts)\n", "\n", "pts = GEO.circles_grid(radius=2.0*u.kilometer, \n", " minCoord=[Model.minCoord[0], mantleLithosphere.bottom], \n", " maxCoord=[Model.maxCoord[0], mantleLithosphere.top])\n", "\n", - "FSE_Mantle = Model.add_passive_tracers(name=\"FSE_Mantle\", vertices=pts)" + "Model.add_passive_tracers(name=\"FSE_Mantle\", vertices=pts)" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": { "tags": [ "analysis" @@ -545,7 +545,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -557,11 +557,11 @@ ], "source": [ "Fig = vis.Figure(figsize=(1200,400), title=\"Material Field\", quality=2)\n", - "Fig.Points(central_tracer, pointSize=10, colour=\"blue\")\n", - "Fig.Points(surface_tracers, pointSize=2.0)\n", - "Fig.Points(moho_tracers, pointSize=2.0, colour=\"red\")\n", - "Fig.Points(FSE_Crust, pointSize=2.0)\n", - "Fig.Points(FSE_Mantle, pointSize=2.0)\n", + "Fig.Points(Model.Central_tracers, pointSize=10, colour=\"blue\")\n", + "Fig.Points(Model.Surface_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Moho_tracers, pointSize=2.0, colour=\"red\")\n", + "Fig.Points(Model.FSE_Crust_tracers, pointSize=2.0)\n", + "Fig.Points(Model.FSE_Mantle_tracers, pointSize=2.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=2.0)\n", "Fig.show()" ] @@ -579,7 +579,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(temperature=\"steady-state\", pressure=\"lithostatic\")" ] }, { @@ -591,18 +591,10 @@ ] }, "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": [ "" @@ -630,7 +622,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -657,7 +649,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": { "tags": [ "analysis" @@ -668,22 +660,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "Average Temperature at Moho: 607 degC\n" + "Average Temperature at Moho: 607 degree_Celsius\n" ] }, { "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", - "/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/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n", + "/home/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -701,7 +693,7 @@ "\n", " import matplotlib.pyplot as plt\n", "\n", - " moho_average_temperature = Model.temperature.evaluate(moho_tracers).mean()\n", + " moho_average_temperature = Model.temperature.evaluate(Model.Moho_tracers).mean()\n", " moho_average_temperature = GEO.dimensionalise(moho_average_temperature, u.degC)\n", "\n", " print(\"Average Temperature at Moho: {0:5.0f}\".format(moho_average_temperature))\n", @@ -733,7 +725,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": { "tags": [ "analysis" @@ -743,7 +735,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -764,7 +756,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "metadata": { "tags": [ "analysis" @@ -775,13 +767,13 @@ "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" + "/home/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -820,7 +812,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -840,42 +832,20 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running with UWGeodynamics version 2.9.4\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" - ] - } - ], + "outputs": [], "source": [ "Model.run_for(nstep=2, checkpoint_interval=1)" ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": { "tags": [ "analysis" ] }, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "Fig = vis.Figure(figsize=(1200,400), title=\"Viscosity Field (Pa.s)\", quality=3)\n", "Fig.Points(Model.swarm, \n", @@ -888,26 +858,13 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": { "tags": [ "analysis" ] }, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "Fig = vis.Figure(figsize=(1200,400), title=\"Viscosity Field (Pa.s)\", quality=3)\n", "Fig.Surface(Model.mesh, \n", @@ -919,9 +876,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "virtualenv", "language": "python", - "name": "python3" + "name": "virtualenv" }, "language_info": { "codemirror_mode": { @@ -933,7 +890,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_2_Melt.ipynb b/docs/tutorials/Tutorial_2_Melt.ipynb index f3d72a77..fb4a21df 100644 --- a/docs/tutorials/Tutorial_2_Melt.ipynb +++ b/docs/tutorials/Tutorial_2_Melt.ipynb @@ -33,7 +33,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "loaded rc file /home/jovyan/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/romain/Projects/Project_UWGeodynamics/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -241,7 +241,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -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, @@ -589,10 +589,10 @@ "coords[:, 0] = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), 1000)\n", "coords[:, 1] = 0.\n", "\n", - "surface_tracers = Model.add_passive_tracers(name=\"Surface\", vertices=coords)\n", + "Model.add_passive_tracers(name=\"Surface\", vertices=coords)\n", "\n", "coords[:, 1] -= GEO.nd(60.*u.kilometer)\n", - "moho_tracers = Model.add_passive_tracers(name=\"Moho\", vertices=coords)" + "Model.add_passive_tracers(name=\"Moho\", vertices=coords)" ] }, { @@ -612,7 +612,7 @@ " minCoord=[Model.minCoord[0], continentalcrust.bottom], \n", " maxCoord=[Model.maxCoord[0], 0.*u.kilometer])\n", "\n", - "FSE_Crust = Model.add_passive_tracers(name=\"FSE_Crust\", vertices=pts)" + "Model.add_passive_tracers(name=\"FSE_Crust\", vertices=pts)" ] }, { @@ -638,12 +638,12 @@ "\n", "point = np.zeros((1, 2))\n", "\n", - "Lag_Grid = Model.add_passive_tracers(name=\"Lag_grid\", vertices=point, centroids=centroid_coords)" + "Model.add_passive_tracers(name=\"Lag_grid\", vertices=point, centroids=centroid_coords)" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": { "scrolled": true, "tags": [ @@ -654,7 +654,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -666,33 +666,33 @@ ], "source": [ "FigMat = vis.Figure(figsize=(1200,400))\n", - "FigMat.Points(Lag_Grid, pointSize=12.0, colour=\"red\")\n", - "FigMat.Points(surface_tracers, pointSize=4.0)\n", - "FigMat.Points(moho_tracers, pointSize=4.0)\n", - "FigMat.Points(FSE_Crust, pointSize=2.0)\n", + "FigMat.Points(Model.Lag_grid_tracers, pointSize=12.0, colour=\"red\")\n", + "FigMat.Points(Model.Surface_tracers, pointSize=4.0)\n", + "FigMat.Points(Model.Moho_tracers, pointSize=4.0)\n", + "FigMat.Points(Model.FSE_Crust_tracers, pointSize=2.0)\n", "FigMat.Points(Model.swarm, Model.materialField, fn_size=2.0)\n", "FigMat.show()" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "Lag_Grid.add_tracked_field(Model.temperature, name=\"LagGridTemp\", units=u.degC, dataType=\"float\")\n", - "Lag_Grid.add_tracked_field(Model.pressureField, name=\"LagGridPress\", units=u.megapascal, dataType=\"float\")" + "Model.Lag_grid_tracers.add_tracked_field(Model.temperature, name=\"LagGridTemp\", units=u.degC, dataType=\"float\")\n", + "Model.Lag_grid_tracers.add_tracked_field(Model.pressureField, name=\"LagGridPress\", units=u.megapascal, dataType=\"float\")" ] }, { @@ -704,34 +704,26 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(temperature=\"steady-state\", pressure=\"lithostatic\")" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": { "tags": [ "analysis" ] }, "outputs": [ - { - "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", - " warnings.warn(\"The unit of the quantity is stripped.\", UnitStrippedWarning)\n" - ] - }, { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -749,7 +741,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "metadata": { "tags": [ "analysis" @@ -759,7 +751,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -793,7 +785,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": { "tags": [ "analysis" @@ -804,14 +796,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Average Temperature at Moho: 1054 degC\n" + "Average Temperature at Moho: 1054 degree_Celsius\n" ] } ], "source": [ "if GEO.nProcs == 1:\n", "\n", - " moho_average_temperature = Model.temperature.evaluate(moho_tracers).mean()\n", + " moho_average_temperature = Model.temperature.evaluate(Model.Moho_tracers).mean()\n", " moho_average_temperature = GEO.dimensionalise(moho_average_temperature, u.degC)\n", "\n", " print(\"Average Temperature at Moho: {0:5.0f}\".format(moho_average_temperature))" @@ -826,7 +818,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "metadata": { "tags": [ "analysis" @@ -837,17 +829,22 @@ "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", - " warnings.warn(\"The unit of the quantity is stripped.\", UnitStrippedWarning)\n" + "/home/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n", + "/home/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n" ] }, { "data": { + "image/png": "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HtTLTuWJC3ryzMW92FZYwhlPfsfdH8ykQNMfiIiIiIhIBFFTtw9Hd6zP57cewsX9mvPi90s4+qFv+e+stX7HEhERERERAdTUVUlWahJ/ObUTb187gOzUJK54aRLXvzKFddsK/Y4mIiIiIiJxTk1dNfRoVpsPbxzEb49tzxez13LkQ9/y2oRllJdr+GcREREREfGHBkqppuRAAtcf3objOzXg9+/O4M53ZvDejyu570xNfyAiIrHl3k/nkJ2aRGZqgKzUANmpATJTkujSNIfs1CS/44mIiEdN3X5qlZfJa1f2441Jy7nn49kc98hofnNMOy4b2JJAonaAiohI9OrcJIcG2am8NmEZO4rLfrX+1G6NePTc7j4kExGRyqipOwBmxjm9m3FY+3r84b2f+Mcnc/h4+mruP6sLHRpk7/sOREREItBh7evxw++PBKC0rJyColLyC4NfN7w6he0aCVpEJKJol1INqJ+dyvCLevL4ed1ZsXknJz8+loe/mEdxabnf0URERA5IIDGBWunJNM1Np2OjbNKSE/2OJCIiu1FTV0PMjJO7NuKL2w7lhM4NefTL+Zz8+FhN3ioiIiIiIiGlpq6G5WYk8+i53Xl2aC+27izh9CfG8Y9PZrOzknMSREREREREDpSauhA58qD6fH7bIZzTuxnDRy/i+EdHM37RRr9jiYiIiIhIjFFTF0LZqUnce0ZnXr2iL+UOzhn+A394bwYFOsFcRERERERqiEa/DIMBbery2S2DefDzeTw3bjFfz1nP/Wd2YVDbun5HExERqZbEBOOrOevo+bcvyEwNkJkSnMMuMyWJ7NQAF/VvTvdmtf2OKSISV9TUhUl6coA/ntSREzo35LdvTePCZ8dzXp9m/P6EDmRpAlcREYkSdxzXgW/nr6egsJSColIKCkvJLypl1ZadfLVmG2nJiWrqRETCTE1dmPVsXptPbhrMw1/M45kxi/h27jruO7MLh7TL8zuaiIjIPg1oU5cBbSo/0qTXPV+EOY2IiIDOqfNFalIid55wEG9dO4C05EQufm4Cd7w9nW2FJX5HExERERGRKKOmzkc9mtXm45sGc/WhrXhj0nKOfXg0385b73csERERERGJImrqfJaalMidxx/E29cOICMlwNDnJvC7t7TXTkREREREqkZNXYTo3qw2H904iGsPa82bk4N77b6eu87vWCIiIiIi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SoBh53XnL6cczLfz1nPi42OYsWKr37FERCRGBBITyElLokntdLJS9Vm3iEQnNXUS8cyMoQNaMPLq/pSXO8588jteGb8U55zf0UREREREfKemTqJGj2a1+eimwfRrXYe73v2J37wxjR3FpX7HEhERERHxlZo6iSq5Gcm8cElvbju6He9OXclp/x7HgnU6/0FERERE4peaOok6CQnGTUe25aXL+rChoJhTh43l0xmr/Y4lIiIxwIEO7xeRqKMzgiVqDW6bx8c3DeLal6dw7StTuPqQVvz22PYEEvVZhYiIVF9igrF04w7a/eHT4Bx2qcF57HbNYXdqt0ac2q2x3zFFRH5FTZ1EtYY5aYy8uh9//XAWT49exIyVW3nsvO7UzUzxO5qIiESZGw5vQ5t6mRQUllJQVEp+YfCroKiECYs3sb2oVE2diEQkNXUS9VICifz99M50a1qLP7z3Eyc/PpYnL+xJt6a1/I4mIiJRpFVeJtcd1qbSdec8/X2Y04iIVJ2OU5OYcXavprx97QASE4whT33Pq+OX6bwIEREREYl5auokpnRqnMNHNw6if+s6/P7dGdz+1nQKS8r8jiUiIiIiEjJq6iTm1EpP5rlLenPTEW14c/IKznrqO5Zv2uF3LBERERGRkFBTJzEpMcG47Zj2PDu0F0s37uDkYWMZPW+937FERERERGqcmjqJaUceVJ8PbxhEg+xULnl+Ak99u1Dn2YmIyH5Zn1/Eez+u5L+z1jJ+0UZmrtrKso072LS9WLVFRHyl0S8l5rWom8E71w3gt29N575P5/DTyq3886wupCfr119ERKqmca00xi/exC0jp1a6/rrDWnP7cR3CG0pExKP/aiUupCcHGHZedzo1yuGfo+awYF0Bz1zci6a56X5HExGRKPDA2V2584SDyC8soaColILCUvK97//4ZDYrt+z0O6KIxDE1dRI3zIxrD2tNx0bZ3PjqFE4eNpZh5/VgUNu6fkcTEZEIl5Bg5GWlkJeV8qt1j38134dEIiL/o3PqJO4c2i6PD24YRL2sFC5+bjzDR+s8OxERERGJXmrqJC61qJvBu9cN5NiDG/CPT+Zw8+tT2Vms+exEREREJPqoqZO4lZES4IkLevDbY9vz4fRVnPmk5rMTERERkeijpk7implx/eFteO6S3izfvINTho3lu4Ub/I4lIiIiIlJlGihFBDi8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\n", "text/plain": [ - "
" + "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -885,16 +882,28 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "metadata": { "tags": [ "analysis" ] }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n", + "/home/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n", + "/home/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n" + ] + }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfEAAAEKCAYAAAACZ2ynAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4U+X7x/H3nXRvWkqBslosexQoyJCh7A0qKiIyFNz+AEVQEHCDe3wVBUVwASobAZXhAFGh7CnI3nsVCh3P748ERIS2QNOTNPfrunIl5yQ5+RxSevec8wwxxqCUUkopz2OzOoBSSimlro0WcaWUUspDaRFXSimlPJQWcaWUUspDaRFXSimlPJQWcaWUUspDWVLERaSFiGwUkc0iMtCKDEoppZSnk7zuJy4iduAvoCmwC1gCdDbGrMvTIEoppZSHs+JIvBaw2RizxRhzDpgAtLcgh1JKKeXRfCz4zFhg50XLu4AbL32RiPQGegMEBwfXKFeuXK58+M6TOzlx7gT+dn+iAqII9w/HJto0QLmPM+cy2HzwFKWigggN8LU6jsprmemwbzWEF4fgglanURZJTk4+ZIyJzu51VhTxHDHGjAJGASQlJZmlS5fmynbTMtP4YdsPfLbuM9YdXkeQfxB3lLmDzuU6Ex2U7b+XUi63atcx2v1vER90S6Jx+Rir46i8duoAvJ4ArQdDzfutTqMsIiLbc/I6Kw5BdwPFL1ou5lyXJ3xtvrSOb82E1hMY22IsNQrV4OPVH9NsUjMGLRzEhiMb8iqKUkopdV2sOBJfAiSISByO4n0XcHdehxARasTUoEZMDXac2MGX679kyuYpTP97OrUK16Jrha40KNZAT7WrPJdyNsPqCMpK6WetTqA8SJ5XKGNMOvAo8D2wHvjaGLM2r3NcrERYCZ6+8Wl+vP1H+tXox/YT23ls/mO0n9qeiRsmcjrttJXxlBc5mZpG59G/AxDoZ7c4jbLEJ80c977B1uZQHiHPu5hdi9y8Jp4TaZlpzN0+l8/Wfsaaw2sI8wvjjrJ3cFfZu4gJ1muUynX2HDtD3eHzubVaLG/cURURsTqSymvPF4TY6tBjNtjc6w+5tLQ0du3aRWpqqtVR8o2AgACKFSuGr++/G7GKSLIxJim797ttwzYr+dp8aRnXkhalWrDi4Ao+W/sZY9aMYeyasbSIa0HXCl2pEFXB6pgqH7sxPlILuLcSgZJ13a6AA+zatYvQ0FBKlSqlP5+5wBjD4cOH2bVrF3Fxcde0DS3iWRARqhWqRrVC1dh5cidfrf+KyZsmM3PLTJJikri3wr00LN5Qr5srpbxCamqqFvBcJCJERUVx8ODBa96GVp8cKh5anAG1BjC301yeTHqS3ad28/iCx2k7pS3jN4zX6+bqumVkGl6Z7egdIegvSa/0y2uQcQ7c+PvXAp67rvffU4v4VQr1C6VbxW7MunUWrzV8jQj/CF7+42WafNuEt5Lf4uDpa/+LSnm3/SdSmbFyDzfGRdKgjI5Z4JX+GAVRCVD5dquTKA+hp9OvkY/NhxalWjiumx9YwWfrPmPs2rF8vu5z2pZuS7eK3YgPj7c6pvJAt1aPpXB4gNUxlFVK3QQxFa1OoTyEFvFckFgokcRCiew8sZNx68YxdfNUJm+azM3Fb6ZnpZ4kFkq0OqJSSnm8w4cP07hxYwD27duH3W4nOtpx1urPP//Ez8/PyniW0CKei4qHFWdw7cE8nPgw4zeMZ/yG8SyYvYBqharRo2IPbQSnsrRq13GrIygrHdkKKQesTuHWoqKiWLFiBQDDhg0jJCSEJ5980uJU1tIi7gKRAZE8kvgIPSr2YMrmKXy29jMeX/A48eHxdK/YndbxrfGze99fjOrKUtMyePjLZPx8bMQVDLE6jrLCLGcxKuQZ3Vefm7GWdXtO5Oo2KxQNY2jb3LmUkJKSwh133MGuXbvIyMjg2Wef5c4778yVbbsTPSx0oSDfILqU78J3t37HiPoj8LP7MeS3IbSc1JJP13zKyXMnrY6o3ERGpiHTwBNNy1ArLtLqOMoK6WehaDW4sbfVSfKFOXPmULRoUVauXMmaNWto0aKF1ZFcQo/E84CPzYdW8a1oGdeSxXsX8+maT3kz+U1GrRpFp7KduKf8PRQKKmR1TOUGtPeOl/MJtDpBjuXWEbOrVK5cmSeeeIIBAwbQpk0b6tevb3Ukl9Aj8TwkItQtWpfRzUYzsc1E6sfWZ9zacTSf1Jwhi4aw5dgWqyMqi7j/4MfK5dJ1KNPcVKZMGZYtW0blypUZPHgwzz//vNWRXEKLuEUqRFXg1Yav8l3H7+hUphOzt86m/bT2PDb/MZYfWG51PJXH7h+3BAB/H/cbalPlgY2zYdcSsOvJ0dyyZ88egoKCuOeee+jfvz/Lli2zOpJL6E+MxYqFFuOZG5/hoaoPMWHDBL7a8BX3zr6X6oWq06tKL+oVracjJHmBHYdPExsRyJ01i1sdRVnh8N+O++avWJsjH1m9ejX9+/fHZrPh6+vLyJEjrY7kElrE3USBgAI8lPgQ3St1Z/KmyYxdO5aH5j5E+cjy9KrSi8YlGmv3tHyubukoAnz1SNyrRZSwOoHHGDZsWJbPN2/enObNm+dNGAtpVXAzgT6BdCnfhVkdZ/F83ec5nX6afj/1o+O0jsz4ewZpmWlWR1RKKeUm9EjcTfnafemY0JF2pdvxw/YfGL16NM8sfIb3V7xPz0o9aX9De/zt/lbHVLlg8d+H2XNcGzV5tTXfWp3AY108itvF5s2bR1RUlAWJ8pYWcTdnt9kvzG3+866fGb1qNC/8/gIfrvyQbhW70alMJ4J8g6yOqa7DpGW7AGifGGtxEmWJjDTYsxyibgD/UKvTeJyLR3HzRno63UOICI2KN+KLVl8wutlo4sPjeX3p6zSf1JwPV37I8bM6ZKcni40I5KaEglbHUFaqepcOFKCumhZxDyMi1C5Sm4+bf8wXrb6ganRV3l/xPs0nNeet5Lc4dOaQ1RGVUkrlES3iHqxqdFX+1/h/fNv2W+rH1ufTNZ/SYlILXvnjFfae2mt1PJUDxhg27Mvd8aeVh9FBXtR1cFkRF5ExInJARNZctC5SRH4UkU3O+wKu+nxvUjayLK81fI3pHabTMq4lX2/8mlaTWzFk0RB2nNhhdTyVhWU7jrJm9wmC/LRrmdda/oXjPrSotTmUR3LlkfhY4NIR5wcC84wxCcA857LKJaXCS/FCvReYdessOpXtxKyts2g3tR2DFg7SYu6mUtMyAXiuvXuPQ61cKP2s475iR2tzeIDDhw+TmJhIYmIihQsXJjY29sLyuXPn/vP6kJD8PyOgy1qnG2N+EZFSl6xuDzRyPh4H/AQMcFUGb1UkpAjP3PgMvav05tM1n/L1xq+ZuWUmbeLb0LtKb0qGlbQ6orqEj02vbCmVHZ1P/L/yuotZjDHm/MXafUDMlV4oIr2B3gAlSugoRteiYGBB+tfsT49KPf5VzFvHtaZ3ld6UCi9ldUSllKeaPRD2rc7dbRauDC2H5+428znL/vw3xhiymLzJGDPKGJNkjEmKjo7Ow2T5z/liPvu22XQt35Uft/9I+2nteebXZ9h2fJvV8bzaqF8cM9f52LVrkdfanQxiB5u2i1BXL6+PxPeLSBFjzF4RKQIcyOPP92oFAwvyZM0n6V6pO2PXjGXixol8t/U7WsW1oneV3sSFx1kd0escTjlL0fAAqhaLsDqKssrJfY4jUB8PG4FRj5jdQl4fiU8HujkfdwOm5fHnK/4p5rNvm829Fe5l7va5dJjWgYG/DmTr8a1Wx/M65YuEYbfpkbhXC9SOOurauLKL2XhgMVBWRHaJyH3AcKCpiGwCmjiXlUUKBhbkiaQnLhTz+TvmXyjmW45vsTqeUkqpbLiydXrnKzz135HqlaXOF/PuFbszbu04JmycwKwts2gZ15IHqj5AfHi81RHzpdPn0lm/9yQxoQFWR1FWSjsNfsFWp1AeSidAURdEBUbRL6kf3Sp2Y9y6cUzYMIHZW2fTKr4VD1d9mBJh2ksgN63ZfYKMTENCjE564dWOboOi1axO4XGym08c4NSpU64PYjHtnKr+Iyowin41+jHntjl0r9idedvn0W5qO55b/Bz7UvZZHS/fcHTQgAY68Yl3MwYCwq1OoTyUHomrK4oMiKRfUj+6VujKqFWj+HbTt0zfPJ07yt7B/ZXvJyow/8/Vq5TL6cxl10XnE1cqG9FB0QyqPYjulbrz4coP+WrDV0zaNIl7yt9Dt4rdCPfXo4hrcSYtw+oIyl2YKw6ZobKh84krlUOxIbG8UO8FprafSsNiDRm9ejQtJ7dk9KrRnE47bXU8j7N4y2EAikQEWpxEWUvIYtwrpbKkRVxdtbjwOF5r+BrftP2G6oWq8+7yd2k5uSVfrPuCsxlnrY7nMVLOphMe6EtcQW2Z7NVE9EhcXTMt4uqalYssx/8a/4/PW35OQkQCI5aMoPXk1nz717ekZaZZHc8j+OggLwr9GVDXTou4um6JhRL5uPnHjG42mpigGJ5b/Bwdpnbguy3fkWkyrY6nlAfQI/GrsX//fu6++27i4+OpUaMGderUYcqUKVe9nW3btvHVV19dWB47diyPPvpobkZ1OS3iKtfULlKbL1p9wXu3vEeATwADfx3IbdNvY96OeRe6U6l/bD98Wic+Uc5L4vr/I6eMMXTo0IEGDRqwZcsWkpOTmTBhArt27brqbV1axK9XRkbeN1bVIq5ylYjQqHgjvmn7Da81eI30zHT6LOhD19ldWbZ/mdXx3Mq+46mULRxmdQxlOf1D7mrMnz8fPz8/HnzwwQvrSpYsyWOPPUZGRgb9+/enZs2aVKlShY8++ghwFP7+/ftTqVIlKleuzMSJEwEYOHAgv/76K4mJibz11lsA7NmzhxYtWpCQkMBTTz114TN++OEH6tSpQ/Xq1enUqdOFgWRKlSrFgAEDqF69Ot988w2NGjWib9++JCUlUb58eZYsWcKtt95KQkICgwcPzvV/D+1iplzCJjZaxLWgSckmTP97Ou8vf59uc7rRqHgj+lbvS3yEDuUKEOKv008q8MTT6SP+HMGGIxtydZvlIssxoNaALF+zdu1aqlevftnnPvnkE8LDw1myZAlnz56lXr16NGvWjGXLlrFixQpWrlzJoUOHqFmzJg0aNGD48OG8/vrrzJw5E3CcTl+xYgXLly/H39+fsmXL8thjjxEYGMiLL77I3LlzCQ4OZsSIEbz55psMGTIEcHRzW7bMcZDy4Ycf4ufnx9KlS3nnnXdo3749ycnJREZGUrp0afr27Zur/de1iCuX8rH5cGvCrbSMc7ReH7NmDB2nd6TjDR15OPFhCgUVsjqiUtbS1unX5ZFHHmHhwoX4+flRsmRJVq1axbfffgvA8ePH2bRpEwsXLqRz587Y7XZiYmJo2LAhS5YsISzsv2fCGjduTHi4Y+yLChUqsH37do4dO8a6deuoV68eAOfOnaNOnToX3nPnnXf+axvt2rUDoHLlylSsWJEiRYoAEB8fz86dO7WIK88T6BNIryq9uL3M7YxaNYoJGyfw3Zbv6FqhKz0r9STEL8TqiHkuLUMb/SkAgXOeN8Z3dkfMrlKxYkUmTZp0Yfn999/n0KFDJCUlUaJECd577z2aN2/+r/fMnj07x9v39/9nXne73U56ejrGGJo2bcr48eMv+57g4H93Ez2/DZvN9q/t2Ww20tPTc5wlJ/SauMpTBQIKMKDWAKZ3mM7NJW5m9OrRtJrcii/Xf0lahnd1S9tzPJWCIf7Zv1DlbxHF4dBfVqfwGLfccgupqamMHDnywrrTpx2DTTVv3pyRI0eSlub4XfLXX3+RkpJC/fr1mThxIhkZGRw8eJBffvmFWrVqERoaysmTJ7P9zNq1a7No0SI2b94MQEpKCn/95R7fmRZxZYniocV5tcGrTGgzgTKRZRj+53DaTm3L7K2zvaZbmjGGEH89Geb1QgpDpg7Bm1MiwtSpU/n555+Ji4ujVq1adOvWjREjRnD//fdToUIFqlevTqVKlXjggQdIT0+nY8eOVKlShapVq3LLLbfw6quvUrhwYapUqYLdbqdq1aoXGrZdTnR0NGPHjqVz585UqVKFOnXqsGFD7rYHuFbiCV1/kpKSzNKlS62OoVzEGMNve37jreS32Hh0IxWiKtCvRj9uLHKj1dFcKmHQLHrVj+epFuWsjqKs9OUdcGo/PPCz1UmytX79esqXL291jHzncv+uIpJsjEnK7r16JK4sJyLUi63H122/5uWbXuZo6lHu/+F+Hpz7IBuPbLQ6nlKul55qdQLlobSIK7dhExttS7dlRscZPJn0JKsPrqbTjE4MWjiI/Sn7rY6nlGsEhMHBDZBy2OokygNpEVdux9/uT7eK3Zh16yy6V+zO7K2zaTu1LR+u/JAz6WesjqdU7opr4LhPPWZtjhzyhEuwnuR6/z21iCu3Fe4fTr+kfkzrMI2bYm/i/RXv03ZKW2Zumek1jd+UF/AJsDpBjgUEBHD48GEt5LnEGMPhw4cJCLj2nwGXNY0VkeLAZ0AMjuGIRhlj3hGRSGAiUArYBtxhjDnqqhzK8xUPLc6bjd5k6b6lvLrkVZ7+9WnGrx/PU7Weomp0VavjKeU1ihUrxq5duzh48KDVUfKNgIAAihUrds3vd2X/lnTgCWPMMhEJBZJF5EegOzDPGDNcRAYCAwFrRg1QHiWpcBIT2kxg+t/TeXfZu9wz6x5axrWkb/W+FAkpYnU8pa6NOE+IbvgO6j1ubZZs+Pr6EhcXZ3UMdRGXnU43xuw1xixzPj4JrAdigfbAOOfLxgEdXJVB5T82sdHhhg7M7DiT3lV6M3/HfNpObcv/lv+P02mnrY6n1NW7oYnj/qB79DtWniVPromLSCmgGvAHEGOM2et8ah+O0+2Xe09vEVkqIkv11I26VJBvEI9Ve4wZHWZwS4lb+GjVR7SZ0oapm6fq9XLlWQIjILy41SmUh3J5EReREGAS0McYc+Li54yjdcRlW0gYY0YZY5KMMUnR0dGujqk8VJGQIrza4FU+b/k5hYML8+yiZ+n8XWeS9ydbHU0ppVzOpUVcRHxxFPAvjTGTnav3i0gR5/NFgAOuzKC8Q2KhRL5o9QWv1H+FQ2cO0X1Od/r91I9dJ3dZHS1L6Znaylc5bf0FvGz+AHX9XFbERUSAT4D1xpg3L3pqOtDN+bgbMM1VGZR3sYmNNvFtmNFhBg9XfZiFuxfSfmp73lv+nlv2L48M9mP3MffLpSxQoBQc3wl7VlidRHkYVx6J1wO6AreIyArnrRUwHGgqIpuAJs5lpXJNkG8QDyU+xIwOM2hSsgmjVo2iw9QOzNs+z636t4YH+pKpR+IKoH4/x73RiVDU1XFZFzNjzEJArvB0Y1d9rlLnxQTHMKLBCDqV6cTLf75Mn5/6ULdoXZ6u9TSlwktZHU8ppa6bjtim8r2kwkl83eZrBtQcwKqDq+g4vSNvJ7/tFl3SMt3ozIByA6knsn+NUhfRIq68go/Nh3sq3MOMjjNoFdeKT9Z8Qrup7ZizbY5lp9gD/XxYt1d/aSvAP8xxP+k+a3Moj6NFXHmVgoEFeemml/is5WcUCChA/5/70+vHXmw5tiXPs1QoEsap1PQ8/1zlhoolQZmWOiWpumpaxJVXqlaoGhNaT+CZG59h3eF13Db9Nt5Y+gYpaSl5lsHXfqUmI8orRZflys2IlLo8LeLKa9ltdjqX68zMjjNpd0M7xq4dS9spbZm1ZZZbtWJXSqkr0SKuvF5kQCTP1X2OL1t9SXRQNAN+HUDP73uy+ehml36uTYSjp9M4fkYH+FCACGSchV9eszqJ8iBaxJVyqhJdha9afcWQOkPYdGwTnWZ24t1l75LqouuU1UpEALB613GXbF95mMQujvtVX1ubQ3kULeJKXcRus9OpTCemd5hOq7hWjF49mtum38bve3/P9c8qGhGY69tUHqxgAlTsaHUK5WG0iCt1GZEBkbx000uMbjYagF4/9OKZX5/hSOoRi5MppdQ/tIgrlYXaRWozuf1kelfpzexts2k3tR1TNk3J1YZv2w7nXYt45QFOH4HdOgufyhkt4kplw9/uz2PVHuPbtt8SHx7PkN+G0PP7nmw9vvW6thvrPJ2+YINO5KecitWE1OMw7VGrkygPoUVcqRwqHVGasS3GMrTOUDYe3cht029j5IqRnMs4d03bKxoRSJVi4WRodzZ1Xp1HoHxbnZJU5ZgWcaWugk1s3F7mdqZ3mE6TEk34YOUH3Db9NpbsW3JN29OhPZRS10OLuFLXoGBgQV5t+Cojm4wkLTONnt/3ZMiiIRw/e/Xdxc6c0+kn1SUy0yD92s7wKO+iRVyp63BT7E1MaT+FHpV6MP3v6Y5JVbbmfFIVm034Y+sRNh846eKkymP4BcHRbTCyjtVJlAfQIq7UdQr0CaRfjX5MbDORosFF6f9Lf/r+1JdDZw5l+97udUsBcODkWRenVB6j+ctQoQMc3W51EuUBtIgrlUvKRpbl81af07dGX37d9SsdpnVg5paZWR6Vx4QF5GFC5RECwiEy3uoUykNoEVcqF/nYfOhZqSfftPuGUmGlePrXp3l8/uMcOK3dyJRSuU+LuFIuEB8ez7gW43gy6UkW711Mh2kdmLZ52hWPysf/uTOPEyq3JuJo3PZ1NzhzzOo0yo1lWcRFpJiIPCki00RkiYj8IiIfiEhrEdE/AJTKgt1mp1vFbkxqN4mEiAQGLxrMw/MeZl/KvguvqRQbTqi/D39uPWxhUuV2Kt0O8Y1g3VTYv9bqNMqNXbEQi8inwBjgHDAC6Aw8DMwFWgALRaRBFu8PEJE/RWSliKwVkeec6+NE5A8R2SwiE0XELzd3SCl3UzKsJJ+2+JSBtQaSvD+ZjtM6MnnTZIwxhPj70LpKEasjKncTUwFu6md1CuUBsjqafsMY08wY864x5jdjzGZjzBpjzGRjzGNAI2BPFu8/C9xijKkKJAItRKQ2jj8I3jLG3AAcBe7LnV1Ryn3ZxEaX8l2Y1HYS5aPKM/S3oTw490H2ntprdTSllAe7YhE3xqzJ6o3GmHPGmM1ZPG+MMaeci77OmwFuAb51rh8HdLiqxEp5sOJhxfm42ccMunEQyw8sp8O0DmxPm8f+E6kcOOmaecuVh9v0A5zShpHq8rK9ri0ibURkuYgcEZETInJSRE7kZOMiYheRFcAB4Efgb+CYMSbd+ZJdQOwV3ttbRJaKyNKDBw/mbG+U8gA2sXFXubuY0n4KVaKrsObsGAKLf8pLs/+wOppyJxHFHd3NFr0N8563Oo1yUzlpnPY20A2IMsaEGWNCjTFhOdm4MSbDGJMIFANqAeVyGswYM8oYk2SMSYqOjs7p25TyGLEhsYxqOopBNw7CJ2grv54ZyLzt86yOpdxFZDw8tQ0iSkK6DgakLi8nRXwnsMZcxwTKxphjwAKgDhAhIj7Op4oBu691u0p5OhHhrnJ3EXbkKQIkmj4/9eHZRc+SkqZzjCvAZgPtCKSykJOfjqeAWSLytIj0O3/L7k0iEi0iEc7HgUBTYD2OYn6782XdgGnXFl2p/MOeEUMF8wy9Kvdi+t/TuW36bSw/sNzqWMpdZJyFzEyrUyg3lJMi/hJwGggAQi+6ZacIsEBEVgFLgB+NMTOBAUA/EdkMRAGfXEtwpfITX7swd/1hyvh1YmyLsQB0n9Odd5e9S5rOLe3dfANh3TR4/QZI0fEE1L/5ZP8SihpjKl3tho0xq4Bql1m/Bcf1caWU07udq9H63YX8fTCFFpWqMandJEb8OYLRq0ezcPdChtcfTnyEjqftle74DH4fCUs/gZQDEBxldSLlRnJyJD5LRJq5PIlSXuyGQiH/Wg72Deb5es/zdqO32Zuylztm3sFX67/K8RSnKh8pmABx9a1OodxUTor4Q8AcETlztV3MlFLXp3HJxkxuN5mahWvyyp+v8NDch3QyFaXUBdkWcWeXMpsxJvB8FzMgPA+yKeV15qzZx84jp/+1Ljoomg8af8CgGweRvD+ZW6ffyrwd2hXNK83qDysnWJ1CuZGcDPby/CXLNuALlyVSygv5+9jpVqckq3cf56e//ju40fmuaBPbTiQ2JJY+C/rwyh+vcC7jnAVpVZ4rUQcqdoT9a2Dh21anUW4kJ6fTi4vI0wAi4g9MATa5NJVSXujRWxKyfU18eDyft/yce8rfw1cbvuKeWfew48SOPEinLBVaGDqNhVJ6bVz9W06KeE+gsrOQzwAWGGOGuTSVUuqK/Ox+DKg1gHdvfpfdp3Zzx8w7mL11ttWxlFIWyGoq0uoiUh1HN7F3gDtxHIH/4lyvlHKBzftPci49+4E9bi5xM9+2/ZaEiASe+uUphv02jNR0nUQl3ztzFNZNh9TjVidRbiDLqUgvug3HMW1oBefy666PppR3CQ3wITLYj3GLt/P10p05ek+RkCKMaTGG+yrdx6RNk+j8XWe2HNvi4qTKMlGl4dQ++LorzH/R6jTKDWQ1FenNWdxuycuQSnmDAF87c/s1BCA1LSPH7/O1+dKnRh8+bPIhR1KPcNd3dzFts45mnC81HgpPbYWQGDh3OvvXq3wvq9Pp94iIZPF8aRG5yTWxlPJOvvYr/pfLVr3YenzT9hsqFazE4EWDeebXZzidpr/o8xURCIoEm6/VSZSbyGrY1ShghYgkA8nAQRzjp98ANAQOAQNdnlAplWOFggoxuuloRq0axciVI1l9aDWvN3ydspFlrY6mcltmOhjjKOzKa2V1Ov0doDowHogGGjuXdwNdjTG3GWO0q5lSucjHZkMEXp2zka+X5Oy6+KXsNjsPJT7Ex80+JiUthS6zujB189RcTqos5eMHqybAK8Vg9bdWp1EWyrKLmTEmwxjzozFmmDHmAWNMH2PMR8YY7ZiqlAsE+tn5tHtN7DZhzZ7ra31cq0gtvmn7DYnRiTy76FleWPyCDg6TX9w+Bpq/DOmpsHel1WmUhXS2eaXcTKOyhQjwzZ3/mlGBUXzY9EN6VOrB1399TY85PdiXsi9Xtq0sVLQa1HlEr40rLeJK5Xc+Nh/61ejHm43eZPOxzdw5807+3Pun1bGUUrlAi7hSbmrh5kN8vzb3jpqblmzK+DZlW5zHAAAgAElEQVTjCfcPp9ePvRi7ZqxObZofbJgJ0x+DvausTqIskJMJUPxF5G4ReUZEhpy/5UU4pbzV3TeW4ODJs7wzN3fbjsaHxzO+9Xgal2jMG8lv8MTPT5CSlpKrn6HyUK37wT8Uln8ByZ9anUZZICdH4tOA9kA6kHLRTSnlIv2bl6N2fBSuOE4O9g3mjYZv8ESNJ5i3Yx73zLqHnSevrSW8slizF+GBXyCooKO7mfI6WfUTP6+YMaaFy5MopfKMiNC9UnfKRpblyZ+fpPN3nXmz4ZvUKlLL6mhKqauQkyPx30SkssuTKKX+42RqGpsPnHTZ9usUrcP41uOJCoii94+9mbBhgss+S7nY0a3w9wI4c8zqJCoPZTXs6moRWQXcBCwTkY0isuqi9TkiInYRWS4iM53LcSLyh4hsFpGJIuJ3/buhVP5TJDyAXUfP0OTNXzhwwnWzk5UIK8GXrb6kXmw9XvrjJV5Y/AJpGWku+zzlAmFFYctP8HkH+LaH1WlUHsrqdHqbXPqM/wPWA2HO5RHAW8aYCSLyIXAfMDKXPkupfGNo24qUjArmhZnrSDmX8wlRrkWIXwjv3vwu7y1/j0/WfMKW41t4o9EbRAZEuvRzVS6570c4vhMm94azrjtzo9xPVsOubjfGbAdePP/44nU52biIFANaAx87lwW4BTg/TuA4oMP17IBS+ZXdJkQF592JKrvNTp8afRhefzirD63m7u/uZuORjXn2+eo6+Pg5pikNCMv+tSpfyck18YoXL4iIHaiRw+2/DTwFZDqXo4Bjxph05/IuIPZybxSR3iKyVESWHjx4MIcfp5S6Xq3jWzO2xVjSMtLoOrsr87bPszqSuhraSt2rZHVN/GkROQlUEZETInLSuXwAR7ezLIlIG+CAMSb5WoIZY0YZY5KMMUnR0dHXsgmlPJ7d5pih6raRvzFj5Z48+9xKBSsxoc0EEiIS6PNTHz5Z/YkODOMJbL6weym8UgI+aQ7pOlZ+fpfV6fRXjDGhwGvGmDBjTKjzFmWMeToH264HtBORbcAEHKfR3wEiROT8tfhiOGZFU0pdxi3lCvFsmwqcOpvO0m1H8vSzo4OiGdNiDC3jWvL2srd54fcXSM9Mz/6NyjpNhsItz0LRRNj5O5w5anUi5WI5OZ3+jIjcKiJvisgbIpKja9jGmKeNMcWMMaWAu4D5xpguwALgdufLupGDo3qlvFWwvw/33RRHkJ/dks/3t/szvP5welXuxTd/fcOj8x/VEd7cWUxFaPAkVGhvdRKVR3JSxN8HHgRWA2uAB0Xk/ev4zAFAPxHZjOMa+SfXsS2llIvZxMbj1R9naJ2h/L7nd7rP6c7+lP1Wx1JKkbMifgvQ3BjzqTHmU6CVc12OGWN+Msa0cT7eYoypZYy5wRjTyRhz9upjK+V9Fm85zNhFWy27Nn17mdt5v/H77Dixgy6zumjLdU8wZyD8OBSObLU6iXKRnBTxzUCJi5aLO9cppfJI+6pFOXzqHMNmrOPQKesaK9WLrcdnLT/DYOg2pxu/7f7NsiwqC8VvhNgk2PkHLHobksdanUi5SE6KeCiwXkR+EpEFwDogTESmi8h018ZTSgE8174STzQrC0Cmxa3Ey0aW5ctWXxIbEssj8x5hxt8zLM2jLqNwJeg1D/qtA98gMK4dLEhZJycToOi0o0qpfykcXJhxLcbxfwv+j2cWPsOxs8foWqGr1bGU8jrZHokbY34GtgG+zsd/AsuMMT87l5VSeWjtnuOkpll/ZBXiF8IHTT6gacmmvLrkVd5Oflv7kruro9tgxx9wUhsk5jfZFnER6YVjmNSPnKuKAVNdGUop9V+Rwb4A9By7lP7f5ngOIpfyt/vzWoPX6FSmE5+s+YShvw3VvuTuJqggrJ8BY5rBWxXhdN6ON6BcKyfXxB/BMXDLCQBjzCagkCtDKaX+q0WlIsx7oiEJhUI4dtp9RuKy2+w8W/tZHqz6IFM2T6HfT/1ITXfdrGvqKj20EHr/DHUfg8w0OHfK6kQqF+WkiJ81xlz4jeEcbU3PmSllgdLRIYQG5KQpS94SER5JfISnaz3NTzt/4oEfH+DEuRNWx1IAAeGOEdyiy1mdRLlATor4zyLyDBAoIk2BbwBtjqqU+o+7y9/NiAYjWHVoFT3m9ODQmUNWR1IqX8tJER8IHMQxYtsDwCxgsCtDKaWuzG4Tft9ymOZv/cKyHe43NnbLuJa83/h9dp7cSfc53dmXss/qSApAnEP3fngTvFcDFrxsbR6VK3LSOj0TR0O2h40xtxtjRhttgqqUZfo3L0fnWiXYuP9knk+KklN1i9ZlVNNRHD5zmG6zu7Hz5E6rI6myLeCWwVC5E6SfhXU6bUV+kNVUpCIiw0TkELAR2CgiB0VE+40rZaFacZEMaOH+1zcTCyXycfOPSUlPofvs7mw5vsXqSN4tsAA06A+t34DY6lanUbkkqyPxvjhapdc0xkQaYyKBG4F6ItI3T9IppTxaxaiKjGk+hnSTTo85Pfjr6F9WR1IqX8mqiHcFOhtjLoycb4zZAtwD3OvqYEqp7M1df4Bxv23jbLr1g79cSZkCZRjbYiw+Nh96ft+TDUc2WB1JAZzcC3Oehl9eg4M6mY2nyqqI+xpj/tO01BhzEPB1XSSlVHYCfe3UTyjIuj0nGDp9Lcnb3K+B28XiwuMY22IsgT6B3P/D/ToDmtXiGoJ/GCSPg/kvwk/DrU6krlFWRTyr0STcZ6QJpbyQzSZ8ft+NjOtZE4D0TPdva1o8tDhjmo0h0CeQ+364Twu5lWreB33XwKA9jv7jOsqex8qqiFcVkROXuZ0EKudVQKVU/lE8TAu5+xGrA6jrcMUiboyxG2PCLnMLNcbo6XSl3Mj2I6fdaijWrGghd0OnD8OeFXBsB2RmWp1GXYWcDPailHJToQGOv6efnbqGpBfnsuvoaYsT5cz5Qu5v96f3j721+5mVAsJh+yIY1RDergxztRexJ9EirpQHKxMTytx+DXn8lhtIzzQcTUmzOlKOFQ8rzsfNPgag1w+9dEAYq9w9AXrMhju/hOBoOKkj7HkSLeJKebgbCoVQpViE1TGuSVx4HKOajuJsxll6/dBLh2i1QmABKFkXyrcB/1Cr06ir5NIiLiLbRGS1iKwQkaXOdZEi8qOIbHLeF3BlBqWUeysbWZaPmnzE8bPH6fVDL500RamrkBdH4jcbYxKNMUnO5YHAPGNMAjDPuayUug7ibGD80JfJ3Dd2CSdSPee0OkDFghX5oMkH7EvZx0NzH+LkuZNWR/JOYoP1M+C9JPi4KSSPtTqRyoYVp9PbA+Ocj8cBHSzIoFS+UisukgcbliY2IpB5Gw6w+cApqyNdtWqFqvFmozfZfHQzj89/nLMZZ62O5H2aDIPEu6FwJTj0F6z6xupEKhuuLuIG+EFEkkWkt3NdjDFmr/PxPiDmcm8Ukd4islRElh48eNDFMZXybKEBvgxsWY6HGpW2Osp1qV+sPi/e9CJL9y/lqZ+fIl0HIclb5dtCm7eg01iIqWR1GpUDri7iNxljqgMtgUdEpMHFTzqnNL3sUFPGmFHGmCRjTFJ0dLSLYyql3EXr+NYMrDWQ+Tvn88LvL6AzHyt1ZT6u3LgxZrfz/oCITAFqAftFpIgxZq+IFAEOuDKDUt7om6U7+fvAKdpWLUqAr93qOFetS/kuHE09ykerPiI6MJpHqz1qdSTvdHQrLHgZAiKgcGWIq291InUJlxVxEQkGbMaYk87HzYDngelAN2C4815nplcql5SKCiY2IpAJS3Yy/s+dhAX60rxiYatjXZNHEh/h0JlDfLTqI4qGFOXWhFutjuRdStSG/avh5xGOZZ9AGKxdAN2NK0+nxwALRWQl8CfwnTFmDo7i3VRENgFNnMtKqVxQqmAwiwbewuz/cxwxpWV47hCaIsKg2oOoF1uP5xc/z8LdC62O5F0aPwsDd8CQI1D3McjwjGF9vY3LirgxZosxpqrzVtEY85Jz/WFjTGNjTIIxpokx5oirMijlreySPya18LX58kbDN0gokMATPz3B+sPrrY7kfWx2sPtbnUJdgY7YplQ+duDEWY6f8aw+45cK9g3m/cbvE+YfxiPzHmF/yn6rI3kpAwfWw4k9kHbG6jDKSYu4UvlQoJ+jMdvzM9dR9bkfGPfbNmsDXadCQYX4oPEHpKSl8Nj8xziTrkUkT/kFg8mED2rDm+XhlWKwfbHVqRRaxJXKl4oVCGLGozfxbudq+PnY2HHEM2Y3y0pCgQRea/gaG45sYNDCQWQaz73e73FqPwxdpzr6j988GDLT4fguq1MptIgrlW9VLhZOu6pF8bPnn//mDYo14ImkJ/hx+4+8v+J9q+N4D98AKH0zVOzouCm34dJ+4kopldvurXAvW45vYdSqUZQOL02r+FZWR1LKMlrElcrnBJiyfDfr9pygaYUYet4UZ3Wk6yIiDL5xMNuOb2Pob0OJj4inXGQ5q2N5j/M9H34cAn98CAHhUKYF3Ng76/cpl8g/59mUUpf1ZPOy3BgXyaYDpxizaKvVcXKFr92XNxq9QZh/GH0W9OFY6jGrI3mPAqWg7uNQvBYEhMHeFY5iriyhRVypfK5b3VKMvKcGDcoUtDpKrioYWJC3Gr3FgdMHeOqXp8jIzLA6knew2aHZC3DHOOg6BeJvtjqRV9MirpTyWFWiqzC49mAW713Mu8vftTqOUnlOr4kr5UVOnElj3G/biI0I5OZyhbDbPH9kt1sTbmXtobWMWTOGxOhEbi6hR4Z57swRWPi24/p4YAG4oQn4h1idyivokbhSXqJ84TBOnU1n6PS13P/ZUv7cmn9GPB5QawAVoiowaNEgdp/abXUc71K4EqSegLlDYWYf+KYbJI+1OpXX0CKulJfo1SCeTS+1YlzPWgCkpuefa8h+dj9eb/g6GOj/c3/SMjx7qFmPclNfGHIYntkDfVY71umIenlGi7hSXsRuE8IC8udVtOKhxXm+3vOsPrSaN5PftDqOdxFxDM0aWsTqJF5Hi7hSXur46TTO5qOjcYAmJZvQpXwXvlj/BQt2LLA6jvc6cwxOHYC0VDDG6jT5mhZxpbxMgK9jcpQ+E1dQdvAc+k1cYXGi3NWvRj/KRZZj6G9DOXj6oNVxvIvYwO4Hi/8HryfASzEwoiQc/tvqZPmWFnGlvEy5wqF8fl8tXu5YmYRCIazfd9LqSLnKz+7HiPojOJN+RidKyWs2O/T8HjqOglavQ40ekHocju2wOlm+pUVcKS8jItRPiObuG0tQqmCw1XFcIj4inv41+7N472I+X/e51XG8S2x1qHon1OoFVe60Ok2+p0VcKZUvdSrTiZuL38w7y95h45GNVsdRyiW0iCvl5bYeOkXXT/6g78QVrN97wuo4uUZEeK7uc4T6hTJ40WDSMrXbmWVmPwXj2sGELjCjD5zOP2MUWE2LuFJe7I6k4tQtXZCTqelMWb6b6Sv3WB0pVxUIKMCQ2kPYcGQDH6/62Oo43qdwJUjsAuHFIe0MHFgHyZ/CjsVWJ8s3XNphVEQigI+BSoABegIbgYlAKWAbcIcx5qgrcyilLq9phRiaVogBoMyg2RancY3GJRvTOr41o1aNolHxRpSPKm91JO/hHwodPvhnee9K+KiBdXnyIVcfib8DzDHGlAOqAuuBgcA8Y0wCMM+5rJRSLvN0raeJCIhg0KJBOpqbyldcVsRFJBxoAHwCYIw5Z4w5BrQHxjlfNg7o4KoMSqmrs2b3cSYv28VPGw+QmpZ/BoIJ9w9naJ2hbDq6iY/X6Gl1y22cDcnjYM0k+Ot7OKX9+a+VK0+nxwEHgU9FpCqQDPwfEGOM2et8zT4g5nJvFpHeQG+AEiVKuDCmUgqgVMEgft10iF83HQKgf/OyPHLzDRanyj2NijeiZVxLRq0aRbOSzSgdUdrqSN4nJAb8QmD5547beQnNoMs31uXyYGJcNCSeiCQBvwP1jDF/iMg7wAngMWNMxEWvO2qMKZDVtpKSkszSpUtdklMp5ZCZaTiRmsbR02k0efNnHmwYT//m5ayOlasOnzlM+2ntKRVWinEtxmG32a2O5H0y0uHcKectBSb3Ar9Q6PGd1cnciogkG2OSsnudK6+J7wJ2GWP+cC5/C1QH9otIEQDn/QEXZlBK5ZDNJkQE+RFXMBjPn2X88qICoxhQcwArD65kwsYJVsfxTnYfCIyA8GIQXdZRwNU1c1kRN8bsA3aKSFnnqsbAOmA60M25rhswzVUZlFLXLjUtk7SM/DdkaZv4NtQrWo93lr3DnlP5q0udx8o455g0RRsdXjWXnU4HEJFEHF3M/IAtQA8cfzh8DZQAtuPoYpZlz389na5U3qowZA6nzzkatgX52bm1eiwvdqhscarcs+fUHjpM60D1mOqMbDwSkfx67sEDfN4R/p7/z7LN1zGtaeNnoeb91uWyWE5Pp7u0n7gxZgVwuRCNXfm5SqnrM7ZHLdbvPcHxM2lMXraLpdvy11AORUOK8n/V/4/hfw5n5paZtC3d1upI3qvla7B9IZw7DWkpjuvkf34Mu5K9uojnlEuLuFLKM9WKi6RWXCTg6Ha248hpixPlvrvK3sXsrbN5dcmr1IutR2RApNWRvFPBGxy3i62eZE0WD6TDriqlvJLdZmdYnWGcSjvFq0tetTqOUtdEj8SVUtnaceQ0949bSligD9Eh/jzUqDQRQX5Wx7puNxS4gV6VezFy5Uhax7WmfrH6VkdS5/09D764HXwDHdfIfYMgoSmUbWl1MreiR+JKqSy1SyxKpdhwdh87w6LNh/joly0s3HzI6li55v7K9xMfHs8Lv7/A6bT8d9nAI9XoBlEJcPoQHPoLti1yDA6z4GWrk7kdPRJXSmWpTZWitKlSFIDNB07S5M1fcGGnljznZ/fjubrPce/se3lv+XsMqDXA6kiqwZOO28XGd4bjO63J48b0SFwp5fUSCyVyZ9k7+XL9l6w6uMrqOErlmB6JK6Wu2p9bj+DnYyM0wIdSUcEUjQi0OtJ161OjDwt2LmDob0P5us3X+Np9rY6kLnX6CKwYD35BjmvkvoGO8dgLJlidzDJaxJVSORYR5Ie/j43Pf9/O579vBxyDwawe1hy7zbMHTAn2DebZ2s/y6PxHGbNmDA9UfcDqSOpiYUVh4yyY+uB/n3t0qdcWci3iSqkcKxjiT/KzTTly6hwnUtP44vftTFiyk0xjsOeDEdcbFm9Iy1It+WjVRzQt2ZT4iHirI6nzWr4GDfpD2mlIO+O4bf0F5j0HqSesTmcZvSaulLoqIf4+lIgKolJsOMUKeP5p9EsNqDWAIN8ghi0eRqbJf2PHeyybDUILQ2Q8xFSEYkkQU8nqVJbTIq6Uum6Z+ai5elRgFP2T+rP8wHK+2ahzXHuEjHPkqy4TV0FPpyulrpmP3XEcUHbwHEL8fQjx96Fl5cIMbVvR4mTXp13pdszcMpO3lr1Fw+INKRxc2OpI6nLszhL2aQtA/mns5hsElW+HJkMtjZcXXDqLWW7RWcyUck+HT51l6oo9nDiTxsnUdOau34+PXZj/RCOro123nSd3cuu0W6ldpDbv3vKuznTmjtLPwsrxjlbraWf+uV7+1xwILggP/GJ1wmvmFrOYKaXyt6gQf+67Ke7C8oGTqazbmz8aGRUPLc6j1R7l9aWv88P2H2heqrnVkdSlfPyhRvf/rv9qN5zcm+dxrKDXxJVS6gq6lO9ChagKvPzHyxw/e9zqOEr9hx6JK6Vy1f7jqfSZsJyQAB9C/H1pkFCQujcUtDrWNfGx+fBc3ee4a+ZdvLH0DZ6v97zVkVROHdkGX3dzXicPcN4HQZU7/zv1qQfTIq6UyjVNysew9VAKy3ce41RqOkdPn2PR5kPMeOwmq6Nds3KR5ehesTufrPmEVvGtqF2kttWRVHbKtYYTe+DAOkhLdVwrT0+Fc6fg7AloOcLqhLlGG7YppVzm/nFL2XPsDLP+z7On+ExNT+X2GbeTaTKZ1G4SgT75r3+8VxgRB5Vug9avW50kWzlt2KbXxJVSKhsBPgEMrTOUnSd3MnLFSKvjKHWBnk5XSrnUidQ0Fmw4QLCzH3nxyEBCAzxvcpGahWtyW8JtjFs3jhZxLagQVcHqSOpaHNkCG2Y5rpP7BDr6lfsFQ2Rpx6hwHsZlRVxEygITL1oVDwwBPnOuLwVsA+4wxhx1VQ6llHWigv3YdfQMPcYuubDuhkIhzO3X0MJU165fUj9+3vUzQ38byletv8LX5nl/jHi14ILw9zzH7VJNhsFNffM60XVzWRE3xmwEEgFExA7sBqYAA4F5xpjhIjLQuTzAVTmUUtZ5sWMl7q8fx6mz6aSczWD0r1tYs9tzu2qF+YUx6MZB9P2pL5+v+5yelXpaHUldjV7zHQ3e0k47GrylOydS+aY7nD5sdbprklen0xsDfxtjtotIe6CRc/044Ce0iCuVL/nabSTEhF5YnrN2r0cXcYAmJZvQuERjPljxAU1KNKFEWAmrI6mc8g+F6LL/XW/z3CvLeXUB4C5gvPNxjDHm/FA6+4CYy71BRHqLyFIRWXrw4MG8yKiUUjnyzI3P4Gvz5bnFz+EJPXxU/uXyPz9ExA9oBzx96XPGGCMil/0fYIwZBYwCRxczl4ZUSuUJuwiHU85Raej3BPvbCfH3oWhEIKO6JhHoZ7c6Xo4VCipEv6R+PL/4eaZunkrHhI5WR1LXQ+zw2/9gyZiLGrw572v1ghrdrE54RXlxDqElsMwYs9+5vF9Eihhj9opIEeBAHmRQSrmBbnVLER7kx6nUdFLOprPpwEl+3XSI3cfOcEOhEKvjXZXbEm7juy3f8drS16hfrD4FAz1zVDoFdHgf9q5yDAiTduaf+83zYONsry/infnnVDrAdKAbMNx5Py0PMiil3EB8dAj9mpa5sDx95R6W7VhuYaJrZxMbQ+sM5fbpt/PKH6/wRqM3rI6krlWF9o7bpT50/0GKXHpNXESCgabA5ItWDweaisgmoIlzWSmlPE5ceBwPVn2QH7b/wPwd862Oo7yQS4/EjTEpQNQl6w7jaK2ulFIAvDX3L4qEBRAS4EN0qD+dahTHz8czBt7oXqk7c7bN4aXfX6Jm4ZqE+oVm/yblOfatgumPOwaF8Q38Z4CYcq0hqrTV6XTENqWUdcoXDqVsTCh/bj3CqdR0zqRlAFA6OoTa8VHZvNs9+Np8ea7uc3SZ1YW3k9/m2TrPWh1J5ZaEprBmEvw1559+5RnnHM8d2gjt37c2H1rElVIWSogJ5fu+DS4s/7HlMHeO+p30DM/qkFKpYCXuKX8Pn637jFbxragRU8PqSCo3NB7iuF0sMwPeSYSMdGsyXcIzzlcppbyCzSZWR7hmjyQ+QmxILMN+G8bZjLNWx1GuYrODuM/PqRZxpZTb2XTgJH8fPEXKWfc42smJIN8ghtQewrYT2xi1apTVcZSrndoHO/+EA+vh+C7IzLQkhp5OV0q5jdAAx6+k52asAyAswIc/BzUhwNczBoKpG1uXdqXbMWb1GJqXak6ZAmWyf5PyPAHhsOUnx+28mr0smadcj8SVUm6jXOEw5vZrwGc9a3Fb9WKcSE0n1dnYzVP0T+pPmH8Yw34bRkamZ2VXOXTvNOj5PXSZBLd/CmGxcHJv9u9zAS3iSim3ckOhUBqUiaZSbJjVUa5JREAEA2oOYPWh1YzfMD77NyjPExQJJWpDQhOodCsEFrAsihZxpZTKZS3jWlI/tj7vLn+X3ad2Wx1H5WNaxJVSKpeJCM/WfhZBeGHxCzrTmXIZ8YQfLhE5CGy/zFMFgUN5HMdVdF/cV37aH90X95Sf9gXy1/5YtS8ljTHR2b3II4r4lYjIUmNMktU5coPui/vKT/uj++Ke8tO+QP7aH3ffFz2drpRSSnkoLeJKKaWUh/L0Ip6fhkXSfXFf+Wl/dF/cU37aF8hf++PW++LR18SVUkopb+bpR+JKKaWU19IirpRSSnkojyziItJCRDaKyGYRGWh1npwQkeIiskBE1onIWhH5P+f6SBH5UUQ2Oe8LONeLiLzr3MdVIlLd2j34LxGxi8hyEZnpXI4TkT+cmSeKiJ9zvb9zebPz+VJW5r6UiESIyLciskFE1otIHU/9XkSkr/Pna42IjBeRAE/6XkRkjIgcEJE1F6276u9CRLo5X79JRLq50b685vw5WyUiU0Qk4qLnnnbuy0YRaX7Rest/311uXy567gkRMSJS0Lnscd+Lc/1jzu9mrYi8etF6t/1eADDGeNQNsAN/A/GAH7ASqGB1rhzkLgJUdz4OBf4CKgCvAgOd6wcCI5yPWwGzAQFqA39YvQ+X2ad+wFfATOfy18BdzscfAg85Hz8MfOh8fBcw0ersl+zHOOB+52M/IMITvxcgFtgKBF70fXT3pO8FaABUB9ZctO6qvgsgEtjivC/gfFzATfalGeDjfDzion2p4Pxd5g/EOX/H2d3l993l9sW5vjjwPY7BuAp68PdyMzAX8HcuF/KE78UY45FH4rWAzcaYLcaYc8AEoL3FmbJljNlrjFnmfHwSWI/jl257HEUE530H5+P2wGfG4XcgQkSK5HHsKxKRYkBr4GPnsgC3AN86X3Lpvpzfx2+Bxs7XW05EwnH8p/4EwBhzzhhzDA/9XnBMLxwoIj5AELAXD/pejDG/AEcuWX2130Vz4EdjzBFjzFHgR6CF69P/2+X2xRjzgzHm/CTpvwPFnI/bAxOMMWeNMVuBzTh+17nF77srfC8AbwFPARe3kPa47wV4CBhujDnrfM0B53q3/l7AM0+nxwI7L1re5VznMZynLasBfwAxxpjzc9jtA2Kcj919P9/G8Z8307kcBRy76BfUxXkv7Ivz+ePO17uDOOAg8Kk4Lg18LCLBeOD3YozZDbwO7MBRvI8DyXjm93Kxq/0u3PY7ukRPHEes4IH7IiLtgd3GmJWXPOVx+wKUAeo7Lyv9LCI1nevdfl88sYh7NBEJAYXU+ckAAAZxSURBVCYBfYwxJy5+zjjO37h9nz8RaQMcMMYkW50lF/jgOLU20hhTDUjBccr2Ag/6XgrgOBqIA4oCwVhwpONKnvJdZEfk/9u72xirijuO498fbgnYEFpFog0hlBbwOZsoSKwxjZCNECNtFDViVJAYom9MjC+U2kDjuzYgkTY2fVJbY6wNBfrCENfHaIxgdGWNj6uSuCigGI1WrKL/vvjPdQ+3LLtrhXsP/D7Jzd57Zu7szM7dM+fMzJ3RcmAvcG+r8/JNSDoauAX4Zavz8i3pILv5ZwM3AX9vda/UcNWxEd9OjsM0TCrH2p6k75AN+L0Rsa4c3tnoji0/G9047VzOnwAXStpGdiOdB6whu806Spxqfr8uSwkfD+w+lBk+gH6gPyKeKa//QTbqdayXucBbEfFeRHwBrCPrqo71UjXSumjnOkLS1cAFwKJyUQL1K8uPyIvFF8p5YBLwnKTjqV9ZIM8D68oQwGayh3ECNShLHRvxLcC0MuN2NDkhZ2OL8zSkclX3J+DliFhVCdoINGZpXgVsqBy/ssz0nA18VOlSbKmIuDkiJkXEFPLv/0hELAIeBS4u0ZrL0ijjxSV+W9xNRcQO4G1JM8qhOcBL1LBeyG702ZKOLp+3RllqVy9NRloXm4AuSd8vvRNd5VjLSTqfHIa6MCI+rQRtBC5TfmPgh8A0YDNter6LiN6ImBgRU8p5oJ+cuLuDGtYLsJ6c3Iak6eRktfepQ720Yjbd//sgZz++Rs4OXN7q/Awzz+eQ3YBbgZ7ymE+OQT4MvE7OjjymxBfw21LGXuDMVpdhkHL9lIHZ6VPJD3gf8AADMz3HlNd9JXxqq/PdVIZO4NlSN+vJmbO1rBdgJfAK8CLwV3JWbW3qBbiPHM//gmwYrvkmdUGON/eVx+I2KksfOZbaOAfcWYm/vJTlVWBe5XjLz3f7K0tT+DYGZqfXsV5GA38r/zfPAefVoV4iwsuumpmZ1VUdu9PNzMwMN+JmZma15UbczMysptyIm5mZ1ZQbcTMzs5pyI27WIpKOldRTHjskba+8Ht3q/O2PpCVlQY+Dlf53JT0maZSkH0vqqYQtk7RF0nhJqyWde7DyYVYXHUNHMbODISJ2k99RR9IK4JOI+E1LM5V5OSoivhwkeAn5PdodI0ivIwbWbh/KUuCBiPiquuqlpMXAMvL7ux9JWgusBZ4Ybj7MDke+EzdrQ8p9lzeXu/LflTvTDkkfSlql3PN4k6SzyoYNb0qaX967VLlX9ePKfZt/Mcx0b5e0FZglaWW5631R0p1l9a1LyYuO+xu9BZL6VfbEljRbUnd5fpukeyQ9BdxVfseq8ru3Slo6SNEXMbAiWyPPlwM3Al0R8QFARLwBnCDpuG/1D29WM27EzdqMpFOBnwNnR0Qn2WN2WQkeDzwYEacAnwMryOVVFwK/qiQzi9yysxO4XFLnMNJ9IiJOj4ingTURMRM4rYSdHxH3k6uMXRoRnZFbMB7IicCciLgCuJbcNGcWMBO4XtLkpnKPASZFRH/l8FRgFdmA72JfzwNnD5EHs8Oau9PN2s9csqF7tnQpj2Vg28M9EfFQed5Lrku9V1IvMKWSxqbIPZuRtJ5c9rfjAOl+Dvyz8v45km4il2adQG5p+iAjsyEiPivPu4CTJFUvGqaR6703TOR/93neCXwMXATc0RS2i9ytzeyI5UbcrP0I+HNE3LrPwdxprHr3+xXwn8rz6v9z83rKMUS6e6Kx8HVuM7mW3NBiu6TbyMZ8f/Yy0KPXHOffTWW6LiIeHiQdgD2DpDEPeFLSrtIb0DCmvMfsiOXudLP20w1cImkCfD2LffIQ72nWJel7pUFeADw1gnTHkhcF70saR94FN3wMjKu83gacUZ5X4zXbBFxXLhiQNEPS2GqEiHgPGNs8Mz8idpIN+a8lza0ETSc3rDA7YvlO3KzNRESvpJVAt6RR5G5Ly4B3RpDMFnKC2A+AuyOiB2A46UbEbkl3k9uYvgs8Uwn+C/BHSXvIcfcVwB8kfciBZ4r/HpgM9JSu/F3kxUWzbnKc+7GmPPVJ+hnwL0kLyKGEKeS4uNkRy7uYmR1myszvUyPihlbnZaQkzSS73RcPEW8hcHJErDw0OTNrT+5ON7O2ERFbyPHvoc5NAlYfgiyZtTXfiZuZmdWU78TNzMxqyo24mZlZTbkRNzMzqyk34mZmZjXlRtzMzKym/gtQDfAUNkxBLwAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -927,7 +936,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "metadata": { "tags": [ "analysis" @@ -937,7 +946,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -956,16 +965,24 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "metadata": { "tags": [ "analysis" ] }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n" + ] + }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -994,7 +1011,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, "metadata": { "tags": [ "analysis" @@ -1004,7 +1021,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -1022,16 +1039,24 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, "metadata": { "tags": [ "analysis" ] }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Projects/Project_UWGeodynamics/virtualenv/lib/python3.9/site-packages/numpy/core/_asarray.py:102: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n" + ] + }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1061,7 +1086,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -1105,9 +1130,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "virtualenv", "language": "python", - "name": "python3" + "name": "virtualenv" }, "language_info": { "codemirror_mode": { @@ -1119,7 +1144,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb b/docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb index 1969dd26..50c63a9b 100644 --- a/docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb +++ b/docs/tutorials/Tutorial_3B_SandboxExtension_deform_mesh.ipynb @@ -198,13 +198,13 @@ "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", + "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", + "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)" + "Model.add_passive_tracers(name=\"Interface3\", vertices=coords)" ] }, { @@ -228,9 +228,9 @@ "source": [ "from UWGeodynamics import visualisation as vis\n", "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Points(interface1, pointSize=2.0)\n", - "Fig.Points(interface2, pointSize=2.0)\n", - "Fig.Points(interface3, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface2_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface3_tracers, pointSize=2.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=2.0)\n", "Fig.show()" ] @@ -376,7 +376,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -487,7 +487,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb b/docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb index b7257d9c..c864eb91 100644 --- a/docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb +++ b/docs/tutorials/Tutorial_3_SandboxExtension_static_mesh.ipynb @@ -54,7 +54,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/romain/Projects/Project_UWGeodynamics/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -187,24 +187,24 @@ "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", + "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", + "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)" + "Model.add_passive_tracers(name=\"Interface3\", vertices=coords)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -217,9 +217,9 @@ "source": [ "from UWGeodynamics import visualisation as vis\n", "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Points(interface1, pointSize=2.0)\n", - "Fig.Points(interface2, pointSize=2.0)\n", - "Fig.Points(interface3, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface2_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface3_tracers, pointSize=2.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=2.0)\n", "Fig.show()" ] @@ -312,16 +312,16 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -363,9 +363,18 @@ "cell_type": "code", "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Projects/Project_Surface_processes/UWGeodynamics/UWGeodynamics/_model.py:1524: UserWarning: You have not passed anything to the temperature argument. The temperature field will not be initialised\n", + " warnings.warn(\"You have not passed anything to the temperature argument. The temperature field will not be initialised\")\n" + ] + } + ], "source": [ - "Model.init_model()" + "Model.init_model(pressure=\"lithostatic\")" ] }, { @@ -469,9 +478,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "virtualenv", "language": "python", - "name": "python3" + "name": "virtualenv" }, "language_info": { "codemirror_mode": { @@ -483,7 +492,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb b/docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb index 80980ad6..e10cd50f 100644 --- a/docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb +++ b/docs/tutorials/Tutorial_4_NumericalSandboxCompression.ipynb @@ -176,19 +176,19 @@ "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", + "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", + "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)\n", + "Model.add_passive_tracers(name=\"Interface3\", vertices=coords)\n", "\n", "coords[:, 1] = GEO.nd(microbeads.top)\n", - "interface4 = Model.add_passive_tracers(name=\"Interface4\", vertices=coords)\n", + "Model.add_passive_tracers(name=\"Interface4\", vertices=coords)\n", "\n", "coords[:, 1] = GEO.nd(microbeads.bottom)\n", - "interface5 = Model.add_passive_tracers(name=\"Interface5\", vertices=coords)" + "Model.add_passive_tracers(name=\"Interface5\", vertices=coords)" ] }, { @@ -212,11 +212,11 @@ "source": [ "from UWGeodynamics import visualisation as vis\n", "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Points(interface1, pointSize=2.0)\n", - "Fig.Points(interface2, pointSize=2.0)\n", - "Fig.Points(interface3, pointSize=2.0)\n", - "Fig.Points(interface4, pointSize=2.0)\n", - "Fig.Points(interface5, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface2_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface3_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface4_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface5_tracers, pointSize=2.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=2.0)\n", "Fig.show()" ] @@ -364,6 +364,7 @@ "metadata": {}, "outputs": [], "source": [ + "Model.init_model(pressure=\"lithostatic\", temperature=None)\n", "Model.solver.set_inner_method(\"mumps\")\n", "Model.solver.set_penalty(1e6)" ] @@ -398,11 +399,11 @@ "source": [ "from UWGeodynamics import visualisation as vis\n", "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Points(interface1, pointSize=2.0)\n", - "Fig.Points(interface2, pointSize=2.0)\n", - "Fig.Points(interface3, pointSize=2.0)\n", - "Fig.Points(interface4, pointSize=2.0)\n", - "Fig.Points(interface5, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", + "Fig.Points(Model.Interface1_tracers, pointSize=2.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=3.0)\n", "Fig.show()" ] @@ -424,7 +425,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_5_Convergence_Model.ipynb b/docs/tutorials/Tutorial_5_Convergence_Model.ipynb index de86e523..51cc5180 100644 --- a/docs/tutorials/Tutorial_5_Convergence_Model.ipynb +++ b/docs/tutorials/Tutorial_5_Convergence_Model.ipynb @@ -18,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/romain/Projects/Project_UWGeodynamics/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -188,23 +188,25 @@ "coords[:, 0] = np.linspace(GEO.nd(Model.minCoord[0]), GEO.nd(Model.maxCoord[0]), npoints)\n", "coords[:, 1] = GEO.nd(crust.top)\n", "\n", - "surface_tracers = Model.add_passive_tracers(name=\"line1\", vertices=coords)\n", + "Model.add_passive_tracers(name=\"Surface\", vertices=coords)\n", "\n", "lines = []\n", "for index in range(7):\n", " coords[:, 1] -= GEO.nd(5. * u.km)\n", - " lines.append(Model.add_passive_tracers(name=\"line{0}\".format(index + 1), vertices=coords))" + " tracers_name = \"line{0}\".format(index + 1)\n", + " Model.add_passive_tracers(name=tracers_name, vertices=coords)\n", + " lines.append(tracers_name)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -217,9 +219,9 @@ "source": [ "from UWGeodynamics import visualisation as vis\n", "Fig = vis.Figure(figsize=(1200,400))\n", - "Fig.Points(surface_tracers, pointSize=4.0)\n", + "Fig.Points(Model.Surface_tracers, pointSize=4.0)\n", "for line in lines:\n", - " Fig.Points(line, pointSize=2.0)\n", + " Fig.Points(eval(f\"Model.{line}_tracers\"), pointSize=2.0)\n", "Fig.Points(Model.swarm, Model.materialField, fn_size=2.0)\n", "Fig.show()" ] @@ -420,7 +422,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(temperature=\"steady-state\", pressure=\"lithostatic\")" ] }, { @@ -1239,9 +1241,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "virtualenv", "language": "python", - "name": "python3" + "name": "virtualenv" }, "language_info": { "codemirror_mode": { @@ -1253,7 +1255,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb b/docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb index adba2ce1..e6d14783 100644 --- a/docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb +++ b/docs/tutorials/Tutorial_6_Simple_Surface_Processes.ipynb @@ -339,7 +339,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(temperature=\"steady-state\", pressure=\"lithostatic\")" ] }, { @@ -424,7 +424,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb b/docs/tutorials/Tutorial_7_3D_Lithospheric_Model.ipynb index a5f8bd86..4d5e80af 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/workspace/codes/UWGeodynamics_use_with_docker/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" + "loaded rc file /home/romain/Projects/Project_Surface_processes/UWGeodynamics/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -106,9 +106,2454 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\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" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Error handling request\n", + "Traceback (most recent call last):\n", + " File \"/home/romain/Projects/Project_Surface_processes/surface_processes/lib/python3.9/site-packages/aiohttp/web_protocol.py\", line 314, in data_received\n", + " messages, upgraded, tail = self._request_parser.feed_data(data)\n", + " File \"aiohttp/_http_parser.pyx\", line 546, in aiohttp._http_parser.HttpParser.feed_data\n", + "aiohttp.http_exceptions.BadStatusLine: 400, message=\"Bad status line 'invalid HTTP method'\"\n", + "Error handling request\n", + "Traceback (most recent call last):\n", + " File \"/home/romain/Projects/Project_Surface_processes/surface_processes/lib/python3.9/site-packages/aiohttp/web_protocol.py\", line 314, in data_received\n", + " messages, upgraded, tail = self._request_parser.feed_data(data)\n", + " File \"aiohttp/_http_parser.pyx\", line 546, in aiohttp._http_parser.HttpParser.feed_data\n", + "aiohttp.http_exceptions.BadStatusLine: 400, message=\"Bad status line 'invalid HTTP method'\"\n" + ] + } + ], "source": [ "if GEO.nProcs == 1:\n", " Fig = vis.Figure(resolution=(1200,600))\n", @@ -189,7 +2634,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 14, @@ -217,7 +2662,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -239,7 +2684,7 @@ "metadata": {}, "outputs": [], "source": [ - "Model.init_model()" + "Model.init_model(temperature=\"steady-state\", pressure=\"lithostatic\")" ] }, { @@ -339,7 +2784,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb b/docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb index 48a9dc04..91f2b487 100644 --- a/docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb +++ b/docs/tutorials/Tutorial_8_Subduction_ViscoElastic.ipynb @@ -322,7 +322,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/tutorials/Tutorial_9_passive_margins.ipynb b/docs/tutorials/Tutorial_9_passive_margins.ipynb index 9ff80df4..9979ca7a 100644 --- a/docs/tutorials/Tutorial_9_passive_margins.ipynb +++ b/docs/tutorials/Tutorial_9_passive_margins.ipynb @@ -21,7 +21,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/workspace/UWGeodynamics/uwgeo-data/uwgeodynamicsrc\n" ] } ], @@ -197,13 +197,13 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -224,7 +224,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -241,7 +241,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -266,30 +266,6 @@ "sediment = GEO.LinearDensity(1900. * u.kilogram / u.metre**3, thermalExpansivity=3e-5 / u.kelvin)" ] }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "Fig = vis.Figure(figsize=(800,400))\n", - "Fig.Points(Model.swarm, GEO.dimensionalise(Model.densityField, u.kilogram / u.metre**3))\n", - "Fig.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -301,7 +277,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -311,7 +287,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -347,7 +323,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -356,7 +332,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -448,7 +424,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -476,16 +452,16 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "" ] }, - "execution_count": 27, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -505,16 +481,16 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 28, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -534,7 +510,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -543,18 +519,48 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jovyan/workspace/UWGeodynamics/_model.py:1528: UserWarning: You have not passed anything to the pressure argument. The pressure field will not be initialised\n", + " warnings.warn(\"You have not passed anything to the pressure argument. The pressure field will not be initialised\")\n" + ] + } + ], "source": [ - "Model.init_model()" + "Model.init_model(temperature=\"steady-state\", pressure=\"lithostatic\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "Fig = vis.Figure(figsize=(800,400))\n", "Fig.Points(Model.swarm, GEO.dimensionalise(Model.viscosityField, u.pascal * u.second), logScale=True)\n", @@ -598,7 +604,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/setup.py b/setup.py index fd450161..e5cdf78b 100644 --- a/setup.py +++ b/setup.py @@ -7,9 +7,11 @@ import re MAJOR = 2 -MINOR = 10 -MICRO = 2 -ISRELEASED = True + +MINOR = 11 +MICRO = 0 +ISRELEASED = False + VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO) here = path.abspath(path.dirname(__file__)) diff --git a/tests/test_simple.py b/tests/test_simple.py index 38a28977..1257e5e9 100644 --- a/tests/test_simple.py +++ b/tests/test_simple.py @@ -131,7 +131,7 @@ def test_passive_tracers(): 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) + Model.add_passive_tracers(name="Tracers", vertices=coords) def test_set_velocity_boundary_conditions_in_3D(): velocityBCs = Model3D.set_velocityBCs(